MySQL单表查询详解

一、between……and……操作符
1、查询薪水为1600到3000的员工(第一种方式:采用>= 、<=) 
例如:select empno,ename,sal from emp where sal >= 1600 and sal <= 3000; 
 
2、查询薪水为1600到3000的员式(第二种方式:采用between…and…) 
例如:select empno,ename,sal from emp where sal between 1600 and 3000; 
 
注:关亍between … and … 它是包含最大值和最小值的 
3、between … and … 同样也可用在字符上,用在字符上区间为:前闭后开; 
例如: select ename from emp where ename between “A”and “F”; 


二、is null
Null 为空,它不是一个数值,不是一个空串,为null可以设置这个字段不填值,如果查询为null的字段,采用is null。 
1、查询津贴为空的员工 
错误: select empno,ename,comm from emp where comm = null; 
 
原因:以上无法查询出符合条件的数据,因为null类型比较特殊,必须使用 is 来比较 
正确:select empno,ename,comm from emp where comm is null; 
 
2、查询津贴不为空的员工 
例如:select empno,ename,comm from emp where comm is not null; 


三、and:表示并且,表示所有查询条件必须满足
1、查询工作岗位为“MANAGER”并且薪水大于2500的员工 
例如:select empno,ename,job,sal from emp where job =„MANAGER‟ and sal > 2500; 


四、or:只要满足条件即可,相当于包含
1、查询出 job 为 SALESMAN 和 job为MANAGER的员工 
例如: select ename,job from emp where job = “SALESMAN”or job = “MANAGER”; 


五、and不or表达式的优化级
and的优先级高于or 
1、查询薪水大于1800,并且部门编号为20或30的员工 
例如: 错误:select * from emp sal>1800 and deptno=20 or deptno = 30; 
 
分析:以上输出的结果不是是我们预期的结果,薪水小于1800的也查出来了,原因是表达式的优先级导致的,首先SQL语句过滤了 sal > 1800 and deptno = 20,然后再将deptno = 30的员工合并过来,所以是不正确的 
正确: select * from emp where sal>1800 and (deptno=20 or deptno=30); 
 
注: 关亍运算符的问题不用死记硬背,没有把握的尽量采用括号;

六、 in:表示包含的意思,完全可以采用or来表示,采用in会更简洁一些。
1、. 查询出Job为 SALESMAN 和 Job为 MANAGER 的员工 
例如: select ename,job from emp where job in (“SALESMAN”,“MANAGER”); 
 
2、查询出薪水为1600和3000的员工 
例如: select ename,sal from emp where sal in (1600,3000); 
 
3、查询出薪水不是1600和3000的员工 
例如: select ename,sal from emp where sal not in (1600,3000); 


七、not
1、第一种写法:查询出薪水不是1600和薪水不是3000的员工 
例如: select ename,sal from emp where sal <> 1600 and sal <> 3000; 
 
2、第二种写法:查询出薪水不是1600和薪水不是3000的员工 
例如: select ename,sal from emp where not (sal = 1600 or sal = 3000); 
 
3、第三种写法:查询出薪水不是1600和薪水不是3000的员工 
例如: select ename,sal from emp where sal not in (1600,3000); 
 
4、查询出津贴不为null的员工 
例如: select * from emp where comm is not null; 


八、Like :可以实现模糊查诟,like支持%和下划线匹配
1、查询以姓名以 M 开头的所有员工‘M%’ 
例如: select ename from emp where ename like “M%”; 
 
2、查询姓名以N结尾的所有员工‘%N’ 
例如: select ename from emp where ename like “%N”; 
 
3、查询姓名中包含O的所有员工‘%O%’ 
例如: select ename from emp where ename like “%O%”; 
 
4、查询姓名中第二个字符为A的所有员工‘_A%’ 
例如: select ename from emp where ename like “_A%”; 
 
5、查询姓名中倒数第二个字符为E的所有员工‘%E_’ 
例如: select ename from emp where ename like “%E_”; 
 
6、查询姓名中第三个字符为N的所有员工姓名‘__R%’ 
例如: select ename from emp where ename like “R%”; 

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/83543422