溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SqlServer系列筆記——子查詢

發(fā)布時間:2020-07-30 10:05:00 來源:網(wǎng)絡(luò) 閱讀:259 作者:codejson 欄目:數(shù)據(jù)庫

子查詢意思:

將一個查詢語句做為一個結(jié)果集供其他SQL語句使用,就像使用普通的表一樣,

被當(dāng)作結(jié)果集的查詢語句被稱為子查詢

所有可以使用表的地方幾乎都可以使用子查詢來代替。

關(guān)鍵子 IN 

exists Not Exists 子查詢返回true 或 false 

SELECT * FROM(SELECT * FROM T2 where FAge<30) 


子查詢和連接查詢的比較

     

 有些問題使用子查詢解決會更簡單,有些問題使用連接查詢可以變得簡單,

因此要根據(jù)實際情況進行選擇。

當(dāng)需要頻繁地計算統(tǒng)計函數(shù)的值并將其作為外部查詢的條件時,

應(yīng)該使用子查詢。

單值做為子查詢:SELECT 1 AS f1,2,(SELECT MIN(FYearPublished) FROM T_Book),(SELECT MAX(FYearPublished)  FROM T_Book) AS f4


只有返回且僅返回一行、一列數(shù)據(jù)的子查詢才能當(dāng)成單值子查詢。

下面的是錯誤的:


SELECT * FROM T_ReaderFavorite WHERE FCategoryId=(SELECT FId FROM T_Category WHERE FName='Story')

如果子查詢是多行單列的子查詢,這樣的子查詢的結(jié)果集其實是一個集合。


SELECT * FROM T_Reader 

WHERE FYearOfJoin IN

(

select FYearPublished FROM T_Book

)


用 in實現(xiàn)select * from Person p where p.PersonID in(select PersonID from Person where LastName like 'A%')

用exists 實現(xiàn)

select * from Person p where  exists (select PersonID from Person  where LastName like 'A%' and Person.PersonID=p.PersonID )

EXISTS與IN的使用效率的問題,通常情況下采用exists要比in效率高,因為IN不走索引,但要看實際情況具體使用:

IN適合于外表大而內(nèi)表小的情況;EXISTS適合于外表小而內(nèi)表大的情況。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI