SQL Server 子查詢的運用

 

對於問題案例:已經有DEPARTMENT,EMPLOYEE兩張表,並EMPLOYEE表中的E_DID是外鍵且引用於DEPARTMENT表中,現有個問題:你如何查詢出部門人數在10人以上的部門,只需要查詢對應的ID,和部門名稱即可?

 

問題分析:我們分析此類問題以一種從裏向外處理問題的思路,逐層剔除冗餘數據,便可以得到我們的結果!

step1:首先需要對員工表進行分類彙總,以便統計出人數:

         sql codeSELECT e.E_DID,COUNT(e.E_DID) AS total  FROM [EMPLOYEE] as e
                   GROUP BY e.E_DID                     //請注意Group by 子名存在的必要性

step2: 聰明你也許已經發現上面將返回的並不是我們所需要的部門ID的集合,且還沒有過濾掉我們不需要的數據,請注意:逐層剔除,各層只完成它有限的能力,注意控制各層的能力。下面要做的就是剔除冗餘數據(上面黑色標記的列),並獲得我們的部門ID的集合

          sql code:    SELECT e1.E_DID FROM(
                          
 SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
                           GROUP BY e.E_DID
 

                      ) AS e1
                          WHERE e1.total>=10

step3:終於可以到收工的時候了,一舉將我們需要的數據拿下來吧!想必你是迫不急待了吧!

       sql code: SELECT d.* FROM DEPARTMENT AS d

                               SELECT e1.E_DID FROM(
                          
           
SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
                                       GROUP BY e.E_DID 

                                ) AS e1
                                WHERE e1.total>=10

                     );

 

總結:在分析的有的問題時,我們應該要善於從問題的本質出發,先確定需要獲得什麼,如何獲得,獲得的是不是我們要的,如果不是如何剔除多餘的數據,以一種逐層剔除的思想,層層向裏看問題,層層向外解問題,問題自然迎刃而解!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章