编写一个 SQL 查询,查找 Student 表中所有重复的电话号码。
图片说明
图片说明

解法一:最容易想到的就是使用自连接方法,但当数据量变大时,这个方法就不如其他方法。

SELECT DISTINCT A.Phone
FROM Student A JOIN Student B ON A.Phone=B.Phone
AND A.Id!=B.Id

解法二:看到“找所有重复”的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给电话号码列计数,再用HAVING条件选出计数大于1的电话号码,就是重复的电话号码。

SELECT Phone 
FROM Student 
GROUP BY Phone HAVING COUNT(Phone)>1

解法三:

SELECT Phone 
FROM (SELECT COUNT(1) AS P,Phone 
FROM Student GROUP BY Phone)a WHERE A.P>1