SQL中的DQL語句二
- DQL語句簡介
- 注:以下将使用mysql資料庫管理系統中的mysql資料庫中的emp表作為例子
- 一、條件查詢(續)
-
- 1.and 與 or
- 2.in
- 3.模糊查詢like
- 二、資料排序
-
- 關于順序
DQL語句簡介
Data QueryLanguage 資料查詢語言
注:以下将使用mysql資料庫管理系統中的mysql資料庫中的emp表作為例子
本次内容接上次的學習筆記:
SQL中的DQL語句一(學習筆記二)
一、條件查詢(續)
1.and 與 or
and 與or中最需要注意的是優先級問題,
比如:找出薪資大于1000的并且部門編号是20或30部門的員工。
稍不注意就可能會寫成:
因為and 的優先級大于or,是以,上面的代碼實際上是選出了所有部門編号為30的員工和部門編号為20且工資大于1000的員工。見下面的輸出結果。
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| JAMES | 950.00 | 30 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
在sql中當然也有小括号。是以,在不确定優先級的時候,用小括号是必不可少的。
輸出結果:
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
2.in
in在有些時候是可以代替or來使用的,比如,選擇崗位是manager和salesman的員工,用or是這樣寫的:
如果使用 in 則是這樣寫的:
特别注意: 在and與or中我們要找出薪資大于1000的并且部門編号是20或30部門的員工,如果用in來寫,是這樣的
輸出結果:
+--------+---------+--------+
| ename | sal | deptno |
+--------+---------+--------+
| ALLEN | 1600.00 | 30 |
| WARD | 1250.00 | 30 |
| JONES | 2975.00 | 20 |
| MARTIN | 1250.00 | 30 |
| BLAKE | 2850.00 | 30 |
| SCOTT | 3000.00 | 20 |
| TURNER | 1500.00 | 30 |
| ADAMS | 1100.00 | 20 |
| FORD | 3000.00 | 20 |
+--------+---------+--------+
即在in中的括号并不表示一個區間,而是表示等于,上面代碼的意思就是
選出 薪資大于1000的并且部門編号是20 或 30部門的員工,
而不是薪資大于1000的并且部門編号是20 到 30部門的員工。
注意不要犯迷糊。
mysql中還有not關鍵字,如果想選出不包含什麼的,可以寫成 not in
3.模糊查詢like
mysql中提供了模糊查詢like,這個關鍵字可以比較人性化的查詢一些東西。
like 一般與 % 和 _ 進行搭配使用
% 代表任意多個字元, _ 代表任意1個字元
'%a' //以a結尾的資料
'a%' //以a開頭的資料
'%a%' //含有a的資料
'_a%' //在第二位含有a的資料
'_a_' //三位且中間字母是a的
'_a' //兩位且結尾字母是a的
'a_' //兩位且開頭字母是a的
注意:有的時候可能會出現查詢 _ 或者 % 的情況,這個時候,來一個轉義字元就可以進行查詢了 即 ’\%‘或者’\_‘即可.
二、資料排序
在資料排序中,需要用到新的内容,order by
關于order by ,它的邏輯是以某列為标準對整個表進行升序排序或者降序排序。
例:
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| JAMES | 950.00 |
| ADAMS | 1100.00 |
| WARD | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN | 1600.00 |
| CLARK | 2450.00 |
| BLAKE | 2850.00 |
| JONES | 2975.00 |
| SCOTT | 3000.00 |
| FORD | 3000.00 |
| KING | 5000.00 |
+--------+---------+
order by 預設是升序排序,當然,我們也可以指定排序方式,
asc表示升序,desc表示降序。這裡,寫在最後面。
例:
select ename,sal from emp order by sal asc;
select ename,sal from emp order by sal desc;
注:對于字元串,它是按照首字母進行排序,當首字母相同時比較第二個字母,依次類推.
例:
輸出結果:
+--------+
| ename |
+--------+
| ADAMS |
| ALLEN |
| BLAKE |
| CLARK |
| FORD |
| JAMES |
| JONES |
| KING |
| MARTIN |
| MILLER |
| SCOTT |
| SMITH |
| TURNER |
| WARD |
+--------+
order by 也可以通過兩個條件進行排序.
例:
select ename,sal from emp order by sal asc,ename asc;
select ename,sal from emp order by sal asc,ename desc;
輸出結果:
+--------+---------+ +--------+---------+
| ename | sal | | ename | sal |
+--------+---------+ +--------+---------+
| SMITH | 800.00 | | SMITH | 800.00 |
| JAMES | 950.00 | | JAMES | 950.00 |
| ADAMS | 1100.00 | | ADAMS | 1100.00 |
| MARTIN | 1250.00 | | WARD | 1250.00 |
| WARD | 1250.00 | | MARTIN | 1250.00 |
| MILLER | 1300.00 | | MILLER | 1300.00 |
| TURNER | 1500.00 | | TURNER | 1500.00 |
| ALLEN | 1600.00 | | ALLEN | 1600.00 |
| CLARK | 2450.00 | | CLARK | 2450.00 |
| BLAKE | 2850.00 | | BLAKE | 2850.00 |
| JONES | 2975.00 | | JONES | 2975.00 |
| FORD | 3000.00 | | SCOTT | 3000.00 |
| SCOTT | 3000.00 | | FORD | 3000.00 |
| KING | 5000.00 | | KING | 5000.00 |
+--------+---------+ +--------+---------+
注意看sal同時為1250,與sal同時為3000的那個,他們在排序時位置是不一樣的。
注意:越靠前的字段越能起到主導作用。隻有目前面的字段無法完成排序的時候,才會啟用後面的字段。
關于順序
結合上面的 where,目前sql查詢語句的寫的順序為
select
*
from
表名
where
條件
order by
...