如何在 ANSI SQL 89 语法中执行 JOIN?

moo*_*239 3 join sql-standard

在 Oracle 中,我使用

SELECT * FROM table1...JOIN...
Run Code Online (Sandbox Code Playgroud)

其中点表示连接类型或连接条件。

这是 ANSI 89 语法吗?如果没有,那么如果我使用 ANSI 89,我将如何执行连接?

Eva*_*oll 6

您不想使用 SQL-89 语法。SQL-89 只是一个隐式CROSS JOIN笛卡尔积)。

SELECT *            -- NEVER
FROM foo, bar;      -- NEVER EVER DO THIS
Run Code Online (Sandbox Code Playgroud)

和更现代的一样

SELECT *
FROM foo
CROSS JOIN bar;
Run Code Online (Sandbox Code Playgroud)

添加WHERE clause使得它相当于一个INNER JOIN ... ON

SELECT *                         -- DO NOT
FROM foo,bar                     -- DO THIS
WHERE foo.foo_id = bar.foo_id;   -- EVER
Run Code Online (Sandbox Code Playgroud)

您想使用 SQL-92 语法。

SELECT *
FROM foo
INNER JOIN bar
  ON foo.foo_id = bar.foo_id;   
Run Code Online (Sandbox Code Playgroud)

甚至更好(如果连接列相同并且是 equijoin =

SELECT *
FROM foo
INNER JOIN bar
  USING (foo_id);
Run Code Online (Sandbox Code Playgroud)
  • 注意有些人不使用INNER. 没关系。它仍然是 SQL-92。

也可以看看