6-1 關聯查詢

6-2 子查詢

 

6-3 集合查詢

6-4 分組查詢

 
   

先前在群組函數中介紹了 SELECT 中的分組查詢。這裡我們介紹些分組查詢進階的應用。
 

計算每位主管所直接管理的員工有幾位。(這裡所謂的”主管”,並非職稱(JOB)為’MANAGER’的員工)



 

利用自身關聯查詢來查詢資料,再利用主管的員工代碼與主管名字分組,此時各組中的個數即是主管所管的員工數,所以可利用 COUNT(*) 來計算主管所管的員工數。
 

查詢那些部門,其部門的平均薪資超過全部員工的平均薪資。



 

行 5 的子查詢中(SELECT AVG(SAL) FROM EMP),來找出全部員工的平均薪資,當做主查詢的分組篩選條件。
 

查詢各部門有當任主管的平均薪資超過 2500 元的部門資料,並列出各部門代碼、薪資總和(主管們的)、平均薪資(主管們的)與各部門人數。



 

類似上面例子的方法,行 3 至行 5 之子查詢中利用自身關聯來查詢所有部門當任主管的員工代碼,當做主查詢的篩選條件,然後再依主管的部門代碼分組,並利用 HAVING 條件篩選出符合的部門並列出其部門代碼、薪資總和、平均薪資與各部門人數。
 

 

此外也可以行 2 至行 4 之子查詢中利用自身關聯來查詢所有部門當任主管資料,當做主查詢的查詢資料來源,因為一個主管可能管理一個以上的員工,也就是數個員工可能被同一個主管管理,所以在行 2 至行 4 之子查詢中加上 “DISTINCT” 參數以去除重覆的主管。

 



 

 

有時候,單一查詢並不能查詢到結果,因此必須產生新的表格或視觀表格來做為中間的結果。
 

列出部門 10 與 20 中的每位員工的薪資與其部門的平均薪資之差距。

   

先產生各部門的平均薪資的視觀表格(VIEW):

 


 


再將表格 EMP 與視觀表格 DEPT_AVG 利用 DEPTNO 欄位做關聯查詢: