SQL中的子查询

目录

WHERE子查询

HAVING子查询

FROM子查询

SELECT子查询

EXISIT子查询

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

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

WHERE子查询

在WHERE子句中进行使用查询

SELECT*FROMEMPWHERESAL<(SELECTAVG(SAL)FROMEMP);

查询薪资比平均薪资低的员工信息

HAVING子查询

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

SELECTJOB,AVG(SAL)FROMEMPGROUPBYJOBHAVINGAVG(SAL)=(SELECTMAX(AVG(SAL))FROMEMPGROUPBYJOB);

查询平均薪资最高的职位及其平均薪资

FROM子查询

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

SELECTJOB,AVG(SAL)FROM(SELECTJOB,AVG(SAL)ASAVGSALFROMEMPGROUPBYJOB)TEMPWHERETEMP.AVGSAL>2000;

查询平均薪资高于2000的职位以及该职位的平均薪资

SELECT子查询

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

SELECT(SELECTCOUNT(*)FROMEMPWHEREJOB='SALESMAN')/(SELECTCOUNT(*)FROMEMP)FROMDUAL;

职位是SALESMAN的员工占总员工的比例

EXISIT子查询

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

SELECT*FROMEMP EWHEREEXISIT (SELECT*FROMDEPT DWHEREE.DEPTNO=D.DEPTNO);

查询有部门的员工信息

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

SELECT*FROMEMPWHERESAL=(SELECTMIN(SAL)FROM(SELECTROWNUM,SALFROM(SELECTSALFROMEMPGROUPBYSALORDERBYSALDESC)WHEREROWNUM<=n));

查询薪资排名第n个员工的信息(包括并列排名)

思路:

1.先按薪资降序分组

2.再取前n名薪资中最低的薪资,即第n名的薪资。

3.最后在原表中找出薪资与最低薪资相同的员工信息。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容