共计 1825 个字符,预计需要花费 5 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关 MySQL 中怎么清除结果集的重复数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
一、关键字 Distinct 和 Distinctrow
关键字 distinct 一般直接跟在查询语句中 SELECT 的后面,替换可选的关键字 all,而关键字 all 是默认的。Distinctrow 是 distinct 的别名,它产生的效果与 distinct 是完成一样的:
双击代码全选
4SELECT [ALL | DISTINCT | DISTINCTROW]select_expr[FROM table_references[WHERE where_condition]
为了说明这些关键字的用法,我们以下表中的数据为例来进行说明。其中,该表含有一些水果名称及其对应的颜色:
以下查询将从上表中检索所有水果的名称,并按字母顺序将其列出:
双击代码全选
2SELECT nameFROM fruits;
由于没有附带颜色信息,所以每种水果品种的是重复的:
现在,让我们使用关键字 distinct 再查询一次,看看结果如何:
双击代码全选
2SELECT DISTINCT nameFROM fruits;
不出所料,由于附带了水果的颜色信息,所以每种水果的名称只出现了一次:
二、重复数据的取舍
有时候,是不能使用关键字 distinct 的,因为删除复制的数据会导致错误的结果。请考虑下列情形:
客户想要生成一张职工表,以便进行某些资料统计。为此,我们可以使用下列命令:
双击代码全选
5SELECT name,
gender,
salaryFROM employeesORDER BY name;
奇怪的是,结果中出现了重复的“Kristen Ruegg”:
客户说,他们不希望出现重复,所以开发人员在 SELECT 语句中加入了关键字 distinct。好了,这会能够满足客户的要求了,但是问题也随之而来了,因为公司确实有两个重名的员工。所以,添加关键字 distinct 删除了一个有效的记录,因此得 到的结果实际上错误的。我们可以通过 emp_id_number 来确认一下,的确有两名员工都叫 Kristen Rueggs:
双击代码全选
6SELECT name,
gender,
salary,
emp_id_numberFROM employeesORDER BY name;
下面是出现问题的数据,它们的 emp_id_numbers 都是唯一的:
上面的情形告诉我们:使用关键字 distinct 的时候,要确保不会无意中删除有效数据!
三、关键字 Distinct 与 Group By 的区别
使用 distinct 与不使用聚合功能情况下对全选所有栏数据进行分组的逻辑效果是一样的。对于这样的查询,group by 命令只是生产了一列分组后的值。在显示某栏并对齐分组的时候,该查询会给出该栏中不同的值。然而,在显示多栏并对它们进行分组的时候,该查询会给出每 栏中的值的不同的组和。例如,以下查询生成的结果与第一个 SELECT distinct 命令的结果完全一样:
双击代码全选
3SELECT nameFROM fruits GROUP BY name;
同样地,以下语句生成的结果,与我们的 SELECT distinct 语句在员工表上生成的结果也完全一样:
双击代码全选
5SELECT name,
gender,
salary FROM employeesGROUP BY name;
关键字 distinct 和 group by 的区别在于,group by 子句会对数据记录进行排序。因此:
双击代码全选
11SELECT name,
gender,
salary FROM employeesGROUP BY name; 或者:SELECT DISTINCT name,
gender,
salary FROM employeesORDER BY name;
四、统计重复的数据
关键字 Distinct 可以用于 COUNT() 函数,来统计一栏中包含多少不同的值。COUNT ( distinct expression)将统计给定表达式在不同的非零值的数量。该表达式可以是要统计其中不同的非零值的数量的栏名。
下面是表 employee 中的所有数据:
对 name 字段应用 Count distinct 函数会得到六个不同的名称:
上述就是丸趣 TV 小编为大家分享的 MySQL 中怎么清除结果集的重复数据了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。