Mysql三天入门(二) 子查询

子查询

什么是子查询?

子查询就是嵌套的select语句,可以理解为子查询是一张表。

  • 子查询可以出现在哪里?
     select
        ..(select).
     from
        ..(select).
     where
        ..(select).

where语句中使用子查询

  • 案例:找出高于平均薪资的员工信息。
    • 第一步:找出平均薪资
      select avg(sal) from emp;
    • 第二步:取得大于平均薪水的员工
      select * from emp where sal > 2073.214286;
    • 第一步和第二步合并
      select * from emp where sal > (select avg(sal) from emp);

from后面嵌套子查询

  • 案例:找出每个部门平均薪水的等级。
    • 第一步:找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
      select deptno,avg(sal) as avgsal from emp group by deptno;
    • 第二步:将以上的查询结果当做临时表t,让t表和salgrade s表连接,条件是:t.avgsal between s.losal and s.hisal
select 
	t.*,s.grade
from
	(select deptno,avg(sal) as avgsal from emp group by deptno) t
join
	salgrade s
on
	t.avgsal between s.losal and s.hisal;

在select后面嵌套子查询。

  • 案例:找出每个员工所在的部门名称,要求显示员工名和部门名。
    • 第一种做法,将员工表和部门表连接
      select e.ename, d.dname from emp e, dept d where e.deptno=d.deptno;
    • 第二种做法,在select语句中再次嵌套select语句完成部分名称的查询
      select e.ename, (select d.dname from dept d where e.deptno=d.deptno) as dname from emp e;
原文地址:https://www.cnblogs.com/thrseven/p/15115722.html