SQL查询语句_查找重复的电子邮箱&SQL删除语句_删除重复的电子邮箱(where子句和having子句的区分)

本文探讨了如何使用MySQL的不同查询方法解决实际问题,包括自连查询去重、统计查询筛选重复Email,以及内连接查询避免重复数据。通过实例解析where和having子句的使用区别,帮助读者理解在数据处理中的选择策略。
摘要由CSDN通过智能技术生成

题目1:

在这里插入图片描述
此题有多种解法:
1.自连查询

# Write your MySQL query statement below
select distinct(person1.Email) as Email
from Person person1,Person person2
where person1.Email=person2.Email and person1.ID!=person2.ID

2.统计查询

# Write your MySQL query statement below
select Email 
from Person 
group by Email 
having count(Email)>1

3.内连查询

# Write your MySQL query statement below
select distinct(person1.Email) 
from Person person1 
inner join Person person2 
on person1.Email = person2.Email and person1.Id != person2.Id

附:

1.dinstinct()用于取出唯一值,即去重。

2.当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:

  • 执行where子句查找符合条件的数据。
  • 使用group by 子句对数据进行分组;对group by子句形成的组运行聚集函数计算每一组的值。
  • 最后用having 子句去掉不符合条件的组。

3.where子句和having的区别是:

  • where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数(如grounp by),使用where条件显示特定的行。
  • having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数(如grounp by),使用having条件显示特定的组,也可以使用多个分组标准进行分组。

where不能使用聚合函数、having中可以使用聚合函数
举例:

#筛选出北京西城、东城、海淀及各区学校数量
SELECT region,count(school) 
FROM T02_Bejing_school 
WHERE region IN ('海淀' , '西城' , '东城') GROUP BY region;
#筛选出北京西城、东城、海淀三个区中学校数量超过10所的区及各区学校数量。
SELECT region,count(school) 
FROM T02_Bejing_school 
WHERE region IN ('海淀' , '西城' , '东城') 
GROUP BY region HAVING count(school) > 10;

我们不能用where来筛选超过学校数量超过10的区,因为表中不存在这样一条记录。而HAVING子句可以让我们筛选成组后的各组数据。

题目2:

在这里插入图片描述
在这里插入图片描述

# Write your MySQL query statement below
delete person1
from Person person1,Person person2
where person1.email= person2.email and person1.id>person2.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值