sql语句-子查询 -单行多列,ANY,ALL,JOIN等地方的使用

本文详细介绍了SQL中的子查询和JOIN语句的应用,包括ANY和ALL关键字的使用,以及如何在FROM子句中使用子查询来减少数据量。通过实例展示了如何查询满足特定条件的员工信息,如薪资高于任意经理或所有经理的情况。同时,演示了如何通过JOIN结合子查询获取部门的详细统计信息,如部门人数和平均薪资。
摘要由CSDN通过智能技术生成

子查询可以返回一行多列的数据

SELECT * FROM emp WHERE (job, sal) = (SELECT job, sal FROM emp WHERE ename = 'SCOTT');

使用 any :任意一个 , all(全部)
​​​​​​​
ANY 关键字

ANY :等于其中的任意一个就符合条件

SELECT * FROM emp WHERE sal =ANY(SELECT MIN(sal) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno);


ALL 关键词
<>ALL : 不等于所有值就符合条件

SELECT * FROM emp
WHERE sal <>ALL(SELECT MIN(sal) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno);

查询薪资大于任何一个经理薪资的员工信息
查询出了大于所有经理最小薪资的员工

SELECT * FROM emp WHERE sal >ANY(SELECT sal FROM emp WHERE job = 'MANAGER');

查询薪资大于全部经理薪资的员工信息
查询出大于所有经理最高薪资的员工

SELECT * FROM emp WHERE sal >ALL(SELECT sal FROM emp WHERE job = 'MANAGER');

 
join语句中使用子查询 , 在 FROM 子句中的子查询相当于一张临时表 , 在 FROM 子句中使用子查询可以减少笛卡儿积的数据量         
查询出每个部门的编号、名称、位置、部门人数、平均工资

SELECT d.deptno, d.dname, d.loc, temp.cnt, temp.avg_salary
FROM dept d JOIN (SELECT deptno, COUNT(empno) cnt, ROUND(AVG(sal), 2) avg_salary
               FROM emp
               GROUP BY deptno) temp ON d.deptno = temp.deptno;


完全也可以使用 GROUP BY 来实现:

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

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值