这些查询之间有什么不同?我应该选择哪一个?为什么?
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`使用逗号和使用左连接有相同的效果吗?
太丢人了。这是我多年来第一次问自己这个问题。我曾经使用过第一个版本,但现在我感觉在我的第一个SQL归纳中遗漏了一些行。;)
发布于 2012-04-19 02:48:30
“逗号”语法等同于内部连接语法。无论您如何请求查询,查询优化器都应该为您运行相同的查询。一般建议使用JOIN语言进行连接,并使用WHERE语言进行过滤,因为这会使您的意图更清晰
发布于 2012-04-19 02:47:17
查询是相同的,第一个只是第二个的简写语法。LEFT JOIN是完全不同的东西。
INNER JOIN仅显示这两个表共有的记录。LEFT JOIN从左表中获取所有记录,并将其与右表中的记录进行匹配。如果右表中没有匹配的记录,则会选择NULL来代替它们。
发布于 2012-04-19 02:53:42
内部联接是在第二个表中跳过空(null)结果的左联接。
当一切都使用where子句完成时,查询优化器有更多的可能性。一些rdbms不支持像natural join和其他join这样的命令,所以使用"where“是可以真正依赖的。
https://stackoverflow.com/questions/10215882
复制相似问题