4

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.
4

3 回答 3

5

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

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

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

我宁愿继续ANSI类型连接,因为如果您省略了该ON子句,则会生成错误,而如果您省略条件where子句,旧类型的连接将不会产生错误消息,因此它将生成笛卡尔积。

于 2012-09-10T05:52:29.990 回答
2

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

我的猜测是 JOIN 和 INNER JOIN 操作要快一点,因为它们是为特定目的而设计的,而 SELECT 语句可以修改以做更多的事情。

于 2012-09-10T05:53:10.440 回答
0

“join”版本已经有大约 20 年的历史了,并且是首选,因为它清楚地标识了用于连接的谓词,而不是用于过滤结果的谓词。如果与(如果 table_b 中没有匹配的行,您仍然可以获得 table_a 的行)
一起使用,它还允许外连接。left join

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

于 2012-09-10T05:51:53.140 回答