在 Oracle 中,我使用
SELECT * FROM table1...JOIN...
Run Code Online (Sandbox Code Playgroud)
其中点表示连接类型或连接条件。
这是 ANSI 89 语法吗?如果没有,那么如果我使用 ANSI 89,我将如何执行连接?
您不想使用 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。也可以看看
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |