1

这个查询有什么不同?我应该更喜欢哪一个,为什么?

SELECT
t1.*,
t2.x
FROM
t1,
t2
WHERE
t2.`id` = t1.`id`

或者

SELECT
t1.*,
t2.x
FROM
t1
INNER JOIN                                                  # LEFT JOIN ?
t2
ON t2.`id` = t1.`id`

使用逗号是否与使用 LEFT JOINS 具有相同的效果?

这很尴尬。这是我多年来第一次问自己这个问题。我曾经使用过第一个版本,但现在我觉得我在第一次 SQL 归纳中遗漏了一些行。;)

4

4 回答 4

0

查询是相同的,第一个只是第二个的简写语法。LEFT JOIN是完全不同的东西。

INNER JOIN只显示两个表共有的记录。LEFT JOIN从左表中取出所有记录并将其与右表的记录匹配。如果右表中没有匹配的记录,NULL将在它们的位置被选中。

于 2012-04-18T18:47:16.803 回答
0

“逗号”语法等同于 INNER JOIN 语法。无论您如何请求,查询优化器都应该为您运行相同的查询。一般建议使用 JOIN 语言进行联接,并使用 WHERE 语言进行过滤,因为它使您的意图更加清晰

于 2012-04-18T18:48:30.140 回答
0

内连接是在第二个表中的空(null)结果上跳过的左连接。

当一切都使用 where 子句完成时,查询优化器有更多的可能性。一些 rdbms 不支持自然连接和其他连接等命令,因此使用“where”是一个真正可以依赖的东西。

于 2012-04-18T18:53:42.357 回答
0

第一个查询称为笛卡尔查询,通常在大型数据库中提供不需要的结果。

相反,使用连接将产生您想要的结果。

于 2012-04-19T05:38:13.310 回答