可能重复:
Explicit vs implicit SQL joins
Is there a difference using join andselect from multi-tables?
SQL Joins: Future of the SQL ANSI Standard (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
答案 0 :(得分:8)
第二个版本,带有显式JOIN
和连接条件,是标准化的SQL。
带有WHERE
子句的隐式连接语法是不推荐使用的语法(或者更确切地说,被认为是错误的) - 部分原因是很容易忘记WHERE
子句并导致笛卡尔积。
答案 1 :(得分:3)
为什么要使用新语法?
正如其他人所说,新语法已成为首选惯例。在较大的查询中,新语法更易于阅读,调试,并确保添加连接条件(意味着没有意外CROSS JOINS
。
旧的语法是否已弃用(对于内部联接)?
不符合ANSI - 两者都有效,即使第一个不受欢迎。虽然,旧语法中执行外连接已被弃用 - 主要是因为它可能不明确。
如何达成共识"使用新语法"查看?
答案 2 :(得分:2)
两者都会输出相同的内容,只是编写查询的不同变体。
SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t2.id = t1.id
是首选的连接方法,因为您明确说明了您正在使用哪种类型的连接,即LEFT,OUTER,INNER。