子查询
开始学习子查询,越来越复杂了,比较吃力了,通过后面的练习加强理解。
1、什么是子查询?
Select语句嵌套select语句
2、子查询可以出现在哪儿?
Select..(select)
From…(select)
Where..(select)
案例1:找出薪水比公司平均薪水高的员工,要求显示员工名和薪水
Select ename,sal from emp where sal>avg(sal);
以上语句执行报错,分组函数不能直接使用在where后面
Select ename,sal from emp where sal>(select avg(sal) from emp);//正确的查询语句
案例2:找出每个部门的平均薪水,并且要求显示平均薪水的薪水等级。
Select a.deptno,a.avgsal,b.grade from (select deptno,avg(sal) avgsal from emp GROUP BY deptno) a join salgrade b ON a.avgsal BETWEEN b.losal AND b.hisal;
或者
Select a.*,b.grade from (select deptno,avg(sal) avgsal from emp GROUP BY deptno) a join salgrade b ON a.avgsal BETWEEN b.losal AND b.hisal;
Tips: from 的select 当查询结果当做临时表
案例3:查询员工所在部门名称
Select e.ename,(select d.dname from dept d where e.deptno=d.deptno)as dname from emp e;//在select后面使用子查询(了解)
案例4:找出每个部门中工资最高的员工
SELECT ename,deptno,sal FROM emp WHERE sal IN (SELECT MAX(sal) FROM emp GROUP BY deptno)ORDER BY sal DESC;