MySQL—— 子查询

Posted 大彤小忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL—— 子查询相关的知识,希望对你有一定的参考价值。

9. 子查询

9.1 什么是子查询

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

9.2 子查询都可以出现在哪里

select
	..(select).
from
	..(select).
where
	..(select).

9.3 where子句中的子查询

  在 where 语句中使用子查询,也就是在 where 语句中加入 select 语句。

  • 找出比最低工资高的员工姓名和工资:
    select ename,sal from emp where sal > min(sal);


    上述语句报错的原因: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);

9.4 from子句中的子查询

  在 from 语句中使用子查询,可以将该子查询的查询结果看做一张表。

  • 找出每个岗位的平均工资的薪资等级
    第一步:找出每个岗位的平均工资(按照岗位分组求平均值)。
        select job,avg(sal) from emp group by job;


    第二步:克服心理障碍,把以上的查询结果就当做一张真实存在的表 t。
        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;

9.5 在 select 语句中使用子查询

  • 找出每个员工的部门名称,要求显示员工名,部门名
select 
	e.ename,(select d.dname from dept d where e.deptno = d.deptno) as dname 
from 
	emp e;


  注意:对于select后面的子查询来说,这个子查询只能一次返回1条结果,多于1条,就报错了。如下所示:

select 
	e.ename,e.deptno,(select dname from dept) as dname
from
	emp e;

以上是关于MySQL—— 子查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL子查询(六)

sql mysql查询/ db片段

MySQL 中的 While 循环使用连接和子查询选择数据

MySQL在SELECT子句中关联子查询

MySQL数据库代码中,两个exists语句同时出现同一查询语句中时,怎么理解,,越详细越好。,

Mysql创建SQL子查询ALIAS