條件查詢需要用到where語句,where必須放到from語句表的后面。
支持如下運(yùn)算符:
|
運(yùn)算符 |
說明 |
|
= |
等于 |
|
<>或!= |
不等于 |
|
< |
小于 |
|
<= |
小于等于 |
|
> |
大于 |
|
>= |
大于等于 |
|
between … and …. |
兩個(gè)值之間,等同于 >= and <= |
|
is null |
為null(is not null 不為空) |
|
and |
并且 |
|
or |
或者 |
|
in |
包含,相當(dāng)于多個(gè)or(not in不在這個(gè)范圍中) |
|
not |
not可以取非,主要用在is 或in中 |
|
like |
like稱為模糊查詢,支持%或下劃線匹配 %匹配任意個(gè)字符 下劃線,一個(gè)下劃線只匹配一個(gè)字符 |
● 查詢薪水為5000的員工
select empno, ename, sal from emp where sal=5000;

● 查詢job為MANAGER的員工
select empno, ename from emp where job=manager;

以上查詢出現(xiàn)錯(cuò)誤,因?yàn)閖ob為字符串,所以出現(xiàn)了以上錯(cuò)誤
select empno, ename from emp where job="manager";

select empno, ename from emp where job=’manager’;

也可以使用單引號(hào)
select empno, ename from emp where job='MANAGER';

以上輸出正確,Mysql默認(rèn)情況下大小寫是不敏感的。
注意:
MySQL在windows下是不區(qū)分大小寫的,將script文件導(dǎo)入MySQL后表名也會(huì)自動(dòng)轉(zhuǎn)化為小寫,結(jié)果再 想要將數(shù)據(jù)庫導(dǎo)出放到linux服務(wù)器中使用時(shí)就出錯(cuò)了。因?yàn)樵趌inux下表名區(qū)分大小寫而找不到表,查了很多都是說在linux下更改MySQL的設(shè)置使其也不區(qū)分大小寫,但是有沒有辦法反過來讓windows 下大小寫敏感呢。其實(shí)方法是一樣的,相應(yīng)的更改windows中MySQL的設(shè)置就行了。
具體操作:
在MySQL的配置文件my.ini中增加一行:
lower_case_table_names = 0;
其中 0:區(qū)分大小寫,1:不區(qū)分大小寫;
MySQL在Linux下數(shù)據(jù)庫名、表名、列名、別名大小寫規(guī)則是這樣的:
● 數(shù)據(jù)庫名與表名是嚴(yán)格區(qū)分大小寫的
● 表的別名是嚴(yán)格區(qū)分大小寫的
● 列名與列的別名在所有的情況下均是忽略大小寫的
● 變量名也是嚴(yán)格區(qū)分大小寫的;
● MySQL在Windows下都不區(qū)分大小寫
● 查詢薪水不等于5000的員工
select empno, ename, sal from emp where sal <> 5000;

以下寫法等同于以上寫法,建議使用第一種寫法;
select empno, ename, sal from emp where sal != 5000;
數(shù)值也可以采用單引號(hào)引起來,如一下語句是正確的(不建議這么寫):
select empno, ename, sal from emp where sal <> '5000';
● 查詢工作崗位不等于MANAGER的員工
select empno, ename, sal from emp where sal <> '5000';
● 查詢薪水為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;

關(guān)于between … and …,它是包含最大值和最小值的。
● Null為空,但不是空串,為null可以設(shè)置這個(gè)字段不填值,如果查詢?yōu)閚ull的字段,采用is null。
● 查詢津貼為空的員工
select * from emp where comm=null;

以上也無法查詢出符合條件的數(shù)據(jù),因?yàn)閚ull類型比較特殊,必須使用 is來比較。
select * from emp where comm is null

以上查詢正確。
and表示并且的含義,表示所有的條件必須滿足;
工作崗位為MANAGER,薪水大于2500的員工;
select * 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的員工(錯(cuò)誤的寫法)
select * from emp where sal > 1800 and deptno = 20 or deptno = 30;

以上輸出不是預(yù)期結(jié)果,薪水小于1800的數(shù)據(jù)也被查詢上來了,原因是表達(dá)式的優(yōu)先級(jí)導(dǎo)致的,首先過濾sal > 1800 and deptno = 20,然后再將deptno = 30員工合并過來,所以是不對(duì)的。
● 查詢薪水大于1800,并且部門代碼為20或30的(正確的寫法)
select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);

關(guān)于運(yùn)算符的問題:不用記,沒有把握盡量采用括號(hào)。
in表示包含的意思,完全可以采用or來表示,采用in會(huì)更簡潔一些。
● 查詢出job為manager或者job為salesman的員工
select * from emp where job in ('manager','salesman');

● 查詢出薪水包含1600和薪水包含3000的員工
select * from emp where sal in(1600, 3000);

● 查詢出薪水不包含1600和薪水不包含3000的員工(第一種寫法)
select * from emp where sal <> 1600 and sal <> 3000;

● 查詢出薪水不包含1600和薪水不包含3000的員工(第二種寫法)
select * from emp where not (sal = 1600 or sal = 3000);

● 查詢出薪水不包含1600和薪水不包含3000的員工(第三種寫法)
select * from emp where sal not in (1600, 3000);

● 查詢出津貼不為null的所有員工
select * from emp where comm is not null;

Like可以實(shí)現(xiàn)模糊查詢,like支持%和下劃線匹配;
● 查詢姓名以M開頭所有的員工
select * from emp where ename like 'M%';

● 查詢姓名以N結(jié)尾的所有的員工
select * from emp where ename like '%N';

● 查詢姓名中包含O的所有的員工
select * from emp where ename like '%O%';

● 查詢姓名中第二個(gè)字符為A的所有員工
select * from emp where ename like '_A%';

Like中%和下劃線的差別?
● %匹配任意字符出現(xiàn)的個(gè)數(shù)
● 下劃線只匹配一個(gè)字符
● Like 中的表達(dá)式必須放到單引號(hào)中|雙引號(hào)中,以下寫法是錯(cuò)誤的:
select * from emp where ename like _A%