您好,登錄后才能下訂單哦!
子查詢意思:
將一個查詢語句做為一個結(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)表大的情況。
免責(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)容。