目錄
子查詢就是將一個查詢(子查詢)的結(jié)果作為另一個查詢(主查詢)的數(shù)據(jù)來源或判斷條件的查詢。常見的子查詢有WHERE子查詢,HAVING子查詢,F(xiàn)ROM子查詢,SELECT子查詢,EXISTS子查詢,子查詢要使用小括號();
WHERE子查詢
在WHERE子句中進(jìn)行使用查詢
SELECT*FROMEMPWHERESAL<(SELECTAVG(SAL)FROMEMP);
查詢薪資比平均薪資低的員工信息
HAVING子查詢
HAVING子句是對分組統(tǒng)計函數(shù)進(jìn)行過濾的子句,也可以在HAVING子句中使用子查詢
SELECTJOB,AVG(SAL)FROMEMPGROUPBYJOBHAVINGAVG(SAL)=(SELECTMAX(AVG(SAL))FROMEMPGROUPBYJOB);
查詢平均薪資最高的職位及其平均薪資
FROM子查詢
FROM子查詢就是將一個查詢結(jié)構(gòu)(一般多行多列)作為主查詢的數(shù)據(jù)源
SELECTJOB,AVG(SAL)FROM(SELECTJOB,AVG(SAL)ASAVGSALFROMEMPGROUPBYJOB)TEMPWHERETEMP.AVGSAL>2000;
查詢平均薪資高于2000的職位以及該職位的平均薪資
SELECT子查詢
SELECT子查詢在SELECT子句中使用查詢的結(jié)果(一般會和dual空表一起使用)
SELECT(SELECTCOUNT(*)FROMEMPWHEREJOB='SALESMAN')/(SELECTCOUNT(*)FROMEMP)FROMDUAL;
職位是SALESMAN的員工占總員工的比例
EXISIT子查詢
將主查詢的數(shù)據(jù)帶到子查詢中驗證,如果成功則返回true,否則發(fā)水false。主查詢接收true是就會顯示這條數(shù)據(jù),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.最后在原表中找出薪資與最低薪資相同的員工信息。