嵌套查询又叫子查询或内查询,用于为主查询返回其所需数据,或者对检索数据进行进一步的限制
- 子查询必须阔在圆括号中
- 子查询的 SELECT子句只能有一个列,除非主查询中有多个列,用于与子查询中的列相比较
- 子查询不能使用 ORDER BY,但主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用
- 返回多行数据的子查询只能同多值操作符一起使用,如 IN 操作符
- 子查询不能直接用在集合函数中
- BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中
运算符法
SELECT 列名 FROM 表名 WHERE 列名 运算符 -- 外层查询,也叫父查询(SELECT 列名 FROM 表名 WHERE 条件 -- 内层查询,也叫子查询);
1. 找表(父查询和子查询的表)、外键2. 先写已知条件,将外键查询出来,即先写子查询3. 再根据子查询的结果写外查询,即再写外查询SELECT * FROM Student WHERE Id =(SELECT Id FROM Sore WHERE Name = '数学');
父查询的条件即是子查询的结果
范围法
SELECT 列名 FROM 表名 WHERE 列名 IN -- 外层查询,也叫父查询(SELECT 列名 FROM 表名 WHERE 条件 -- 内层查询,也叫子查询)
子查询结果是多个时用 IN,否则就用运算符
SELECT 列名 FROM 表名 WHERE 列名 运算符ANY(SELECT 列名 FROM 表名 WHERE 条件)
SELECT 列名 FROM 表名 WHERE 列名 运算符ALL(SELECT 列名 FROM 表名 WHERE 条件)
其他操作
INSERT子查询
INSERT INTO 表名[(列名1, 列名2)]SELECT [*|列名1,列名2] FROM 表名1, 表名2[WHERE VALUE OPERATOR];
UPDATE子查询
UPDTAE 表名SET 列名=值[WHERE VALUE OPERATOR](SELECT 列名 FROM 表名)[WHERE]
DELETE FROM 子查询
DELETE FROM 表名[WHERE VALUE OPERATOR](SELECT 列名 FROM 表名)[WHERE]
