初學SQL語句練習2
-- 子查詢
--單行子查詢
-- 查詢出所有比雇員姓名為“CLARK ”工資高的員工的信息
SELECT * FROM EMP WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME =‘CLARK‘);
-- 查詢工資高於平均工資的雇員名字和工資。
SELECT ENAME,SAL FROM EMP
WHERE SAL >(SELECT ROUND(AVG(SAL)) FROM EMP);
--查詢和 SCOTT 同一部門且比他工資低的雇員名字和工資。
SELECT ENAME,SAL FROM EMP
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = ‘SCOTT‘)
AND SAL <(SELECT SAL FROM EMP WHERE ENAME = ‘SCOTT‘);
-- 查詢職務和 SCOTT 相同,比 SCOTT 雇傭時間早的雇員信息
SELECT * FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = ‘SCOTT‘)
AND HIREDATE <(SELECT HIREDATE FROM EMP WHERE ENAME = ‘SCOTT‘);
-- 查詢工資比 SCOTT 高或者雇傭時間比 SCOTT 早的雇員的編號和名字
SELECT EMPNO,ENAME FROM EMP
WHERE SAL >(SELECT SAL FROM EMP WHERE ENAME = ‘SCOTT‘)
OR HIREDATE <(SELECT HIREDATE FROM EMP WHERE ENAME =‘SCOTT‘);
--多行子查詢
-->all() 表示匹配子查詢結果所有值進行比較
-->=<any() 表示匹配子查詢結果中的任意一個值
--in() 表示匹配子查詢結果中的任意一個值
--當any()前添加=號 那麽和in()相同的意思
-- 查詢工資低於任何一個職務是“ CLERK ”的工資的雇員信息。
--1.獲取工作為CLERK的員工工資
SELECT * FROM EMP WHERE SAL < ALL(SELECT SAL FROM EMP WHERE JOB = ‘CLERK‘);
-- 查詢工資比所有的“ SALESMAN ”都高的雇員的編號、名字和工資。
--1.獲取SALESMAN的工資
--1)雙擊SQL行,F8執行
--2)按home鍵 shift+end 選中單行 F8執行
--1250 1600
SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE JOB =‘SALESMAN‘);
-- 查詢部門 20 中職務同部門 10 的雇員一樣的雇員信息。
--1.獲取10號部門員工的工種
SELECT * FROM EMP WHERE JOB =ANY(SELECT JOB FROM EMP WHERE DEPTNO = 10) AND DEPTNO = 20;
-- 查詢在雇員中有哪些人是領導
--1.領導的雇員編號
SELECT * FROM EMP WHERE EMPNO IN(SELECT DISTINCT MGR FROM EMP WHERE MGR IS NOT NULL);
-- 找出部門編號為 20 的所有員工中收入最高的職員
--1.獲取20號部門的所有員工最高工資
SELECT * FROM EMP WHERE SAL =(SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 20) AND DEPTNO = 20;
-- 查詢每個部門平均薪水的等級
-- 可以將子查詢作為一張表格,實現多表關聯查詢
--SQL語句執行過程:from-->where -->group by --->having --->select --->order by
--SELECT ROUND(AVG(SAL)) AVG_SAL FROM EMP WHERE AVG_SAL=2073; --報錯
--1.獲取每個部門的平均薪水
SELECT T.DEPTNO,S.GRADE
FROM (SELECT DEPTNO,ROUND(AVG(SAL)) AVG_SAL FROM EMP GROUP BY DEPTNO) T,SALGRADE S
WHERE T.AVG_SAL BETWEEN S.LOSAL AND S.HISAL;
-- 查詢部門的詳細信息及部門平均工資和等級
--1.獲取部門平均工資
SELECT D.*,T2.AVG_SAL,T2.GRADE
FROM DEPT D ,
(SELECT T.DEPTNO,S.GRADE,T.AVG_SAL
FROM (SELECT DEPTNO,ROUND(AVG(SAL)) AVG_SAL FROM EMP GROUP BY DEPTNO) T,SALGRADE S
WHERE T.AVG_SAL BETWEEN S.LOSAL AND S.HISAL) T2
WHERE D.DEPTNO = T2.DEPTNO(+);
初學SQL語句練習2