HAVING vs WHERE?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (53)

这两个查询之间有什么区别?

SELECT f.name, 
       u.name, 
       u.id 
FROM   families f 
       JOIN units u 
         ON f.unit_id = u.id 
HAVING u.id IN( 43, 413, 22 )

以及:

SELECT f.name, 
       u.name, 
       u.id 
FROM   families f 
       JOIN units u 
         ON f.unit_id = u.id 
WHERE  u.id IN( 43, 413, 22 )

这两个查询的结果完全相同。那有什么区别呢?

提问于
用户回答回答于

在这些查询中,什么都没有。但如果你用GROUP BY你会看到不同的。如果你使用GROUP BYHAVING将应用于组,而WHERE将应用于SELECT在对数据进行分组之前。

用户回答回答于

WHERE用于选择正在处理的原始表中的数据。

HAVING用于筛选查询生成的结果集中的数据。这意味着它可以引用聚合值和别名。SELECT条款。

例如,可以写:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10

如果用WHERE因为diff is an alias, not one of the original table columns. You could write instead:

SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10

但是,它可能需要执行两次所有的减法:一次用于选择,另一次用于生成结果集。

用户回答回答于

SQL中WHERE子句和WHERE子句之间的区别是WHERE子句不能与聚合一起使用,但WHERE子句可以。有一种想法是,WHERE子句是WHERE子句的附加过滤器。

哪个更好:点击

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    27 粉丝7 提问5 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答
  • 富有想象力的人

    2 粉丝0 提问1 回答

扫码关注云+社区

领取腾讯云代金券