子查詢分爲兩種:
非相關子查詢(獨立子查詢)
相關子查詢
①獨立子查詢可以單獨執行,所以先執行後,得到的
整個查詢中子查詢只執行一次,執行完後再執行外層查詢;
②相關子查詢是指子查詢(內層查詢)中引用了外層查詢所引用表的字段,
因此外層查詢處理每一條記錄時都必須執行一次子查詢,
因爲子查詢中引用的字段的值發生了變化。
③單行子查詢
(1) 單行子查詢的特點是什麼?
僅返回一行
使用單行比較符
(2) 主查詢對子查詢結果的單行比較運算符有哪些?
= > >= < <= <>(不等於)
④.在子查詢中使用組函數與HAVING子句
⑤. 什麼是子查詢錯誤?
使用子查詢的一個常見錯誤是單行子查詢返回了多行
⑥.多行子查詢中IN運算符
⑦. 什麼是多行子查詢?
返回多於一行
使用多行比較符
⑧.主查詢對子查詢的多行比較運算符有哪些?
In:等於列表中的任何成員
Any 比較子查詢返回的,每個值
All 比較子查詢返回的全部值
⑨ SQL查詢:子查詢和聯表查詢有什麼區別,
一般來說子查詢和關聯子表的性能,相對來說 關聯表要好一些。
爲什麼呢?
主要在於優化器更加傾向於去優化 關聯查詢,且關聯查詢相對來說更易理解,語句也相對簡單,所以優化效果比較好,能生成較優的執行計劃。
但是,這個也不確定,性能是否好,還是要看優化器生成的執行計劃,如果子查詢生成的執行計劃更好,那麼就會更快。
注意點
1、如果只需要返回 一個表的數據,建議用exists 或者in。
2、如果要返回2個或多個表的數據,那麼就用關聯。
總結:
相關子查詢的執行依賴於外部查詢,一般是在where子句中引用外部的表。執行過程如下:
(1)從外層查詢中取出一個元組,將元組相關列的值傳給內層查詢。
(2)執行內層查詢,得到子查詢操作的值。
(3)外查詢根據子查詢返回的結果或結果集得到滿足條件的行。
(4)然後外層查詢取出下一個元組重複做步驟1-3,直到外層的元組全部處理完畢。
【轉載註明出處,希望尊重原創 】