請任何人都可以給我使用相關的子查詢通過JOIN的區別?他們是不是要解決同樣的問題。有沒有比一個更好的表現。我正在使用SQL Server,我傾向於使用FOR XML PATH('')來選擇子查詢中出現的多個列。任何解釋差異的例子將不勝感激。Correlated Subquery and Joins
0
A
回答
1
「請任何人都可以給我使用關聯子查詢加入JOIN的區別?他們是不是要解決同一個問題?」
不,他們不是。
使用相關的子查詢,您將得到一個表達式,用於調用SEMIJOIN或關係代數的SEMIMINUS。 (請注意,我說的是這裏最典型的使用相關子查詢的。)
SELECT * FROM A1
WHERE attr in (SELECT attr FROM A2);
只給你出現在A1的列。不同於如果你寫的JOIN
SELECT * FROM A1 NATURAL JOIN A2
這也將讓你從不會出現在A1 A2任何其他列,你會得到什麼。
而且
SELECT * FROM A1
WHERE attr NOT IN (...)
還涉及相關子查詢,但是這一次卻是,甚至不能寫成加入semiminus調用。
最後,相關的子查詢也可以出現在SELECT列表中。
SELECT a,b, (SELECT MIN(b) FROM T AS sub WHERE sub.a=main.a AND sub.b>main.b)
FROM T AS main
在這種情況下,許多這種性質的查詢也不能寫成JOIN。
2
像往常一樣,它是馬匹的課程。
但是,有一個鬆散的規則,如果您可以使用JOIN執行此操作,那麼它會更好,因爲您可以使用SQL Server的基於集合的操作將兩個數據流匹配在一起。
然而,相關的子查詢是解決某些問題的唯一方法,但它們會導致類似循環的行爲,每行一個 - 必然會更慢並且性能更差。
相關問題
- 1. 將SUBQUERY UNION SELECT重寫爲JOINS
- 2. Group by in subquery and base query sql server
- 3. sql insert insert with subquery input and additional parameter
- 4. DB2中的GROUP BY AND RIGHT JOINS
- 5. Pearson Correlation Covariance Showing Negative Correlated
- 6. JPA select entity and use subquery to assign value in entity all in one query
- 7. sql:where subquery not null
- 8. Co-Related SubQuery
- 9. mysql complex joins
- 10. 是「WHERE(subquery)IN(subquery)」可能嗎?
- 11. SQL問題,JOINS
- 12. MYSQL JOINs&COUNT
- 13. spark datasource IN subquery
- 14. SQL CASE SUBQUERY COUNT
- 15. NSPredicate SUBQUERY內
- 16. sql select into subquery
- 17. SUBQUERY總結行
- 18. Hibernate subquery detachedCriteria
- 19. sqlalchemy in_ subquery
- 20. Linq Subquery同表
- 21. SQL SUBQUERY對自
- 22. mssql subquery aggregate - sum wrong
- 23. SQL查詢似乎適用於'AND T1.email_address_ IN(subquery)',但爲'AND T1.email_address_ NOT IN(子查詢)'返回0行'
- 24. subquery or passthrough; SQL Server 2008r2
- 25. DISTINCT與LEFT JOINS
- 26. CakePHP JOINS查詢
- 27. yii cdbcriteria:complex joins
- 28. MySQL查詢:JOINS
- 29. Multi joins Acess
- 30. JOINS在Lucene
您是否查看過連接和相關子查詢的執行計劃? – Taryn
我聽說過執行計劃這個詞,但我真的不知道這個詞。請你解釋一下。 – damola
在這種情況下,粗略的谷歌搜索會給你http://msdn.microsoft.com/en-us/library/ms178071(v=sql.105).aspx這是權威領域之一(因爲微軟編寫的SQL服務器,ergo執行計劃)......基本上,它是如何知道查詢在運行查詢時所做的事情。 – jcolebrand