2010-04-11 30 views

回答

7

唯一加入你的類型真的需要的是LEFT OUTER JOIN。每個其他類型的連接都可以根據一個或多個左外連接重寫,並且可能會進行一些篩選。那麼爲什麼我們需要所有其他人?這只是爲了混淆人們嗎?如果只有一種類型的連接,會不會更簡單?

您還可以問:爲什麼要同時使用a <= bb >= a?不要這些做同樣的事情嗎?我們不能擺脫其中之一嗎?這將簡化事情!

有時候將<=換成>=比替換交換參數更容易。同樣,只有交換操作數時,左連接和右連接纔是同樣的事情。但是,再次選擇這兩個選項是實用的,而不是要求用戶按特定順序編寫查詢。

你可以要求另一件事是:在邏輯爲什麼我們ANDORNOTXORNANDNOR等?所有這些都可以根據NAND s來重寫!爲什麼不只是有NAND?那麼它的awkward根據NAND s寫出OR,並且它的意圖不是很明顯 - 如果你寫OR,人們立即知道你的意思。如果你寫了一大堆NAND,你試圖達到的目標並不明顯。

同樣,如果您想要做a FULL OUTER JOIN b您可以進行左連接和右連接,刪除重複的結果,然後合併所有。但這是一個痛苦,所以它有一個速記。

你什麼時候使用每一個?這是一個簡化的規則:

  • 如果您總是希望左表中每行的結果行使用LEFT OUTER JOIN。
  • 如果您始終需要RIGHT表中每行的結果行,請使用RIGHT OUTER JOIN。
  • 如果您始終需要任一表中每行的結果行,請使用FULL OUTER JOIN。
  • 如果只在兩個表中有一行時只需要結果行,請使用INNER JOIN。
  • 如果您想要所有可能的行對,每個表中有一行,請使用CROSS JOIN。
1

inner join - 從兩套基於指定的條件匹配的聯接行。

outer join - 選擇一個集合中的所有集合,以及來自另一個集合的匹配或空(如果不匹配)元素。外連接可以是leftright,以指定哪個集合完整返回。

1

爲了使其他答案更清晰 - 例如,當您加入的列包含空值時,您可以根據所選聯接獲得不同結果。

因此 - 對於每個真實場景都有一個適合它的連接(要麼是沒有數據的行,要麼是空值示例中的連接)。

0

我的回答假設2個表連接上的一個鍵:

  • INNER JOIN - 得到的結果是在連接表(根據聯接規則)
  • FULL OUTER JOIN - 得到的所有結果這兩個表(笛卡爾乘積)
  • LEFT OUTER JOIN - 讓所有來自左表的結果和匹配結果從右側

您可以添加WHERE子句以進一步限制結果。

使用這些爲了只得到你想要的得到。