MySQL筆記之子查詢應用引見。本站提示廣大學習愛好者:(MySQL筆記之子查詢應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL筆記之子查詢應用引見正文
子查詢是將一個查詢語句嵌套在另外一個查詢語句中
內層查詢語句的查詢成果,可認為外層查詢語句供給查詢前提
由於在特定情形下,一個查詢語句的前提須要另外一個查詢語句來獲得
參考表:employee
參考表:department
帶IN症結字的子查詢接著查詢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語句