Join
如何在 ANSI SQL 89 語法中進行 JOIN?
在 Oracle 中,我使用
SELECT * FROM table1...JOIN...
其中的點代表連接的類型或要連接的條件。
這是 ANSI 89 語法嗎?如果不是,那麼如果我使用的是 ANSI 89,我將如何執行連接?
您不想使用 SQL-89 語法。SQL-89 只是一個隱式
CROSS JOIN
(笛卡爾積)。SELECT * -- NEVER FROM foo, bar; -- NEVER EVER DO THIS
與更現代的相同
SELECT * FROM foo CROSS JOIN bar;
添加
WHERE clause
使其等同於INNER JOIN ... ON
SELECT * -- DO NOT FROM foo,bar -- DO THIS WHERE foo.foo_id = bar.foo_id; -- EVER
您想使用 SQL-92 語法。
SELECT * FROM foo INNER JOIN bar ON foo.foo_id = bar.foo_id;
甚至更好(如果 join 列相同並且是 equijoin
=
)SELECT * FROM foo INNER JOIN bar USING (foo_id);
- 注意有些人不使用
INNER
. 沒關係。它仍然是 SQL-92。也可以看看