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

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

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;

               

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值