SQL中的子查詢


z子查詢就是將一個查詢(子查詢)的結果作為另一個查詢(主查詢)的數據來源或判斷條件的查詢。常見的子查詢有WHERE子查詢,HAVING子查詢,FROM子查詢,SELECT子查詢,EXISTS子查詢,子查詢要使用小括號();

WHERE子查詢

在WHERE子句中進行使用查詢

SELECT *
FROM EMP
WHERE SAL < (SELECT AVG(SAL) FROM EMP);
  • 查詢薪資比平均薪資低的員工信息

HAVING子查詢

HAVING子句是對分組統計函數進行過濾的子句,也可以在HAVING子句中使用子查詢

SELECT JOB,AVG(SAL)
FROM EMP
GROUP BY JOB
HAVING 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)TEMP
WHERE 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 E
WHERE EXISIT (
	SELECT *
	FROM DEPT D
	WHERE E.DEPTNO = D.DEPTNO);
  • 查詢有部門的員工信息

查詢薪資排名的員工信息(面試)

SELECT *
FROM EMP
WHERE SAL = (SELECT MIN(SAL) 
    		FROM (SELECT ROWNUM,SAL 
          		 FROM (SELECT SAL FROM EMP GROUP BY SAL ORDER BY SAL DESC)
            	 WHERE ROWNUM<=n));
  • 查詢薪資排名第n個員工的信息(包括並列排名)

思路:
1.先按薪資降序分組
2.再取前n名薪資中最低的薪資,即第n名的薪資。
3.最后在原表中找出薪資與最低薪資相同的員工信息。


以上
@Fzxey


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM