#子查询
#SLELECT语句中嵌套SELECT语句,被嵌套的SELECT语句称为子查询
/**子查询可以出现的地方
SELECT
..(SELECT).
SELECT
..(SELECT).
SELECT
..(SELECT).
*/
#WHERE字句中的子查询
#案例:找出比最低工资高的员工姓名和工资?
SELECT
ename,sal
FROM
EMP
WHERE
SAL>min(sal)
#WHERE字句中不能直接使用分组函数
#实现思路
#第一步:查询最低工资是多少
#第二步:找出大于800的
#第三步:合并
SELECT
ENAME,SAL
FROM
EMP
WHERE
sal > (SELECT min(SAL) FROM EMP);
#FROM子句中的子查询
#注意:FROM后面的子查询可以将子查询的查询结果当做一张临时表。
#案例:找出每个岗位的平均薪资的薪资等级
#第一步:找出每个岗位的平均工资(依照岗位分组求平均值)
SELECT JOB,AVG(SAL) FROM EMP GROUP BY job;
#第二步:把以上表当做一个平均薪资表
#上表和薪资等级表进行表连接
SELECT
t.*,s.GRADE
FROM
(SELECT JOB,AVG(SAL) as avgsal FROM EMP GROUP BY job) t
JOIN
SALGRADE s
ON
t.avgsal BETWEEN s.LOSAL and s.HISAL;
#SELECT后面出现的子查询(了解)
#案例:找出每个员工的部门名称,要求显示员工名,部门名
SELECT
e.ENAME,e.DEPTNO,(SELECT d.DNAME FROM DEPT d WHERE e.DEPTNO = d.DEPTNO) as DNAME
FROM
EMP e;
#注意:对于 SELECT后面的子查询来说,这个子查询只能一次返回1条结果,多余1条,就报错了。