1. 程式人生 > >oracle hr樣例資料庫經典查詢語句

oracle hr樣例資料庫經典查詢語句

1.查詢工資大於12000的員工姓名和工資

Select initcap(concat(last_name,first_name)) "姓名",salary from employees where salary>12000;

2.查詢員工號為176的員工的姓名和部門號 select initcap(concat(last_name,first_name)) "姓名",department_id from employees where employee_id = 176;

3.選擇工資不在5000到12000的員工的姓名和工資 select initcap(concat(last_name,first_name)) "姓名", salary from employees where salary<5000 or salary>12000;

4.選擇僱用時間在1908-02-01到1908-05-01之間的員工姓名,job_id和僱用時間

寫法一: select initcap(concat(last_name,first_name)) "姓名",job_id,hire_date from employees where hire_date between '01-2月 -08' and '01-5月 -08';

寫法二: select initcap(concat(last_name,first_name)) "姓名",job_id,hire_date from employees where hire_date between to_date('1908-02-01','YYYY-MM-DD') and to_date('1908-05-01','YYYY-MM-DD');

5.選擇在20或50號部門工作的員工姓名和部門號
寫法一: Select initcap(concat(last_name,first_name)) "姓名",department_id from employees where department_id=20 or department_id=50;

寫法二: select initcap(concat(last_name,first_name)) "姓名",department_id from employees where department_id in (20,50);

6.選擇在1908年僱用的員工的姓名和僱用時間
寫法一: select initcap(concat(last_name,first_name))"姓名",hire_date from employees where hire_date like '%08';

寫法二: select initcap(concat(last_name,first_name))"姓名",hire_date from employees where hire_date between to_date('1908-1-1','YYYY-MM-DD') and to_date('1908-12-31','YYYY-MM-DD');(這個可能會因為將字串轉換為日期的時候與系統日期不符和,所以沒有顯示出來查詢到的專案)

7.選擇公司中沒有管理者的員工姓名及job_id
方法一: Select initcap(concat(last_name,first_name)) "姓名",job_id from employees where manager_id is null; 方法二: select initcap(concat(last_name,first_name)) "姓名",job_id from employees where nvl(manager_id,0)=0;

8.選擇公司中有獎金的員工姓名,工資和獎金級別
方法一: Select initcap(concat(last_name,first_name)) "姓名",salary,commission_pct from employees where commission_pct is not null;

方法二: Select initcap(concat(last_name,first_name)) "姓名",salary,commission_pct from employees where nvl2(commission_pct, commission_pct,0)>0;

方法三: select initcap(concat(last_name,first_name)) "姓名", commission_pct from employees where nvl(commission_pct,0)<>0;

9.選擇員工姓名的第三個字母是a的員工姓名
select initcap(concat(last_name,first_name)) "姓名" from employees where initcap(concat(last_name,first_name)) like '__a%';

10.選擇姓名中有字母a和e的員工姓名 select initcap(concat(last_name,first_name)) "姓名" from employees where initcap(concat(last_name,first_name)) like '%a%' and initcap(concat(last_name,first_name)) like '%e%';

11.顯示系統時間
方法一:
Select sysdate from dual;

方法二:
Select current_timestamp from dual;

12.查詢員工號,姓名,工資,以及工資提高百分之20%後的結果(new salary) Select employee_id,initcap(concat(last_name,first_name)) "姓名",salary*1.2 as"new salary" from employees;

13.將員工的姓名按首字母排序,並寫出姓名的長度(length) Select initcap(concat(last_name,first_name)) "姓名",length(initcap(concat(last_name,first_name))) as"名字長度" from employees order by substr(initcap(concat(last_name,first_name)),1,1);

14.查詢各員工的姓名,並顯示出各員工在公司工作的月份數 Select initcap(concat(last_name,first_name)) "姓名",trunc(months_between(sysdate,hire_date),0) "在職時間" from employees;

15.查詢員工的姓名,以及在公司工作的月份數(worked_month),並按月份數降序排列
方法一:
Select initcap(concat(last_name,first_name)) "姓名",trunc(months_between(sysdate,hire_date),0) "在職時間" from employees order by trunc(months_between(sysdate,hire_date),0) desc; 方法二: select initcap(concat(last_name,first_name))"姓名",trunc(months_between(sysdate,hire_date),0)as worked_month from employees order by worked_month desc; 16.做一個查詢,產生下面的結果
<last_name> earns <salary> monthly but wants <salary*3>
Dream Salary
King earns $24000 monthly but wants $72000
語法為: Select last_name||' earns '||to_char(salary,'$99999')||' monthly but wants '||to_char(salary*3,'$99999') as "Dream Salary" from employees;

17.使用decode函式,按照下面的條件:
job         grade
AD_PRES    A
ST_MAN    B
IT_PROG    C
SA_REP     D
ST_CLERK    E
Others    F
產生下面的結果:
Last_name    Job_id    Grade
king    AD_PRES    A
語法:
寫法一: select last_name,job_id,decode(job_id,'AD_PRES','A','ST_MAN','B','IT_PROG','C','SA_REP ','D','ST_CLERK','E','F')Grade from employees; 寫法二: Select last_name,job_id, case job_id when 'AD_PRES' then 'A' when 'ST_MAN' then 'B' when 'IT_PROG' then 'C' when 'SA_REP' then 'D' when 'ST_CLERK' then 'E' else 'F' end "Grage" from employees;

18.查詢公司員工工資的最大值,最小值,平均值,總和 select max(salary) "最大值",min(salary) "最小值",avg(salary) "平均值",sum(salary) "總和" from employees;

19.查詢各job_id的員工工資的最大值,最小值,平均值,總和 select job_id,max(salary) "最大值",min(salary) "最小值",avg(salary) "平均值",sum(salary) "總和" from employees group by job_id;

20.選擇具有各個job_id的員工人數 Select job_id,count(*) from employees group by job_id;

21.查詢員工最高工資和最低工資的差距(DIFFERENCE) Select max(salary)-min(salary) as "DIFFERENCE" from employees;

22.查詢各個管理者手下員工的最低工資,其中最低工資不能低於6000,沒有管理者的員工不計算在內Select manager_id,min(salary) from employees group by manager_id having min(salary)>=6000 and manager_id is not null;

23.查詢所有部門的名字,location_id,員工數量和工資平均值 Select department_name,location_id,count(e.job_id) as "部門總人數",avg(e.salary) as "平均工資" from departments d,employees e where d.department_id=e.department_id group by department_name,location_id;

1.列出至少有一個員工的所有部門 select department_name from departments where department_id in(select department_id from employees); 或者 select department_name from departments where department_id in(select department_id from employees group by department_id having count(department_id) >=1);

2.列出薪金比“Hall”多的所有員工
select * from employees where salary > (select salary from employees where last_name = 'Hall');(需要注意的是查詢語句不區分大小寫,但是裡面的欄位嚴格區分大小寫)

3.列出所有員工的姓名及其直接上級的姓名 select a.first_name|| ' '||a.last_name "姓名",(select a.first_name|| ' '||a.last_name from employees b where b.employee_id=a.manager_id) as "老闆姓名" from employees a;

4.列出受僱日期早於其直接上級的所有員工 select a.first_name|| ' '||a.last_name "姓名" from employees a where a.hire_date<(select hire_date from employees b where b.employee_id=a.manager_id);

5.列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門
select a.department_name,b.employee_id,b.first_name|| ' '||b.last_name "姓名",b.job_id,b.manager_id,b.hire_date,b.salary,b.department_id from departments a left join employees b on a.department_id=b.department_id;

6.列出所有“SH_CLERK”(辦事員)的姓名及其部門名稱 select a.first_name|| ' '||a.last_name "姓名",b.department_name from employees a join departments b on a.department_id=b.department_id and a.job_id='SH_CLERK';

7.列出最低薪金大於1500的各種工作 select distinct job_id as HighSalJob from employees group by job_id having min(salary)>1500;

8.列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號 select first_name|| ' '||last_name "姓名" from employees where department_id=(select department_id from departments where department_name='Sales');

9.列出薪金高於公司平均薪金的所有員工 select first_name|| ' '||last_name "姓名" from employees where salary>(select avg(salary) from employees);

10.列出與“first_name='Jean'”從事相同工作的所有員工 select first_name|| ' '||last_name "姓名" from employees where job_id=(select job_id from employees where first_name='Jean');

11.列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金 select a.first_name|| ' '||a.last_name "姓名",a.salary from employees a where a.salary in (select b.salary from employees b where b.department_id=30) and a.department_id<>30;

12.列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金 select a.first_name|| ' '||a.last_name "姓名",a.salary from employees a where a.salary > (select max(b.salary)from employees b where b.department_id=30);

13.列出在每個部門工作的員工數量、平均工資和平均服務期限 select (select b.department_name from departments b where a.department_id=b.department_id) as "部門名稱" ,count(department_id) as "員工數量",avg(salary) as "部門平均工資" from employees a group by department_id;

14.列出所有員工的姓名、部門名稱和工資 select a.first_name|| ' '||a.last_name "姓名",(select b.department_name from departments b where b.department_id=a.department_id) as "部門名稱",salary from employees a;

15.列出所有部門的詳細資訊和部門人數 select a.department_id,a.department_name,a.location_id,(select count(department_id) from employees b where b.department_id=a.department_id group by b.department_id) as "部門人數" from departments a;

16.列出各種工作的最低工資 select job_id,min(salary) from employees group by job_id;

17.列出job_id="ST_MAN"的最低薪金 select department_id,min(salary) from employees where job_id='ST_MAN' group by department_id;

18.列出所有員工的年工資,按年薪從低到高排序 select first_name|| ' '||last_name "姓名",(salary+nvl(commission_pct,0))*12 as "年薪" from employees order by "年薪" asc; 1.找出EMP表中的姓名(ENAME)第三個字母是a 的員工姓名 SELECT concat(first_name,last_name) "員工姓名" FROM employees WHERE concat(first_name,last_name) like '__a%';

2.找出employees表員工名字中含有a和n的員工姓名 SELECT concat(first_name,last_name) "員工姓名" FROM employees WHERE concat(first_name,last_name) like '%a%' and concat(first_name,last_name) like '%n%'; 或者 SELECT concat(first_name,last_name) "員工姓名" FROM employees WHERE concat(first_name,last_name) like '%a%n%' ;

3.找出所有有佣金的員工,列出姓名、工資、佣金,顯示結果按工資從小到大,佣金從大到小。 SELECT concat(first_name,last_name) "員工姓名",salary + commission_pct AS 工資,commission_pct FROM employees ORDER BY 工資 asc,commission_pct DESC;
(這個應該有錯誤,因為不可能同一個資料使用兩種排序方法)

4.列出部門編號為20的所有職位 SELECT DISTINCT job_id FROM employees WHERE department_id = 20;

5.列出不屬於Sales 的部門 SELECT DISTINCT * FROM departments WHERE department_name <> 'Sales'; 或者 SELECT DISTINCT * FROM departments WHERE department_name != 'Sales'; 或者 SELECT DISTINCT * FROM departments WHERE department_name not in('Sales'); 或者 SELECT DISTINCT * FROM departments WHERE department_name not like 'Sales';

6.顯示工資不在1000 到1500 之間的員工資訊:名字、工資,按工資從大到小排序 SELECT concat(first_name,last_name) "員工姓名",salary + salary*commission_pct AS Wage FROM employees WHERE salary + salary*commission_pct NOT BETWEEN 1000 AND 1500 ORDER BY Wage DESC; 或者 SELECT concat(first_name,last_name) "員工姓名",salary + salary*commission_pct AS Wage FROM employees WHERE salary + salary*commission_pct<1000 or salary + salary*commission_pct>1500 ORDER BY Wage DESC;

7.顯示職位為SA_MAN 和SA_REP,年薪在15000 和20000 之間的員工的資訊:名字、職位、年薪SELECT concat(first_name,last_name) "員工姓名",job_id 職位,(salary + salary*commission_pct) * 12 AS 年薪 FROM employees WHERE (salary + salary*commission_pct) * 12 BETWEEN 150000 AND 400000 AND job_id IN('SA_MAN','SA_REP');

8.說明以下兩條SQL語句的輸出結果:
SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL; 和 SELECT employee_id,commission_pct FROM employees WHERE commission_pct=NULL; 簡要說明有何不同?

9.語句SELECT concat(first_name,last_name) "員工姓名",salary FROM employees WHERE salary > '1500'是否報錯?

1.改變NLS_LANG 的值,讓SELECT TO_CHAR(SALARY,'L99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5 輸出結果的貨幣單位是¥和$。 SELECT TO_CHAR(SALARY,'L99,999.99') FROM EMPLOYEES WHERE ROWNUM < 5; 結果如下:

TO_CHAR(SALARY,'L99,999.99')

24,000.0020,000.0020,000.009,000.00

SELECT TO_CHAR(SALARY,'$99,999.99') FROM HR.EMPLOYEES WHERE ROWNUM < 5; 顯示結果如下所示:
TO_CHAR(SALARY,'$99,999.99')

$24,000.00  
$20,000.00  
$20,000.00  
$9,000.00

(說明:對於'$99,999.99'格式符: L:表示強制顯示當地貨幣符號
$: 表示顯示美元符號
9: 表示一個數字
0: 表示強制0顯示
.: 表示一個小數點
,: 表示一個千位分隔符)

2.列出前五位每個員工的名字,工資、漲薪後的的工資(漲幅為8%),以“元”為單位進行四捨五入。SELECT FIRST_NAME|| ' '||last_name "姓名",SALARY,ROUND(SALARY * 1.08) FROM EMPLOYEES WHERE ROWNUM <=5;

3.找出誰是最高領導,將名字按大寫形式顯示 SELECT UPPER(FIRST_NAME || ' ' || LAST_NAME) AS NAME FROM HR.EMPLOYEES WHERE MANAGER_ID IS NULL;

4.找出David 的直接領導的名字 SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME FROM EMPLOYEES WHERE EMPLOYEE_ID IN(SELECT MANAGER_ID FROM EMPLOYEES WHERE FIRST_NAME = 'David' AND LAST_NAME = 'Austin'); 或者 SELECT UPPER( EMP1.FIRST_NAME ||' ' || EMP1.LAST_NAME) AS NAME FROM EMPLOYEES EMP1,EMPLOYEES EMP2 WHERE EMP1.EMPLOYEE_ID = EMP2.MANAGER_ID AND EMP2.FIRST_NAME = 'David' AND EMP2.LAST_NAME = 'Austin';

5.First_Name 為Alexander,LAST_NAME為Hunold領導誰。(誰向David 報告)。 SELECT UPPER(FIRST_NAME ||' ' || LAST_NAME) AS NAME FROM EMPLOYEES WHERE MANAGER_ID IN(SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Alexander' AND LAST_NAME = 'Hunold'); 或者 SELECT UPPER( EMP1.FIRST_NAME || ' ' || EMP1.LAST_NAME) AS NAME FROM EMPLOYEES EMP1,EMPLOYEES EMP2 WHERE EMP1.MANAGER_ID = EMP2.EMPLOYEE_ID AND EMP2.FIRST_NAME = 'Alexander' AND EMP2.LAST_NAME = 'Hunold';

6.哪些員工的工資高於他直接上司的工資,列出員工的名字和工資,上司的名字和工資。 SELECT E.FIRST_NAME,E.SALARY,M.FIRST_NAME,M.SALARY FROM EMPLOYEES E,EMPLOYEES M WHERE E.MANAGER_ID = M.EMPLOYEE_ID AND E.SALARY > M.SALARY;

要是隻列出員工的名字與工資的話,還可以這樣: SELECT E.FIRST_NAME,E.SALARY FROM EMPLOYEES E WHERE E.SALARY >(SELECT M.SALARY FROM EMPLOYEES M WHERE E.MANAGER_ID = M.EMPLOYEE_ID);

7.哪些員工和Chen(LAST_NAME)同部門 SELECT FIRST_NAME||' '||last_name "員工姓名" FROM EMPLOYEES WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE LAST_NAME = 'Chen') AND LAST_NAME <> 'Chen'; 或者 SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2 WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID AND E2.LAST_NAME = 'Chen' AND E1.LAST_NAME <> 'Chen';

8.哪些員工跟De Haan(LAST_NAME)做一樣職位 SELECT FIRST_NAME||' '||last_name "員工姓名" FROM EMPLOYEES WHERE JOB_ID IN(SELECT JOB_ID FROM EMPLOYEES WHERE LAST_NAME = 'De Haan') AND LAST_NAME <> 'De Haan';

或者 SELECT E1.FIRST_NAME FROM EMPLOYEES E1,EMPLOYEES E2 WHERE E1.JOB_ID = E2.JOB_ID AND E2.LAST_NAME = 'De Haan' AND E1.LAST_NAME <> 'De Haan';

9.哪些員工跟Hall(LAST_NAME)不在同一個部門 SELECT FIRST_NAME || ' ' || LAST_NAME FROM HR.EMPLOYEES WHERE DEPARTMENT_ID NOT IN(SELECT DEPARTMENT_ID FROM HR.EMPLOYEES WHERE LAST_NAME = 'Hall');

或者: SELECT e1.FIRST_NAME|| ' '||e1.last_name "姓名" FROM EMPLOYEES e1,EMPLOYEES e2 WHERE e1.DEPARTMENT_ID = e2.DEPARTMENT_ID(+) and e2.LAST_NAME(+) = 'Hall' and e2.LAST_NAME IS NULL;

10.哪些員工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一樣的職位 SELECT FIRST_NAME || ' ' || LAST_NAME "員工姓名" FROM HR.EMPLOYEES WHERE JOB_ID <> (SELECT DISTINCT JOB_ID FROM EMPLOYEES WHERE FIRST_NAME = 'William' AND LAST_NAME = 'Smith');

11.顯示有提成的員工的資訊:名字、提成、所在部門名稱、所在地區的名稱 SELECT E.FIRST_NAME || ' ' || E.LAST_NAME AS NAME, E.COMMISSION_PCT,D.DEPARTMENT_NAME,L.CITY FROM HR.EMPLOYEES E,HR.DEPARTMENTS D,HR.LOCATIONS L WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND D.LOCATION_ID = L.LOCATION_ID AND E.COMMISSION_PCT IS NOT NULL;

12.顯示Executive部門有哪些職位 SELECT DISTINCT E.JOB_ID FROM HR.EMPLOYEES E,HR.DEPARTMENTS D WHERE D.DEPARTMENT_ID = E.DEPARTMENT_ID AND D.DEPARTMENT_NAME = 'Executive';

13.整個公司中,最高工資和最低工資相差多少 SELECT MAX(SALARY) - MIN(SALARY) FROM HR.EMPLOYEES;

14.提成大於0 的人數 SELECT COUNT(*) AS 提成大於0的人數 FROM HR.EMPLOYEES WHERE COMMISSION_PCT > 0;

或者: SELECT COUNT(COMMISSION_PCT) AS 提成大於0的人數 FROM HR.EMPLOYEES WHERE COMMISSION_PCT > 0;

15.顯示整個公司的最高工資、最低工資、工資總和、平均工資保留到整數位 SELECT MAX(NVL(SALARY,0)) AS 最高工資,MIN(NVL(SALARY,0)) AS 最低工資,SUM(NVL(SALARY,0)) AS 工資總和,ROUND(AVG(NVL(SALARY,0))) AS 平均工資 FROM HR.EMPLOYEES;

16.整個公司有多少個領導 SELECT COUNT(DISTINCT(MANAGER_ID)) FROM EMPLOYEES WHERE MANAGER_ID IS NOT NULL;

17.列出在同一部門入職日期晚但工資高於其他同事的員工: 名字、工資、入職日期。 SELECT DISTINCT E1.FIRST_NAME || ' ' || E1.LAST_NAME AS 姓名,E1.SALARY AS 工資,E1.HIRE_DATE AS 入職日期 FROM HR.EMPLOYEES E1,HR.EMPLOYEES E2 WHERE E1.DEPARTMENT_ID = E2.DEPARTMENT_ID AND E1.HIRE_DATE > E2.HIRE_DATE AND E1.SALARY > E2.SALARY ORDER BY 工資 DESC;

1.各個部門平均、最大、最小工資、人數,按照部門號升序排列 SELECT DEPARTMENT_ID AS 部門號,AVG(SALARY) AS 平均工資,MAX(SALARY) AS 最高工資,MIN(SALARY) AS 最低工資,COUNT(*) AS 人數 FROM EMPLOYEES GROUP BY DEPARTMENT_ID ORDER BY DEPARTMENT_ID ASC;

2.各個部門中工資大於5000的員工人數 SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES WHERE SALARY > 5000 GROUP BY DEPARTMENT_ID;

3.各個部門平均工資和人數,按照部門名字升序排列 SELECT DEPT.DEPARTMENT_NAME,AVG(EMP.SALARY),COUNT(*) FROM EMPLOYEES EMP,DEPARTMENTS DEPT WHERE EMP.DEPARTMENT_ID = DEPT.DEPARTMENT_ID GROUP BY DEPT.DEPARTMENT_NAME ORDER BY DEPT.DEPARTMENT_NAME;

或者: SELECT DPTNAME,AVG(SALARY),COUNT(*) FROM(SELECT(SELECT DEPT.DEPARTMENT_NAME FROM DEPARTMENTS DEPT WHERE DEPT.DEPARTMENT_ID = EMP.DEPARTMENT_ID) DPTNAME, EMP.SALARY FROM EMPLOYEES EMP) GROUP BY DPTNAME ORDER BY DPTNAME;

4.列出每個部門中有同樣工資的員工的統計資訊, 列出他們的部門號,工資,人數。 SELECT EMP1.DEPARTMENT_ID,EMP1.SALARY,COUNT(*) CNT FROM EMPLOYEES EMP1,EMPLOYEES EMP2 WHERE EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND EMP1.SALARY = EMP2.SALARY AND EMP1.EMPLOYEE_ID <> EMP2.EMPLOYEE_ID GROUP BY EMP1.DEPARTMENT_ID,EMP1.SALARY;

5.列出同部門中工資高於1000 的員工數量超過2 人的部門, 顯示部門名字、地區名稱。 SELECT D.DEPARTMENT_NAME,L.CITY,COUNT(*) FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID AND D.LOCATION_ID = L.LOCATION_ID AND E.SALARY > 1000 GROUP BY D.DEPARTMENT_NAME,L.CITY HAVING COUNT(*) > 2;

6.哪些員工的工資,高於整個公司的平均工資, 列出員工的名字和工資(降序)。 SELECT FIRST_NAME || ' ' || LAST_NAME,SALARY FROM EMPLOYEES WHERE SALARY > (SELECT AVG(SALARY) FROM EMPLOYEES) ORDER BY SALARY DESC;

7.哪些員工的工資,介於50號 和80號 部門平均工資之間 SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY FROM EMPLOYEES WHERE SALARY BETWEEN(SELECT AVG(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID = 50) AND (SELECT AVG(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID = 80);

8.所在部門平均工資高於5000 的員工名字 SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID IN(SELECT DEPARTMENT_ID FROM EMPLOYEES GROUP BY DEPARTMENT_ID HAVING AVG(SALARY) > 5000);

9.列出各個部門中工資最高的員工的資訊:名字、部門號、工資 SELECT FIRST_NAME || ' ' || LAST_NAME AS NAME,SALARY,DEPARTMENT_ID FROM EMPLOYEES WHERE (DEPARTMENT_ID,SALARY) IN(SELECT DEPARTMENT_ID,MAX(SALARY) FROM EMPLOYEES GROUP BY DEPARTMENT_ID);

10.最高的部門平均工資是多少 SELECT MAX(AVGSALARY) FROM(SELECT DEPARTMENT_ID,AVG(SALARY) AVGSALARY FROM EMPLOYEES GROUP BY DEPARTMENT_ID);

11.哪些部門的人數比90號部門的人數多 SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID HAVING COUNT(*) > (SELECT COUNT(*) FROM EMPLOYEES WHERE DEPARTMENT_ID = 90);

12.Den(FIRST_NAME)、Raphaely(LAST_NAME)的 領導是誰(非關聯子查詢) SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID =(SELECT MANAGER_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Den' AND LAST_NAME = 'Raphaely');

13.Den(FIRST_NAME)、Raphaely(LAST_NAME)領導誰(非關聯子查詢) SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES WHERE MANAGER_ID IN(SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Den' AND LAST_NAME = 'Raphaely'); 或者: SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES WHERE MANAGER_ID =(SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Den' AND LAST_NAME = 'Raphaely');

14.列出在同一部門共事,入職日期晚但工資高於其他同事的員工: 名字、工資、入職日期(關聯子查詢) SELECT FIRST_NAME || ' ' || LAST_NAME AS 姓名,SALARY AS 工資,HIRE_DATE AS 入職日期 FROM EMPLOYEES EMP1 WHERE EXISTS (SELECT 1 FROM EMPLOYEES EMP2 WHERE EMP2.DEPARTMENT_ID = EMP1.DEPARTMENT_ID AND EMP1.HIRE_DATE > EMP2.HIRE_DATE AND EMP1.SALARY > EMP2.SALARY);

15.哪些員工跟Den(FIRST_NAME)、Raphaely(LAST_NAME) 不在同一個部門(非關聯子查詢) SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES WHERE DEPARTMENT_ID <>(SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Den' AND LAST_NAME = 'Raphaely');

或者: SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES WHERE DEPARTMENT_ID NOT IN(SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE FIRST_NAME = 'Den' AND LAST_NAME = 'Raphaely');

16.哪些員工跟Den(FIRST_NAME)、Raphaely(LAST_NAME)不在同一個部門(關聯子查詢) SELECT FIRST_NAME || ' ' || LAST_NAME FROM EMPLOYEES EMP1 WHERE NOT EXISTS (SELECT 1 FROM EMPLOYEES EMP2 WHERE EMP1.DEPARTMENT_ID = EMP2.DEPARTMENT_ID AND EMP2.FIRST_NAME ='Den' AND EMP2.LAST_NAME ='Raphaely');

17.Finance部門有哪些職位(非關聯子查詢) SELECT DISTINCT JOB_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME = 'Finance');

或者: SELECT DISTINCT JOB_ID FROM EMPLOYEES WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME = 'Finance');

18.Finance部門有哪些職位(關聯子查詢) SELECT DISTINCT JOB_ID FROM EMPLOYEES WHERE EXISTS(SELECT 1 FROM DEPARTMENTS WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID AND DEPARTMENTS.DEPARTMENT_NAME = 'Finance');