【问题标题】:mysql SELECT "FROM t1, t2" -or- "FROM t1 JOIN t2 ON"mysql SELECT "FROM t1, t2" -or- "FROM t1 JOIN t2 ON"
【发布时间】:2012-04-18 18:44:23
【问题描述】:

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

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 归纳中遗漏了一些行。 ;)

【问题讨论】:

标签: mysql select join


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        使用连接会产生你想要的结果。

        【讨论】:

          猜你喜欢
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-09
          • 1970-01-01
          • 2018-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多