子查询:指的是一个sql语句中有多个select(关键字)
子查询一般出现的位置:
(1)、WHERE 后作为条件存在
(2)、FROM 后作为表存在(多行多列)
1、WHERE 后条件存在
(1)、单行单列
SELECT * FROM 表1 别名1 WHERE 列1 [=,>,<.<=,>=,!=] (SELECT 列 FROM 表2 别名2 WHERE 条件);
例如:查询工资大于平均工资的员工
SELECT * FROM emp WHERE sal > (SELECT AVG(sal)FROM emp);
(2)、多行多列
SELECT * FROM 表1 别名1 WHERE 列1 [IN、ALL、ANY] (SELECT 列 FROM 表2 别名2 WHERE 条件);
例如:查询大于所有30部门员工的工资的员工
SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE depto=30);
(3)、单行多列
SELECT * FROM 表1 别名1 WHERE (列1、列2....)IN (SELECT 列1,列2.... FROM 表2 列名2 WHERE 条件);
例如:查询工作,部门与张三的工作相同的员工
SELECT * FROM emp WHERE (job,dept) IN (SELECT job,dept FROM emp WHERE ename='张三');
(4)、多行多列
SELECT * FROM 表1 别名1 (SELECT ......) 别名2 WHERE 条件;