子查询是什么
子查询(Subquery)就是出现在其他MySQL语句中的查询,也就是查询中的查询(当然不一定要在查询语句中嵌套)
例如:
#查找数据1表中 列字段 等于数据表2的列字段
SELECT * FROM 数据1 WHERE 列字段= (SELECT 列字段 FROM 数据表2);
其中SELECT * FROM 数据1,称为父查询(Outer Query/Outer Statement)
SELECT 列字段 FROM 数据表2,被称为子查询(SubQuery)
- 子查询必要要加括号
- 子查询可以使用关键字和条件,如: DISTINCT、 GROUP BY、ORDER BY、LIMIT、 函数等。
- 父查询不仅只是查询,也可是是SELECT,INSERT,UPDATE ,SET或DO
- 子查询可以返回标量、一行、一列或子查询。
为什么要用子查询
试想对比 或者插入另一个表的值,还要先查询另一个表,获得值后在插入非常麻烦,不如直接将查询结果进行对比,或者插入省事
怎么使用
mysql> SELECT * FROM 运算符例子;
+----+------+
| id | 数值 |
+----+------+
| 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 | 数值 |
+----+------+
| 1 | 2 |
| 2 | 4 |
| 3 | 6 |
| 4 | 8 |
| 5 | 10 |
| 6 | 12 |
| 7 | 14 |
+----+------+
7 rows in set (0.00 sec)
#查找 运算符例子表中 数值小于 运算符例子2表中 id=5(10)的数据
mysql> SELECT id,数值 FROM 运算符例子 WHERE 数值 < (SELECT 数值 FROM 运算符例子2 WHERE id=5);
+----+------+
| id | 数值 |
+----+------+
| 1 | 1 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
| 5 | 9 |
+----+------+
5 rows in set (0.00 sec)
#10>9=1(true)
mysql> SELECT (SELECT 数值 FROM 运算符例子2 WHERE id=5) > (SELECT 数值 FROM 运算符例子 WHERE id = 1) AS 比较;
+------+
| 比较 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
#10<9=0(false)
mysql> SELECT (SELECT 数值 FROM 运算符例子2 WHERE id=5) < (SELECT 数值 FROM 运算符例子 WHERE id = 1) AS 比较;
+------+
| 比较 |
+------+
| 0 |
+------+
1 row in set (0.00 sec)