【问题标题】:What are the differences between these two SQL queries - SQL Server [duplicate]这两个 SQL 查询有什么区别 - SQL Server [重复]
【发布时间】:2011-12-06 21:43:14
【问题描述】:

可能重复:
Is it better to do an equi join in the from clause or where clause

我有以下两个 SQL 查询。你能解释一下这两者之间的区别吗?

查询:1

SELECT a.*, b.*
FROM Table1 a
INNER JOIN Table2 b
ON a.id = b.id
AND a.col = 'value'

查询:2

SELECT a.*, b.*
FROM Table1 a
INNER JOIN Table2 b
ON a.id = b.id
WHERE a.col = 'value'

谢谢

【问题讨论】:

  • 唯一对INNER JOIN 产生影响的情况是,如果您使用的是GROUP BY ALL
  • @MartinSmith 好骗,我找不到

标签: sql sql-server sql-server-2005 sql-server-2008 tsql


【解决方案1】:

除非在数据库上开启区分大小写功能

【讨论】:

  • 我正在寻找 AND 和 WHERE 条件。我必须在什么时候使用哪一个?
【解决方案2】:

对于INNER JOIN,过滤JOIN 条件与过滤WHERE 子句应该得到相同的结果。

如果这是OUTER JOIN,结果会有所不同,因为第一个在JOIN 条件之前预过滤源表中的结果。

【讨论】:

    【解决方案3】:

    在这种特殊情况下,结果是一样的,但不是一回事。 WHERE 适用于整个选择,而 ON ... AND 仅适用于内部联接(实际上可能是同一件事,但不适用于外部联接)

    【讨论】:

      【解决方案4】:

      是的,一切都差不多。如果您的 ID 字段拼写不正确,区分大小写的数据库将返回错误。

      【讨论】:

        【解决方案5】:

        区别纯粹是风格上的。就个人而言,我喜欢将执行表连接的关键子句放在“JOIN ... ON a=b”部分下,并将与我的特定查询过滤有关的子句放在“WHERE”子句下.但是,只要您谈论的是内部联接,就没有技术上的理由以一种或另一种方式来做。

        【讨论】:

          猜你喜欢
          • 2012-08-05
          • 1970-01-01
          • 2014-02-08
          • 2012-04-19
          • 1970-01-01
          • 2021-02-25
          • 2020-02-02
          • 2020-03-22
          相关资源
          最近更新 更多