8

可能重复:
显式与隐式 SQL 连接
使用连接和从多表中选择有区别吗?
SQL 连接:SQL ANSI 标准的未来(where vs join)?

JOIN 和在 FROM 子句中声明多个表有什么区别?

如:

SELECT *
FROM  table1 AS t1,
      table2 AS t2
WHERE t1.id = t2.id

相比:

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t2.id = t1.id
4

3 回答 3

7

第二个版本,具有显式JOIN和连接条件的是标准化的 SQL。

带有WHERE子句的隐式连接语法是不推荐使用的语法(或者,更确切地说,被认为是不好的) - 部分原因是很容易忘记WHERE子句并导致笛卡尔积。

于 2012-04-20T14:52:37.690 回答
2

为什么使用新语法?

正如其他人所说,新语法已成为首选约定。在较大的查询中,新语法更易于阅读、调试并确保添加了连接条件(意味着没有意外CROSS JOINS的 .

旧语法是否已弃用(用于内部连接)?

不是根据 ANSI——两者都是有效的,即使第一个是不受欢迎的。虽然,在旧语法中执行外连接已被弃用——主要是因为它可能是模棱两可的。

“使用新语法”观点的共识程度如何?

于 2012-04-20T15:04:54.920 回答
1

两者都将输出相同的内容,只是编写查询的不同变体。

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t2.id = t1.id

是首选连接方法,因为您明确说明您正在使用哪种连接类型,即 LEFT、OUTER、INNER。

于 2012-04-20T14:55:41.703 回答