第六章 子查询

本文介绍了SQL查询中嵌套子查询的概念,包括在WHERE、HAVING、SELECT和FROM子句中的用法。例如,WHERE子句用于单行单列比较,如寻找特定条件的最小值;多行单列查询常与IN操作结合;而在FROM子句中,子查询可以被视为临时表进行多行多列分析。此外,文章提供了不同场景下的示例,帮助理解如何在实际查询中应用这些概念。
摘要由CSDN通过智能技术生成

概念

在一个查询中嵌套多个查询,即查询的嵌套

一般规律

返回结果应用位置
单行单列(一个数据)HAVING、WHERE
多行单列(一列)WHERE
多行多列(一个表)FROM

在WHERE子句中的应用

单行单列

例子

SELECT * FROM emp WHERE hiredate=(SELECT MIN(hiredate) FROM emp);
SELECT * FROM emp 
WHERE job=(SELECT job FROM emp WHERE ename='SCOTT') 
AND sal=(SELECT sal FROM emp WHERE ename='SCOTT')
AND ename!='SCOTT';

多行单列

提供了一些查询范围,通常与IN这种操作结合使用

例子

SELECT * FROM emp WHERE sal NOT IN(SELECT sal FROM emp WHERE job='SALESMAN');

多行多列

在HAVING子句中的应用

单行单列

SELECT deptno,AVG(sal)
FROM emp
GROUP BY deptno
HAVING AVG(sal)>(SELECT AVG(sal) FROM emp);

在SELECT子句中的应用

出现频率较低,使用需求较低

例子

显示所有雇员的姓名、职位、部门名称与部门位置

SELECT e.ename,e.job,
(SELECT dname FROM dept WHERE deptno=e.deptno),
(SELECT loc FROM dept WHERE deptno=e.deptno)
FROM emp e;

在FROM子句中的应用

通常返回多行多列,可把返回结果看成单独一张表
查询出每个部门的编号、名称、位置、部门人数、平均工资
方法1

SELECT d.deptno,dname,loc,COUNT(empno),AVG(sal)
FROM dept d LEFT JOIN emp e ON d.deptno=e.deptno
GROUP BY d.deptno;

FROM子查询

SELECT d.deptno,dname,loc,temp.rs,temp.asal
FROM dept d LEFT JOIN(
    SELECT deptno,COUNT(empno) rs,AVG(sal) asal
    FROM emp
    GROUP BY deptno
)temp ON d.deptno=temp.deptno;

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值