> 文档中心 > 【SQL】之子查询

【SQL】之子查询

文章目录

  • 前言
  • WHERE子查询
  • HAVING子查询
  • FROM子查询
  • SELECT子查询
  • EXISIT子查询
  • 查询薪资排名的员工信息(面试)
  • 总结

前言

z子查询就是将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件的查询。常见的子查询有WHERE子查询,HAVING子查询,FROM子查询,SELECT子查询,EXISTS子查询,子查询要使用小括号();

●🧑个人主页:Damon7575
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[ Damon7575 ]原创,CSDN首发,侵权必究。


WHERE子查询

在WHERE子句中进行使用查询

SELECT *FROM EMPWHERE SAL < (SELECT AVG(SAL) FROM EMP);
  • 查询薪资比平均薪资低的员工信息

HAVING子查询

HAVING子句是对分组统计函数进行过滤的子句,也可以在HAVING子句中使用子查询

SELECT JOB,AVG(SAL)FROM EMPGROUP BY JOBHAVING AVG(SAL) = (SELECT MAX(AVG(SAL)) FROM EMP GROUP BY JOB);
  • 查询平均薪资最高的职位及其平均薪资

FROM子查询

FROM子查询就是将一个查询结构(一般多行多列)作为主查询的数据源

SELECT JOB,AVG(SAL)FROM (SELECT JOB,AVG(SAL) AS AVGSAL FROM EMP GROUP BY JOB)TEMPWHERE TEMP.AVGSAL>2000;
  • 查询平均薪资高于2000的职位以及该职位的平均薪资

SELECT子查询

SELECT子查询在SELECT子句中使用查询的结果(一般会和dual空表一起使用)

SELECT (SELECT COUNT(*) FROM EMP WHERE JOB = 'SALESMAN')/(SELECT COUNT(*) FROM EMP)FROM DUAL;
  • 职位是SALESMAN的员工占总员工的比例

EXISIT子查询

将主查询的数据带到子查询中验证,如果成功则返回true,否则发水false。主查询接收true就会显示这条数据,flase就不会显示。

SELECT *FROM EMP EWHERE EXISIT (SELECT *FROM DEPT DWHERE E.DEPTNO = D.DEPTNO);
  • 查询有部门的员工信息

查询薪资排名的员工信息(面试)

SELECT *FROM EMPWHERE SAL = (SELECT MIN(SAL)     FROM (SELECT ROWNUM,SAL     FROM (SELECT SAL FROM EMP GROUP BY SAL ORDER BY SAL DESC)      WHERE ROWNUM<=n));
  • 查询薪资排名第n个员工的信息(包括并列排名)

总结

子查询就是将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件的查询。常见的子查询有WHERE子查询,HAVING子查询,FROM子查询,SELECT子查询,EXISTS子查询,子查询要使用小括号();