这些连接之间的差异

时间:2012-09-10 05:49:19

标签: sql join

之间有什么区别吗?
SELECT *
FROM TABLE_A a
JOIN TABLE_B b
  ON a.propertyA = b.propertyA        

和查询

SELECT * from TABLE_A a, TABLE_B b where a.propertyA=b.propertyA.

3 个答案:

答案 0 :(得分:5)

INNER JOIN是ANSI( SQL-92 )语法,您可以在第一个语法中使用它。它通常被认为更具可读性,尤其是当您加入大量表格时。

WHERE syntax SQL-89 )更加面向关系模型。两个表JOIN'ed的结果是应用了过滤器的表的笛卡尔积,它只选择那些具有匹配连接列的行。

使用WHERE语法更容易看到这一点。

我宁愿继续进行ANSI类型连接,因为如果你有一些省略ON子句的话,如果省略{{1}上的条件,则会生成错误而旧的连接类型}子句不会产生错误信息,因此它会生成笛卡尔积。

答案 1 :(得分:2)

两个例子是相同的。两者都执行INNER JOIN操作(即使它只是第二个例子中的JOIN),它基本上返回包含与ON子句相关的匹配结果的所有行。

我的猜测是JOIN和INNER JOIN操作只是更快一些,因为它们是为特定目的而设计的,而SELECT语句可以被修改以进行更多操作。

答案 2 :(得分:0)

“加入”版本大约需要20年左右,因为它清楚地标识了用于连接的谓词,而不是用于过滤结果的谓词。 如果与left join一起使用,它还允许外连接(如果table_b中没有匹配的行,你仍然可以得到table_a的行)。

“逗号”版本不允许外连接(如果table_b中没有匹配的行,则不会获得table_a的行)