select语句中嵌套select语句,被嵌套的select语句就叫子查询,子查询可以出现在:
select..(select)..from..(select)..where..(select)..
一、where字句中的子查询
案例:找出比最低工资高的员工姓名和工资?
注意错误语句:select ename,sal from emp where sal>min(sal);因为where后面不能使用分组函数
正确思路:第一步,查询出最低工资
select min(sal) from emp;
第二步,查询大于最低工资的员工名字和工资:
select ename,sal from emp where sal>800;
第三步,合并:
select ename,sal from emp where (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 on t.avgsal between s.lowsal and s.hisal;
注意,必须给avg(sal)起别名,否则在表连接查询时 t.avg(sal)会被看作是一个函数而报错