子查詢是什么
子查詢(Subquery)就是出現(xiàn)在其他MySQL語句中的查詢,也就是查詢中的查詢(當(dāng)然不一定要在查詢語句中嵌套)
例如:
#查找數(shù)據(jù)1表中 列字段 等于數(shù)據(jù)表2的列字段
SELECT * FROM 數(shù)據(jù)1 WHERE 列字段= (SELECT 列字段 FROM 數(shù)據(jù)表2);
其中SELECT * FROM 數(shù)據(jù)1,稱為父查詢(Outer Query/Outer Statement)
SELECT 列字段 FROM 數(shù)據(jù)表2,被稱為子查詢(SubQuery)
- 子查詢必要要加括號
- 子查詢可以使用關(guān)鍵字和條件,如: DISTINCT葫哗、 GROUP BY宪拥、ORDER BY、LIMIT、 函數(shù)等。
- 父查詢不僅只是查詢,也可是是SELECT,INSERT,UPDATE ,SET或DO
- 子查詢可以返回標量澈蟆、一行、一列或子查詢。
為什么要用子查詢
試想對比 或者插入另一個表的值,還要先查詢另一個表,獲得值后在插入非常麻煩,不如直接將查詢結(jié)果進行對比,或者插入省事
怎么使用
mysql> SELECT * FROM 運算符例子;
+----+------+
| id | 數(shù)值 |
+----+------+
| 1 | 1 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
| 5 | 9 |
| 6 | 11 |
| 7 | 13 |
+----+------+
7 rows in set (0.01 sec)
mysql> SELECT * FROM 運算符例子2;
+----+------+
| id | 數(shù)值 |
+----+------+
| 1 | 2 |
| 2 | 4 |
| 3 | 6 |
| 4 | 8 |
| 5 | 10 |
| 6 | 12 |
| 7 | 14 |
+----+------+
7 rows in set (0.00 sec)
#查找 運算符例子表中 數(shù)值小于 運算符例子2表中 id=5(10)的數(shù)據(jù)
mysql> SELECT id,數(shù)值 FROM 運算符例子 WHERE 數(shù)值 < (SELECT 數(shù)值 FROM 運算符例子2 WHERE id=5);
+----+------+
| id | 數(shù)值 |
+----+------+
| 1 | 1 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
| 5 | 9 |
+----+------+
5 rows in set (0.00 sec)
#10>9=1(true)
mysql> SELECT (SELECT 數(shù)值 FROM 運算符例子2 WHERE id=5) > (SELECT 數(shù)值 FROM 運算符例子 WHERE id = 1) AS 比較;
+------+
| 比較 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
#10<9=0(false)
mysql> SELECT (SELECT 數(shù)值 FROM 運算符例子2 WHERE id=5) < (SELECT 數(shù)值 FROM 運算符例子 WHERE id = 1) AS 比較;
+------+
| 比較 |
+------+
| 0 |
+------+
1 row in set (0.00 sec)