條件查詢需要用到where語句,where必須放到from語句表的后面。
支持如下運算符:
運算符 |
說明 |
= |
等于 |
<>或!= |
不等于 |
< |
小于 |
<= |
小于等于 |
> |
大于 |
>= |
大于等于 |
between … and …. |
兩個值之間,等同于 >= and <= |
is null |
為null(is not null 不為空) |
and |
并且 |
or |
或者 |
in |
包含,相當于多個or(not in不在這個范圍中) |
not |
not可以取非,主要用在is 或in中 |
like |
like稱為模糊查詢,支持%或下劃線匹配 %匹配任意個字符 下劃線,一個下劃線只匹配一個字符 |
● 查詢薪水為5000的員工
select empno, ename, sal from emp where sal=5000;
● 查詢job為MANAGER的員工
select empno, ename from emp where job=manager;
以上查詢出現錯誤,因為job為字符串,所以出現了以上錯誤
select empno, ename from emp where job="manager";
select empno, ename from emp where job=’manager’;
也可以使用單引號
select empno, ename from emp where job='MANAGER';
以上輸出正確,Mysql默認情況下大小寫是不敏感的。
注意:
MySQL在windows下是不區分大小寫的,將script文件導入MySQL后表名也會自動轉化為小寫,結果再 想要將數據庫導出放到linux服務器中使用時就出錯了。因為在linux下表名區分大小寫而找不到表,查了很多都是說在linux下更改MySQL的設置使其也不區分大小寫,但是有沒有辦法反過來讓windows 下大小寫敏感呢。其實方法是一樣的,相應的更改windows中MySQL的設置就行了。
具體操作:
在MySQL的配置文件my.ini中增加一行:
lower_case_table_names = 0;
其中 0:區分大小寫,1:不區分大小寫;
MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:
● 數據庫名與表名是嚴格區分大小寫的
● 表的別名是嚴格區分大小寫的
● 列名與列的別名在所有的情況下均是忽略大小寫的
● 變量名也是嚴格區分大小寫的;
● MySQL在Windows下都不區分大小寫
● 查詢薪水不等于5000的員工
select empno, ename, sal from emp where sal <> 5000;
以下寫法等同于以上寫法,建議使用第一種寫法;
select empno, ename, sal from emp where sal != 5000;
數值也可以采用單引號引起來,如一下語句是正確的(不建議這么寫):
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;
關于between … and …,它是包含最大值和最小值的。
● Null為空,但不是空串,為null可以設置這個字段不填值,如果查詢為null的字段,采用is null。
● 查詢津貼為空的員工
select * from emp where comm=null;
以上也無法查詢出符合條件的數據,因為null類型比較特殊,必須使用 is來比較。
select * from emp where comm is null
以上查詢正確。
and表示并且的含義,表示所有的條件必須滿足;
工作崗位為MANAGER,薪水大于2500的員工;
select * from emp where job='MANAGER' and sal > 2500;
or,只要滿足條件即可,相當于包含;
查詢出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;
以上輸出不是預期結果,薪水小于1800的數據也被查詢上來了,原因是表達式的優先級導致的,首先過濾sal > 1800 and deptno = 20,然后再將deptno = 30員工合并過來,所以是不對的。
● 查詢薪水大于1800,并且部門代碼為20或30的(正確的寫法)
select * from emp where sal > 1800 and (deptno = 20 or deptno = 30);
關于運算符的問題:不用記,沒有把握盡量采用括號。
in表示包含的意思,完全可以采用or來表示,采用in會更簡潔一些。
● 查詢出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可以實現模糊查詢,like支持%和下劃線匹配;
● 查詢姓名以M開頭所有的員工
select * from emp where ename like 'M%';
● 查詢姓名以N結尾的所有的員工
select * from emp where ename like '%N';
● 查詢姓名中包含O的所有的員工
select * from emp where ename like '%O%';
● 查詢姓名中第二個字符為A的所有員工
select * from emp where ename like '_A%';
Like中%和下劃線的差別?
● %匹配任意字符出現的個數
● 下劃線只匹配一個字符
● Like 中的表達式必須放到單引號中|雙引號中,以下寫法是錯誤的:
select * from emp where ename like _A%