2、子查询都可以出现在哪里呢?
select
...(select) .
from
...(select) .
where
...(select) .
3、where子句中的子查询
案例:找出比最低工资高的员工姓名和工资?
select
ename, sal
from
emp
where
sal>min(sal) ;
ERROR 1111 (HY000) : Invalid use of group function
where子句中不能直接使用分组函数。
实现思路: 第一步:查询最低工资是多少
select min(sal) from emp; 第二步:找出>800的
select ename,sal from emp where sal > 800; 第三步:合并
select ename,sal from emp where sal > (select min(sal) from emp) ;
案例:找出每个岗位的平均工资的薪资等级。 实现思路:
第一步:找出每个岗位的平均工资(按照岗位分组求平均值)
select job,avg (sal) from emp group by job ; 第二步:克服心理障碍,把以上的查询结果就当做一张真实存在的表t.
mysql> select * from salgrade; s表
t表和s表进行表连接,条件: t表avg(sal) between s. losal and s.hisal; .
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;
5、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条,就报错了!