子查詢可以簡化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