Join

如何在 ANSI SQL 89 語法中進行 JOIN?

  • June 30, 2021

在 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。

也可以看看

引用自:https://dba.stackexchange.com/questions/212200