简单的SQL加入理解?

时间:2012-04-20 14:45:38

标签: mysql sql database sql-server-2008

  

可能重复:
  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

3 个答案:

答案 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。