之间有什么区别吗?
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.
答案 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的行)