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%”;