首页 > 数据库技术 > 详细

数据库中的子查询

时间:2020-07-13 19:24:23      阅读:58      评论:0      收藏:0      [点我收藏+]

概述

  • 什么是子查询?
    select语句当中嵌套select语句,被嵌套的select语句是子查询。
  • 子查询可以出现在哪里?
    select
    ...(select)
    from
    ...(select)
    where
    ... (select)

where后面嵌套子查询

  • 例子
    找出高于平均薪资的员工信息。
  • 错误写法:
SELECT * FROM emp
where sal>avg(sal);

原因:where后面不能使用分组函数。

  • 分步查询
    先找出平均薪资:SELECT avg(sal) FROM emp;(2073.214286)
    再过滤:
SELECT * FROM emp
where sal>2073.214286;
  • 合并:
SELECT * FROM emp
where sal > (
SELECT * FROM emp
where sal>avg(sal)
);

技术分享图片

from后面嵌套子查询

  • 例子
    找出每个部门平均薪水的薪资等级。
  • 解答:
    1、找出每个部门平均薪水(按照部门编号分组,求sal的平均值)
SELECT deptno, avg(sal) as avgsal 
from emp 
group by deptno;

技术分享图片
2、将以上的查询结果当做临时表t,让t表和salgrade s表连接。

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;

技术分享图片

  • 例子
    找出每个部门的薪水等级的平均值
    1、找出每个员工的薪资等级
SELECT e.ename, e.sal, e.deptno, s.grade
from emp e 
join salgrade s 
on e.sal between s.losal and s.hisal;

技术分享图片
2、看似会用到子查询,但是不会(因为需要的数据都有)。

SELECT e.deptno, avg(s.grade) 
FROM emp e
join salgrade s
on
e.sal between s.losal and s.hisal 
group by e.deptno;

技术分享图片

select后面嵌套子查询

  • 例子
    找出每个员工所在的部门名称,要求显示员工名和部门名。
    (用嵌套的方法,不用连接)
SELECT e.ename, 
(
select d.dname 
from dept d 
where e.deptno = d.deptno
) as dname
from emp e;

技术分享图片

数据库中的子查询

原文:https://www.cnblogs.com/yu011/p/13295015.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!