exist-in和關聯子查詢-非關聯子查詢
對於exist和in,大家的一致看法如下:
1.in是子查詢為驅動表,外面的表為被驅動表,故適用於子查詢結果集小而
外面的表結果集大的情況。
2.exists是外面的表位驅動表,子查詢裡面的表為被驅動表,故適用於外面
的表結果集小而子查詢結果集大的情況。
而為何會出現這種和in的使用上的區別呢,其實問題的關鍵在於關聯
子查詢和非關聯子查詢上。exists一般都是關聯子查詢,in則一般都是非關聯
子查詢。
對於關聯子查詢,必須先執行外層查詢,接著對所有透過過濾條件的記錄,執行
內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把資料傳遞給內層查詢。
非關聯子查詢則必須先完成內層查詢之後,外層查詢才能介入。
exsits:
select whatever from table_a a
where exists(
select null from table_b b
where b.id=a.id
and somecondition
)
and somecondition
可以看到,在exists子查詢裡面,有關鍵的一個連線條件:where b.id=a.id,就是這個條件決定了必須先找出a中符合條件的記錄,然後才能與b連線,最終得出查詢的結果。這就是為什麼說exists適用於外面的表結果集小而子查詢結果集大的情況。因為必須先執行外層查詢,然後才能執行內層查詢。
而in則恰恰相反,不再詳述。[@more@]
1.in是子查詢為驅動表,外面的表為被驅動表,故適用於子查詢結果集小而
外面的表結果集大的情況。
2.exists是外面的表位驅動表,子查詢裡面的表為被驅動表,故適用於外面
的表結果集小而子查詢結果集大的情況。
而為何會出現這種和in的使用上的區別呢,其實問題的關鍵在於關聯
子查詢和非關聯子查詢上。exists一般都是關聯子查詢,in則一般都是非關聯
子查詢。
對於關聯子查詢,必須先執行外層查詢,接著對所有透過過濾條件的記錄,執行
內層查詢。外層查詢和內層查詢相互依賴,因為外層查詢會把資料傳遞給內層查詢。
非關聯子查詢則必須先完成內層查詢之後,外層查詢才能介入。
exsits:
select whatever from table_a a
where exists(
select null from table_b b
where b.id=a.id
and somecondition
)
and somecondition
可以看到,在exists子查詢裡面,有關鍵的一個連線條件:where b.id=a.id,就是這個條件決定了必須先找出a中符合條件的記錄,然後才能與b連線,最終得出查詢的結果。這就是為什麼說exists適用於外面的表結果集小而子查詢結果集大的情況。因為必須先執行外層查詢,然後才能執行內層查詢。
而in則恰恰相反,不再詳述。[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7548/viewspace-1056232/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 區分關聯子查詢和非關聯子查詢
- 相關子查詢&非相關子查詢概念
- 關聯子查詢 Correlated Subqueries
- 關聯查詢子查詢效率簡單比照
- sql語法相關子查詢與非相關子查詢SQL
- 關聯子查詢的用處
- MySQL聯結查詢和子查詢MySql
- 什麼是SQL 語句中相關子查詢與非相關子查詢SQL
- Laravel 通過子查詢建立動態關聯Laravel
- 在關聯子查詢中in與exists的區別
- MyBatis關聯查詢MyBatis
- thinkphp關聯查詢PHP
- MySQL exists關聯子查詢SQL效能及其低下最佳化之等值子查詢轉換MySql
- MySQL 相關子查詢MySql
- MySQL 優化五(關聯查詢子查詢以及 in 的效率問題)(高階篇)MySql優化
- Mongodb 關聯表查詢MongoDB
- MySQL多表關聯查詢MySql
- JPA多表關聯查詢
- 子查詢-表子查詢
- 【SQL】使用分析函式與關聯子查詢的比較SQL函式
- SQL -- 使用聯結還是子查詢?SQL
- SQL查詢的:子查詢和多表查詢SQL
- mysql 三表關聯查詢MySql
- mysql三表關聯查詢MySql
- mysql關聯查詢優化MySql優化
- 關聯查詢時使用樹狀查詢要小心
- Transformation之Non-correlated(無關聯子查詢)=any的transform【五】ORM
- sql-server不相關子查詢SQLServer
- sql-server相關子查詢SQLServer
- 如何做多表關聯查詢
- mysql三張表關聯查詢MySql
- mysql中的多表關聯查詢MySql
- thinkphp中的多表關聯查詢PHP
- SQL三表左關聯查詢SQL
- 求助:DetachedCriteria關聯查詢問題~~
- 兩表關聯查詢:sql、mybatisSQLMyBatis
- 複雜查詢—子查詢
- MySQL之連線查詢和子查詢MySql