Join
在 FROM 與 WHERE 子句中連接表
第一次來電。
我對加入表格時的最佳做法有疑問。例如,以下兩個查詢都返回相同的結果:
SELECT i.id, p.first_name, p.last_name FROM individuals i, profiles p WHERE i.id = p.individual_id; SELECT i.id, p.first_name, p.last_name FROM individuals i INNER JOIN profiles p ON i.id = p.individual_id;
這兩種方法的優缺點是什麼?請讓我知道你在想什麼。我對性能差異感興趣,而且對查詢的可讀性、從一個 RDMS 到另一個的可移植性等感興趣。
謝謝!
兩個查詢完全相同,應該返回完全相同的結果集,並且應該產生完全相同的執行計劃。
但是第二個查詢使用的是
ANSI-92 SQL
語法。第一個是使用舊(非常舊)版本的 SQL 連接。我可以想到一些你應該使用 ANSI-92 SQL 語法的原因。
- 如果有的話,它將子句
Join Conditions
中的過濾器和實際過濾器分開。WHERE
- 使用舊語法,您只能有等價的
INNER
和CROSS
連接。UNION
除了複雜的查詢外,外連接是不可能的。一些 DBMS(+)
在 Oracle*=
和=*
SQL Server 中為外部連接添加了專有語法,但這些語法正在或已經被棄用。顯式LEFT
連接RIGHT
和FULL
外連接已添加到標準中,並且已被幾乎所有 DBMS 採用。- 它使查詢更具可讀性,因此更易於調試。
- 現在大多數開發人員、DBA 和 ORM 都使用 Join 語法。
- 使用 ANSI-92 SQL 語法進行連接時,如果您錯過了連接條件,則會出現編譯時錯誤,因此它會強制您提供有效的連接條件,而在舊版本中它不會拋出任何錯誤,但它只是返回一個
CROSS JOIN
,以我的經驗,這是舊方法最糟糕的缺點之一。- 當使用舊版本的聯接並且您的查詢混合了內部聯接和外部聯接時,結果集可能總是不是您期望的那樣。