程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL筆記之子查詢應用引見

MySQL筆記之子查詢應用引見

編輯:MySQL綜合教程

MySQL筆記之子查詢應用引見。本站提示廣大學習愛好者:(MySQL筆記之子查詢應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL筆記之子查詢應用引見正文


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

內層查詢語句的查詢成果,可認為外層查詢語句供給查詢前提

由於在特定情形下,一個查詢語句的前提須要另外一個查詢語句來獲得

參考表: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語句

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved