尚硅谷之MySQL基础
3、逻辑运算符
#三、逻辑运算符 #与&&,或||,非! #与 AND,或 OR ,非 NOT,异或 XOR #查询性别男,并且在90以前出生的员工 SELECT * FROM t_employee WHERE gender='男' AND birthday<'1990-01-01'; #查询职位编号job_id是1或2的员工 SELECT * FROM t_employee WHERE job_id =1 OR job_id = 2; #查询基本薪资是在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE basic_salary >=9000 AND basic_salary<=12000; #查询基本薪资不在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE NOT (basic_salary >=9000 AND basic_salary<=12000); SELECT eid,basic_salary FROM t_salary WHERE basic_salary <9000 OR basic_salary>12000; |
4、范围和集合
#四、表示区间范围和集合范围 #between ... and ... 和 not between ... and ... #in(集合) 和 not in(...) #查询基本薪资是在9000-12000之间的员工编号和基本薪资 SELECT eid,basic_salary FROM t_salary WHERE basic_salary BETWEEN 9000 AND 12000; #查询eid是1,3,5的基本工资 SELECT eid,basic_salary FROM t_salary WHERE eid IN (1,3,5); |
5、模糊查询
#五、模糊查询 #like 和 通配符 一起使用 #like _ 匹配单个字符 #like % 匹配任意个字符 #查询名字中有'冰'字的员工信息 SELECT * FROM t_employee WHERE ename LIKE '%冰%'; #查询姓李的员工信息 SELECT * FROM t_employee WHERE ename LIKE '李%'; #查询姓李,名字就一个字的员工信息 SELECT * FROM t_employee WHERE ename LIKE '李_'; #查询李冰冰的信息 SELECT * FROM t_employee WHERE ename LIKE '李冰冰'; |
通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值: mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0; mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%'; 第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。 下面的语句也是合法的: mysql> SELECT * FROM tbl_name WHERE set_col & 1; mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2'; 第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与'val1,val2'比较返回的结果与同'val2,val1'比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。 如果想要为SET列确定所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE set_col并解析输出中第2列的SET定义。 有什么实际应用呢? 比如我们设定用户的权限控制,一个用户可能会有多种权限,我们使用所有权限创建一个SET类型的字段,我们不需要用一系列int来定义各种权限了,直接使用一个SET字段即可: /* 用户权限permission表 */ create table user_permission( id int UNSIGNED not null auto_increment, user_id int not null , permission set('阅读','评论','发帖') not null, primary key(id), unique (user_id) ); desc user_permission; insert into user_permission values (0,1,'阅读'),(0,2,'阅读'),(0,3,'阅读,评论'); insert into user_permission values (0,4,'阅读,评论,发帖'); select *,permission+0 from user_permission; select permission from user_permission where user_id=1; select * from user_permission where permission & 10; SELECT * FROM user_permission WHERE FIND_IN_SET('评论',permission)>0; |