Is there any difference between
SELECT *
FROM TABLE_A a
JOIN TABLE_B b
ON a.propertyA = b.propertyA
And the query
SELECT * from TABLE_A a, TABLE_B b where a.propertyA=b.propertyA.
INNER JOIN
是您在第一个语法中使用的ANSI ( SQL-92 ) 语法。它通常被认为更具可读性,尤其是当您连接大量表时。
( SQL-89WHERE syntax
)更面向关系模型。两个表 JOIN'ed 的结果是应用过滤器的表的笛卡尔积,该过滤器仅选择与连接列匹配的那些行。
使用 WHERE 语法更容易看到这一点。
我宁愿继续ANSI
类型连接,因为如果您省略了该ON
子句,则会生成错误,而如果您省略条件where
子句,旧类型的连接将不会产生错误消息,因此它将生成笛卡尔积。
这两个例子是一样的。两者都执行一个 INNER JOIN 操作(即使它只是第二个示例中的 JOIN),它基本上返回包含与 ON 子句相关的匹配结果的所有行。
我的猜测是 JOIN 和 INNER JOIN 操作要快一点,因为它们是为特定目的而设计的,而 SELECT 语句可以修改以做更多的事情。
“join”版本已经有大约 20 年的历史了,并且是首选,因为它清楚地标识了用于连接的谓词,而不是用于过滤结果的谓词。如果与(如果 table_b 中没有匹配的行,您仍然可以获得 table_a 的行)
一起使用,它还允许外连接。left join
“逗号”版本不允许外连接(如果 table_b 中没有匹配的行,您将不会获得 table_a 的行)