国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL筆記之子查詢使用介紹

2020-01-18 23:45:34
字體:
來源:轉載
供稿:網友

子查詢是將一個查詢語句嵌套在另一個查詢語句中

內層查詢語句的查詢結果,可以為外層查詢語句提供查詢條件

因為在特定情況下,一個查詢語句的條件需要另一個查詢語句來獲取

參考表:employee

 

參考表:department

帶IN關鍵字的子查詢
復制代碼 代碼如下:

mysql> SELECT * FROM employee
    -> WHERE d_id IN
    -> (SELECT d_id FROM department);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 張三   |   26 | 男   | 北京市海淀區         |
|    2 | 1001 | 李四   |   24 | 女   | 北京市昌平區         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南長沙市           |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

此處首先查詢出department表中所有d_id字段的信息,并將結果作為條件

接著查詢employee表中以d_id為條件的所有字段信息

NOT IN的效果與上面剛好相反

帶比較運算符的子查詢

復制代碼 代碼如下:

mysql> SELECT d_id, d_name FROM department
    -> WHERE d_id!=
    -> (SELECT d_id FROM employee WHERE age=24);
+------+-----------+
| d_id | d_name    |
+------+-----------+
| 1002 | 生產部    |
| 1003 | 銷售部    |
+------+-----------+
 rows in set (0.00 sec)

這里查詢出了哪些部門沒有年齡為24歲的員工,看起來有點復雜

此外,運算符還有很多,這里不再贅述


帶EXISTS關鍵字的子查詢

EXISTS關鍵字表示存在。使用EXISTS關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個真假值,如果內層查詢語句查詢到滿足條件的記錄,就返回true,否則返回false

當返回的值為true時,外層查詢語句將進行查詢,否則不進行查詢

復制代碼 代碼如下:

mysql> SELECT * FROM employee
    -> WHERE EXISTS
    -> (SELECT d_name FROM department WHERE d_id=1004);
Empty set (0.00 sec)

此處內層循環并沒有查詢到滿足條件的結果,因此返回false,外層查詢不執行

NOT EXISTS剛好與之相反

當然,EXISTS關鍵字可以與其他的查詢條件一起使用

條件表達式與EXISTS關鍵字之間用AND或者OR來連接

復制代碼 代碼如下:

mysql> SELECT * FROM employee
    -> WHERE age>24 AND EXISTS
    -> (SELECT d_name FROM department WHERE d_id=1003);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 張三   |   26 | 男   | 北京市海淀區         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南長沙市           |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

帶ANY關鍵字的子查詢

ANY關鍵字表示滿足其中任一條件

復制代碼 代碼如下:

mysql> SELECT * FROM employee
    -> WHERE d_id!=ANY
    -> (SELECT d_id FROM department);
+------+------+--------+------+------+--------------------+
| num  | d_id | name   | age  | sex  | homeaddr           |
+------+------+--------+------+------+--------------------+
|    1 | 1001 | 張三   |   26 | 男   | 北京市海淀區         |
|    2 | 1001 | 李四   |   24 | 女   | 北京市昌平區         |
|    3 | 1002 | 王五   |   25 | 男   | 湖南長沙市           |
|    4 | 1004 | Aric   |   15 | 男   | England            |
+------+------+--------+------+------+--------------------+
 rows in set (0.00 sec)

帶ALL關鍵字的子查詢

ALL關鍵字表示滿足其中所有條件

復制代碼 代碼如下:

mysql> SELECT * FROM employee
    -> WHERE d_id>=ALL
    -> (SELECT d_id FROM department);
+------+------+------+------+------+----------+
| num  | d_id | name | age  | sex  | homeaddr |
+------+------+------+------+------+----------+
|    4 | 1004 | Aric |   15 | 男   | England  |
+------+------+------+------+------+----------+
 row in set (0.00 sec)

暫時不明白這兩條語句是什么意思,到時候再補上


UNION合并查詢結果

復制代碼 代碼如下:

mysql> SELECT d_id FROM employee
    -> UNION
    -> SELECT d_id FROM department;
+------+
| d_id |
+------+
| 1001 |
| 1002 |
| 1004 |
| 1003 |
+------+
 rows in set (0.00 sec)

合并比較好理解,也就是將多個查詢的結果合并在一起,然后去除其中的重復記錄

如果想保存重復記錄可以使用UNION ALL語句

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康定县| 卫辉市| 儋州市| 沧源| 丹棱县| 博白县| 洛阳市| 六盘水市| 安庆市| 云梦县| 平昌县| 澄城县| 盐源县| 鄂州市| 万全县| 万盛区| 隆回县| 阳东县| 原平市| 海口市| 定州市| 甘肃省| 讷河市| 万安县| 大理市| 鄂伦春自治旗| 建宁县| 双柏县| 仁寿县| 龙海市| 伊金霍洛旗| 环江| 东乡族自治县| 绥棱县| 商水县| 桃园县| 磐石市| 卢氏县| 永靖县| 若羌县| 平和县|