天天看點

SQL中的DQL語句二(學習筆記三)DQL語句簡介注:以下将使用mysql資料庫管理系統中的mysql資料庫中的emp表作為例子一、條件查詢(續)二、資料排序

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
...