《Mysql實例MySQL筆記之子查詢使用介紹》要點:
本文介紹了Mysql實例MySQL筆記之子查詢使用介紹,希望對您有用。如果有疑問,可以聯系我們。
子查詢是將一個查詢語句嵌套在另一個查詢語句中MYSQL入門
內層查詢語句的查詢結果,可以為外層查詢語句提供查詢條件MYSQL入門
因為在特定情況下,一個查詢語句的條件需要另一個查詢語句來獲取MYSQL入門
參考表:employeeMYSQL入門
MYSQL入門
?MYSQL入門
參考表:departmentMYSQL入門
MYSQL入門
帶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為條件的所有字段信息MYSQL入門
NOT IN的效果與上面剛好相反MYSQL入門
帶比較運算符的子查詢
MYSQL入門
代碼如下:
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歲的員工,看起來有點復雜
此外,運算符還有很多,這里不再贅述MYSQL入門
帶EXISTS關鍵字的子查詢MYSQL入門
EXISTS關鍵字表示存在.使用EXISTS關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個真假值,如果內層查詢語句查詢到滿足條件的記錄,就返回true,否則返回falseMYSQL入門
當返回的值為true時,外層查詢語句將進行查詢,否則不進行查詢
MYSQL入門
代碼如下:
mysql> SELECT * FROM employee
??? -> WHERE EXISTS
??? -> (SELECT d_name FROM department WHERE d_id=1004);
Empty set (0.00 sec)
此處內層循環并沒有查詢到滿足條件的結果,因此返回false,外層查詢不執行
NOT EXISTS剛好與之相反MYSQL入門
當然,EXISTS關鍵字可以與其他的查詢條件一起使用MYSQL入門
條件表達式與EXISTS關鍵字之間用AND或者OR來連接
MYSQL入門
代碼如下:
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關鍵字的子查詢MYSQL入門
ANY關鍵字表示滿足其中任一條件
MYSQL入門
代碼如下:
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關鍵字的子查詢MYSQL入門
ALL關鍵字表示滿足其中所有條件
MYSQL入門
代碼如下:
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入門
代碼如下:
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語句MYSQL入門
《Mysql實例MySQL筆記之子查詢使用介紹》是否對您有啟發,歡迎查看更多與《Mysql實例MySQL筆記之子查詢使用介紹》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/12329.html