WITH子句與子查詢


    子查詢可以簡化sql語句的編寫,但是,在數據庫的優化方面,除了sql語句之外,還要盡量降低使用子查詢的次數,比如:子查詢取得系統中所有年齡或工資與‘Sun’相同的人員信息

            select * from T_Person

            where  FAge=(select  FAge from  T_Person  where  FName='Sun') OR FSalary=(select FSalary from T_Person where FName='Sun')

    上面的語句可以實現此功能,但是,子查詢被調用了兩次,比較消耗系統資源的操作,降低了系統的性能,一個子查詢修改其他查詢也得修改,造成修改不同步。

    上述問題的原因及解決方案:

          1.子查詢只能在定義的時候使用,多次使用就必須多次定義。

          2.sql提供了with子句-----給子查詢定義一個別名,這樣可以通過別名來引用子查詢,實現了一次定義多次使用。

     使用WITH子句改造上面的Sql語句:

      WITH person_Sun  AS

     {

      select * from T_Person where FName='Sun'

     }

      select  * from T_Person

     where FAge=person_Sun .FAge

     OR FSalary=person_Sun .FSalary

尤上可知:WITH子句的格式為:

    WITH  別名  AS(子查詢)

定義好別名就可以在sql中通過別名來引用子查詢

 

還可以在WITH語句中為子查詢中的列定義別名,如下代碼:

WITH person_Sun(F1,F2,F3) AS

 {

   SELECT FAge,FName,FSalsry from  T_Person where FName=‘Sun’

 }

SELECT * from T_Person

where FAg=person_Sun.F1

OR FSalsry=person_Sun.F3

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM