2023.1.6 关于having和where的区别

在做力扣的数据库题是发现了一个这样的题

这是一个比较简单的SQL查询我的第一反应是写出这样的语句

select Email 
from Person
group by Email
where count(Email)>1

但是很显然这是一个错误的语句,但是我当时并不清楚这个语句究竟问题出现在那里,但是脑海里依稀记着有一个having的东西,所以我去进行了搜索

关于having和where我总结了这样的几点

1.首先对于having来说是一个先连接后筛选的,但是对于where来说,where是先筛选后连接,所以where与having做对比,where是更加高效的,因为where先筛选后可以用一个较为小的数据来进行连接,但是having需要先把表进行连接后,从表中筛选。

2.其次就是最重要的一点,可以看到我们在上述的SQL语句中是使用了group by这个函数的,对于where来说可以直接使用表中的字段作为筛选条件,但却没有办法使用分组后的数据作为筛选条件,但是having必须要与group by进行配合使用,因为having是可以使用函数来进行筛选,所以对于count(email)来说是一个计算数量的函数,所以在这里使用where是无法把它作为条件的,所以使用了having

所以关于该题目正确的SQL语句应该是

select Email 
from Person
group by Email
having count(Email)>1

我是范,一个在努力的人,下次再见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值