2011-04-26 38 views

回答

2

我要說的連接是更好,因爲:

  1. 它們更易於閱讀。
  2. 你必須對你是否希望做更多的控制內,左/右向外聯接或完整外部聯接
  3. 加入語句不能這麼容易被濫用,以創建查詢可憎
  4. 與加入它是容易爲查詢優化器創建一個快速查詢(如果內部選擇很簡單,它可能會工作得一樣,但更復雜的東西連接會更好地工作)
  5. 嵌入式select的只能模擬left/right outer join

有時你可以使用連接,在這種情況下(只有這樣)你必須依傍內選擇不去做的東西。

-1

大多數數據庫將在下面同時優化查詢到相同的計劃,所以無論你做:

select A.a1, B.b1 from A left outer join B on A.id = B.a_id 

select A.a1, (select B.b1 from B where B.a_id = A.id) as b1 from A 

它結束了是相同的。但是,在大多數情況下,對於非平凡查詢,只要可以,最好堅持使用連接,特別是因爲某些類型的連接(例如內連接)不可能使用子選擇來實現。

+0

-1這不解釋內部連接等。 – Johan 2011-04-26 23:56:05

+0

我不知道我理解你的評論,我應該如何解決答案,使其正確? – 2011-04-27 00:00:37

+0

你只做過一種類型的連接,但是OP一般都在談論連接。因此,內部連接的示例代碼會很好,因爲*(純粹爲自己說話)*這是連接(i)最經常使用的。如果你所能做的只是留下外部連接,這使得非常扼殺代碼'選擇一個,從x內部連接混合,並選擇這樣:-) – Johan 2011-04-27 00:04:13

1

它取決於你的數據庫:表的大小,特別是內存參數,有時甚至是如何索引表。

在比當前版本的MySQL更少的情況下,具有子選擇的查詢的實際可能性比查詢返回結果相同的結果慢得多。 (在MySQL 4.1中,我看到差異大於一個數量級。)因此,我更喜歡使用聯接來構建查詢。

也就是說,有一些類型的查詢非常難以使用連接來構建,並且子選擇是真正實現它的唯一方法。

-1

假設數據庫引擎完全沒有優化,我會說這取決於你需要你的數據的一致性。如果您在繁忙的數據庫上執行多條SELECT聲明,您所查看的數據可能會迅速變化,那麼您可能會遇到數據不匹配或查詢之間不匹配的問題。

假設您的數據不包含相互依賴關係,那麼多個查詢將正常工作。但是,如果您的數據需要一致性,請使用單個查詢。

這個觀點歸結爲保持您的數據事務安全。考慮一下您必須提取所有應收賬款的情況,這些應收賬款保存在與貨幣交易金額不同的表格中。如果有人要在兩次查詢之間添加另一筆交易,則應收帳款總額不會與交易金額的總額相符。

+0

OP正在討論從a vs a join中選擇a1,(從b選擇b1,其中b.id = a.id)。請注意這個問題:'嵌入選擇' – Johan 2011-04-26 23:58:33

+0

謝謝你指出。我一定錯過了。 – nesv 2011-04-27 00:01:21

相關問題