2013-07-12 59 views
5

當聯接表可以傳統上使用加入像爲什麼選擇從多個表中沒有加入

SELECT * FROM t1, t2 WHERE t1.id = t2.t1_id; 

的SQL89方法,但是由於SQL92標準,我們現在可以加入使用JOIN語法

SELECT * FROM t1 JOIN t2 on t1.id=t2.t1_id; 

有沒有什麼理由爲什麼有人會從多個表中加入SELECT? 現在,我知道人們使用UNION連接數據,但這不是我正在談論的。

爲什麼我們在FROM條款中嚴格爲了向後兼容性而使用逗號添加表格?還是有沒有任何現實的情況下使用舊的語法是不可能的,只做聯接?

+1

爲什麼我們會使用乘法,而我們可以使用和數循環?無論如何,+1 –

+0

可能的重複[爲什麼不是SQL ANSI-92標準更好地採用ANSI-89?](http://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92-standard -better-adopt-by-ansi-89) – LittleBobbyTables

+0

'有什麼理由說有人會從多個表中選擇不加入?'也許他們想要一個笛卡爾積? – LittleBobbyTables

回答

5

如果你需要一個完整的笛卡爾產品出於某種原因,它可能是有用的。例如,如果您有汽車模型表和汽車顏色表,並且想列舉所有選項,則不需要連接。這就是說,我會認爲這是一個邊緣情況。

+0

我認爲這可以通過'FULL OUTER JOIN'完成 –

+0

我認爲你是對的,我只是在想'FROM table1,table2'語法的任何可能用法。我認爲外部或交叉連接也會更清晰易讀 – munch1324

+0

對於實際的遠程示例 –

3

我會承認,肌肉記憶踢,有時我用思路之前使用89的方式。但我更喜歡92方法,因爲它保持WHERE子句更清晰。 WHERE子句中的唯一條件是與您的業務案例相關的條件,而僅用於定義關係的條件在JOIN子句中整齊排列。

相關問題