子查询的定义:select语句中嵌套select语句,被嵌套的select语句为子查询。
子查询可以出现的位置:
select ...
(select...)
from
...(select)..
where
...(select)...
==即可以出现在select后面,from后面,where后面!==
==where出现子查询==
问题案例:找出比最低工资高的员工姓名和工资?
第一步:查询最低工资是多少?
第二步:找出大于最低工资的?
第三步:整合前面的两点,得出下面的SQL语句:
select ename,sal from emp where sal > (select min(sal) from emp);
==from中的子查询==
注意:from后面的子查询,可以将子查询的查询结果当做一张临时表(==技巧!!==)
问题案例:找出每个岗位的平均工资的薪资等级?
第一步:找出每个岗位的平均工资(按照岗位分组求平均值)
select job,avg(sal) from emp group by job;
第二步:把上面的查询结果看作是一张表T。然后把T表和salgrade表连接查询。
select T.*,s.grade from T join salgrade s on T.avg(sal) between s.losal and s.hisal;
第三步,将第二步中的T换成第一步中的SQL语句得如下的结果:
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,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;
注意:对于select后面的子查询,这个子查询只能返回一个结果,如果多余一条结果,那么就会报错!!
标签:...,sal,查询,emp,where,select From: https://blog.51cto.com/u_15433911/7543667