Oracle SQL:經典查詢練手第五篇

略複雜業務 熟能生巧 信手拈來spa

使用hr 表仍是上篇那些表 再也不復述code

任務:htm

  • 哪些部門的人數比90 號部門的人數多。  
  • Den(FIRST_NAME)、Raphaely(LAST_NAME)的領導是誰(非關聯子查詢)。  
  • Den(FIRST_NAME)、Raphaely(LAST_NAME) 領導誰(非關聯子查詢)。  
  • Den(FIRST_NAME)、Raphaely(LAST_NAME) 的領導是誰(關聯子查詢)。  
  • Den(FIRST_NAME)、Raphaely(LAST_NAME) 領導誰(關聯子查詢)。  
  • 列出在同一部門共事,入職日期晚但工資高於其餘同事的員工:名字、工資、入職日期(關聯子查詢)。  
  • 哪些員工跟Den(FIRST_NAME)、Raphaely(LAST_NAME)不在同一個部門(非關聯子查詢)。  
  • 哪些員工跟Den(FIRST_NAME)、Raphaely(LAST_NAME)不在同一個部門(關聯子查詢)。  
  • Finance部門有哪些職位(非關聯子查詢)。  
  • Finance部門有哪些職位(關聯子查詢)

個人解答:blog

1 --1.哪些部門的人數比90 號部門的人數多
2 -- 先算90號部門人數
3 SELECT COUNT(1) FROM EMPLOYEES e WHERE e.DEPARTMENT_ID=90; 4 -- 再算每一個部門的人數
5 SELECT COUNT(1),ee.DEPARTMENT_ID FROM EMPLOYEES ee GROUP BY ee.DEPARTMENT_ID; 6 --大於
7 SELECT COUNT(1),ee.DEPARTMENT_ID FROM EMPLOYEES ee GROUP BY ee.DEPARTMENT_ID HAVING COUNT(1)>(SELECT COUNT(1) FROM EMPLOYEES e WHERE e.DEPARTMENT_ID=90) ORDER BY ee.DEPARTMENT_ID;

 

1 --2.Den(FIRST_NAME)、Raphaely(LAST_NAME)的領導是誰(非關聯子查詢)。
2 -- 查詢出Den(FIRST_NAME)、Raphaely(LAST_NAME)的領導
3 SELECT e.MANAGER_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='Den' AND e.LAST_NAME='Raphaely'; 4 -- 關聯employee_id和manager_id
5 --
6 SELECT * FROM EMPLOYEES ee WHERE ee.EMPLOYEE_ID=(SELECT e.MANAGER_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='Den' AND e.LAST_NAME='Raphaely');

 

1 --3.Den(FIRST_NAME)、Raphaely(LAST_NAME) 領導誰(非關聯子查詢)
2 -- 查出這我的的employee_id
3 SELECT e.EMPLOYEE_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='Den' AND e.LAST_NAME='Raphaely'; 4 -- 領導是這個employee_id
5 SELECT ee.FIRST_NAME||' '||ee.LAST_NAME FROM EMPLOYEES ee WHERE ee.MANAGER_ID=(SELECT e.EMPLOYEE_ID FROM EMPLOYEES e WHERE e.FIRST_NAME='Den' AND e.LAST_NAME='Raphaely');

 

--4.Den(FIRST_NAME)、Raphaely(LAST_NAME) 的領導是誰(關聯子查詢) -- 不知道關聯子查詢 還須要查閱資料
SELECT e.FIRST_NAME||' '||e.LAST_NAME FROM EMPLOYEES e WHERE EXISTS (SELECT 1 FROM EMPLOYEES ee WHERE ee.FIRST_NAME='Den' AND ee.LAST_NAME='Raphaely' AND ee.MANAGER_ID=e.EMPLOYEE_ID);

 

--5.Den(FIRST_NAME)、Raphaely(LAST_NAME) 領導誰(關聯子查詢)
SELECT e.FIRST_NAME||' '||e.LAST_NAME FROM EMPLOYEES e WHERE EXISTS (SELECT 1 FROM EMPLOYEES ee WHERE ee.FIRST_NAME='Den' AND ee.LAST_NAME='Raphaely' AND ee.EMPLOYEE_ID=e.MANAGER_ID);

 

 

--6.列出在同一部門共事,入職日期晚但工資高於其餘同事的員工:名字、工資、入職日期(關聯子查詢)。
SELECT e.FIRST_NAME||' '||e.LAST_NAME 姓名,e.SALARY 工資,e.HIRE_DATE 入職日期 FROM EMPLOYEES e WHERE EXISTS( SELECT 1 FROM EMPLOYEES ee WHERE e.HIRE_DATE>ee.HIRE_DATE AND e.SALARY>ee.SALARY AND e.DEPARTMENT_ID=ee.DEPARTMENT_ID ); -- 沒有思路 不明白
姓名                                                     工資 入職日期    
---------------------------------------------- ---------- ---------
Girard Geoni                          2800 03-2月 -08
Kevin Mourgos                      5800 16-11月-07
Steven King                          24000 17-6月 -03
Bruce Ernst                            6000 21-5月 -07
Alexander Hunold                9000 03-1月 -06
Nancy Greenberg                12008 17-8月 -02
Jose Manuel Urman              7800 07-3月 -06
Shelli Baida                            2900 24-12月-05
Adam Fripp                           8200 10-4月 -05
Matthew Weiss                     8000 18-7月 -04
Jennifer Dilly                         3600 13-8月 -05
Julia Dellinger                       3400 24-6月 -06
Laura Bissot                           3300 20-8月 -05
Shanta Vollman                     6500 10-10月-05
Vance Jones                           2800 17-3月 -07
Anthony Cabrio                    3000 07-2月 -07
Randall Perkins                     2500 19-12月-07
Martha Sullivan                     2500 21-6月 -07
Douglas Grant                       2600 13-1月 -08
Donald OConnell                  2600 21-6月 -07
Kevin Feeney                         3000 23-5月 -06
Alana Walsh                          3100 24-4月 -06
Samuel McCain                     3200 01-7月 -06
Timothy Gates                       2900 11-7月 -06
Jean Fleaur                            3100 23-2月 -06
Winston Taylor                      3200 24-1月 -06
Michael Rogers                     2900 26-8月 -06
Britney Everett                      3900 03-3月 -05
Kelly Chung                           3800 14-6月 -05
Alexis Bull                              4100 20-2月 -05
Randall Matos                       2600 15-3月 -06
John Seo                                2700 12-2月 -06
Stephen Stiles                       3200 26-10月-05
Mozhe Atkinson                    2800 30-10月-05
Irene Mikkilineni                   2700 28-9月 -06
Julia Nayer                             3200 16-7月 -05
Hazel Philtanker                    2200 06-2月 -08
Ki Gee                                     2400 12-12月-07
Steven Markle                       2200 08-3月 -08
Sarah Bell                               4000 04-2月 -04
Nandita Sarchand                 4200 27-1月 -04
Lisa Ozer                               11500 11-3月 -05
Clara Vishney                       10500 11-11月-05
Eleni Zlotkey                         10500 29-1月 -08
Gerald Cambrault                11000 15-10月-07
Alberto Errazuriz                  12000 10-3月 -05
Tayler Fox                              9600 24-1月 -06
Harrison Bloom                    10000 23-3月 -06
Danielle Greene                    9500 19-3月 -07
Jack Livingston                      8400 23-4月 -06
Mattea Marvins                     7200 24-1月 -08
Ellen Abel                             11000 11-5月 -04
Karen Partners                      13500 05-1月 -05
John Russell                          14000 01-10月-04
Peter Tucker                         10000 30-1月 -05
David Bernstein                     9500 24-3月 -05
Jonathon Taylor                    8600 24-3月 -06
Alyssa Hutton                        8800 19-3月 -05
Peter Hall                               9000 20-8月 -05
Christopher Olsen                 8000 30-3月 -06
Elizabeth Bates                      7300 24-3月 -07
William Smith                        7400 23-2月 -07
Nanette Cambrault              7500 09-12月-06
Sundar Ande                         6400 24-3月 -08
David Lee                               6800 23-2月 -08

 選定了 65 行

 

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

...ip

 

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

...it

 

 

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

 

--10.Finance部門有哪些職位(關聯子查詢)。 -- 注意部門id相等條件 以前沒有加 結果就不對
SELECT DISTINCT(e.JOB_ID) FROM EMPLOYEES e WHERE EXISTS (SELECT 1 FROM DEPARTMENTS d WHERE d.DEPARTMENT_NAME='Finance' AND e.DEPARTMENT_ID=d.DEPARTMENT_ID);

原做者:http://database.51cto.com/art/201106/271577.htm#topxio

相關文章
相關標籤/搜索