條件查詢需要用到where語句,where必須放到from語句表的后面。
支持如下運算符
運算法 |
說明 |
= |
等于 |
<>或!= |
不等于 |
< |
小于 |
<= |
小于等于 |
> |
大于 |
>= |
大于等于 |
between … and …. |
兩個值之間 |
is null |
為null |
● 查詢薪水為5000的員工
select empno, ename, sal from emp where sal=5000;
● 查詢薪水不等于5000的員工
select empno, ename, sal from emp where sal <> 5000;
● 查詢工作崗位不等于MANAGER的員工
select empno, ename, sal from emp where job <> 'MANAGER';
在sql語句中如果是字符串采用單引號引起來,不同于java中采用雙引號,如果是數(shù)值型可以用單引號引起來,但是一定要保證字符串的內(nèi)容可以轉(zhuǎn)換為數(shù)字。
● 查詢薪水為1600到3000的員工(第一種方式,采用>=和<=)
select empno, ename, sal from emp where sal >=1600 and sal <=3000;
● 查詢薪水為1600到3000的員工(第二種方式,采用between … and …)
select empno, ename, sal from emp where sal between 1600 and 3000;
between ….and …,包含最大值和最小值。
between ….and …不僅僅可以應(yīng)用到數(shù)值類型的數(shù)據(jù)上,還可以使用在字符類型的數(shù)據(jù)上。
between ….and …對于兩個參數(shù)的設(shè)定一定是小的數(shù)在前,大的數(shù)在后。
Null為空,但不是空串,為null可以設(shè)置這個字段不同填值,如果查詢?yōu)閚ull的字段,采用is null。
● 查詢津貼為空的員工
select * from emp where comm is null;
● 查詢津貼不為空的員工
select * from emp where comm is not null;
and表示并且的含義,表示所有的條件必須滿足。
● 工作崗位為MANAGER,薪水大于2500的員工
select empno, ename, sal from emp where job='MANAGER' and sal>2500;
or,只要滿足條件即可,相當(dāng)于包含。
● 查詢出job為manager和job為salesman的員工
select * from emp where job='MANAGER' or job='SALESMAN';
● 查詢薪水大于1800,并且部門代碼為20或30的(錯誤的寫法)
select * from emp where sal>1800 and deptno=20 or deptno=30;
以上輸出是錯誤的,由于表達式優(yōu)先級導(dǎo)致的,首先查詢出sal>1800 and deptno=20的員工,在和并上deptno=30的員工。
● 查詢薪水大于1800,并且部門代碼為20或30的(正確的寫法)
select * from emp where sal>1800 and (deptno=20 or deptno=30);
關(guān)于運算符的問題:不用記,沒有把握盡量采用括號。
in表示包含的意思,完全可以采用or來表示,采用in會更簡潔一些。
● 查詢出job為manager和job為salesman的員工
select * from emp where job in('MANAGER','SALESMAN');
not
● 查詢job不等于MANAGER并且不能與SALESMAN的員工(第一種寫法)
select * from emp where job <> 'MANAGER' and job <> 'SALESMAN';
● 查詢job不等于MANAGER并且不能與SALESMAN的員工(第二種寫法)
select * from emp where job not in('MANAGER','SALESMAN');
Like可以實現(xiàn)模糊查詢,like支持%和下劃線匹配。
● 查詢姓名以M開頭所有的員工
select * from emp where ename like ' M %';
● 查詢姓名以T結(jié)尾的所有的員工
select * from emp where ename like '%T';
● 查詢姓名中包含O的所有的員工
select * from emp where ename like '%O%';
● 查詢姓名中第二個字符為A的所有員工
select * from emp where ename like '_A%';
Like中%和下劃線的差別?
%匹配任意字符出現(xiàn)任意次數(shù)
下劃線只匹配任意字符出現(xiàn)一次
Like語句可以應(yīng)用到數(shù)值類型的數(shù)據(jù)上,但是如果不用‘’括起來的話,那么不可以使用%和下劃線,類似于等號(=),如果使用‘’括起來的話,那么可以使用%和下劃線,用法和字符類型的一樣。因為SQL在處理時,首先將數(shù)字轉(zhuǎn)換成字符串然后進行處理。