mysql 重复数据 distinct_MySQL DISTINCT语句去除重复记录数据

mysql 重复数据 distinct_MySQL DISTINCT语句去除重复记录数据MySQLDISTINCT子句概述当从表中查询数据时,可能会得到重复的行。为了消除这些重复的行,我们可在SELECT语句中使用DISTINCT子句。DISTINCT子句的语法如下:SELECTDISTINCTcolumnsFROMtable_nameWHEREwhere_conditions;MySQLDISTINCT示例让我们来看看如何使用DISTINCT子句从employee表中查询…

MySQL DISTINCT子句概述

当从表中查询数据时,可能会得到重复的行。为了消除这些重复的行,我们可在SELECT语句中使用DISTINCT子句。

DISTINCT子句的语法如下:

SELECT DISTINCT

columns

FROM

table_name

WHERE

where_conditions;

MySQL DISTINCT示例

让我们来看看如何使用DISTINCT子句从 employee 表中查询员工唯一姓名(有同名只显示一个)的简单例子。

首先,我们使用SELECT语句从 employee 表查询员工的姓名,如下所示:

SELECT

employee_name,job_title,office_id

FROM

employee

ORDER BY employee_name;

执行结果如下所示 –

160zq109455r.png

上面的结果,有些员工的姓名相同,如这里有两个员工叫刘德华,但是他们所在部门和职位都不一样。

要去除重复的姓名,只需要在SELECT语句中添加DISTINCT子句,如下:

SELECT DISTINCT

employee_name

FROM

studymysql.employee

ORDER BY employee_name;

执行结果如下所示 –

160zq113445g.png

我们使用 DISTINCT 子句之后,重复的姓名(如:刘德华)在结果集中已经消除了,这里的结果集中只有一个”刘德华”了。

MySQL DISTINCT和NULL值

如果一个列函有NULL值,在该列上使用DISTINCT子句,MySQL的DISTINCT子句将并消除所有其它的NULL值只保留一个NULL值。

例如,在 customer 表中,我们有很多行的 province  列的值是NULL。当我们使用DISTINCT子句来查询客户的状态,就会看到一个唯一的NULL值,如下查询:

SELECT DISTINCT

province

FROM

studymysql.customer;

执行结果如下所示 –

160zq11529500.png

MySQL DISTINCT子句与多列

在DISTINCT子句和可以使用多个列。在这种情况下,MySQL使用所有列的组合来确定结果集中的行的唯一性。

例如,要获得 customer 表中 city 和 province 唯一性组合,可以使用下面的查询:

SELECT DISTINCT

province,city

FROM

studymysql.customer

WHERE

province IS NOT NULL

ORDER BY province,city;

执行结果如下所示 –

160zq11a2392.png

如果不使用DISTINCT子句,会得到 province 和 city 的重复组合如下:

SELECT

province,city

FROM

studymysql.customer

WHERE

province IS NOT NULL

ORDER BY province,city;

执行结果如下所示,有好些记录行是重复的 –

160zq11k2d0.png

DISTINCT子句 vs. GROUP BY子句

如果在SELECT语句中使用GROUP BY子句,但不使用聚合函数,那么GROUP BY子句的查询行为类似于DISTINCT子句。

下面的语句是使用GROUP BY子句从 customer 表中查询客户的唯一省份(province)。

SELECT

province

FROM

studymysql.customer

GROUP BY province;

执行结果中已经过滤重复的行,如下所示 –

160zq11z4642.png

也可以通过使用DISTINCT子句实现类似的效果:

SELECT DISTINCT

province

FROM

studymysql.customer;

执行结果中已经过滤重复的行,如下所示 –

160zq1203r18.png

一般来说,DISTINCT子句是GROUP BY子句的一个特例。 GROUP BY子句与DISTINCT子句之间的区别是,在GROUP BY子句对结果集排序,而DISTINCT子句没有。

如果添加 ORDER BY子句到查询语句中并且使用DISTINCT子句,那么可以对结果集进行排序,这与使用GROUP BY子句在语句中返回的唯一值是一样的。

SELECT DISTINCT

province

FROM

studymysql.customer

ORDER BY province;

执行结果中已经过滤重复的行,如下所示 –

160zq12120529.png

MySQL DISTINCT和聚合函数

DISTINCT子句可以与聚合函数一起使用,如:SUM,AVG 和 COUNT,在MySQL应用聚合函数到结果集之前去除重复行。

例如,查询计算省份在 “广东” 的所有城市数量,可以使用以下查询:

SELECT

COUNT(DISTINCT city)

FROM

studymysql.customer

WHERE

province=’广东’;

执行结果(广东地区的客户他们分别在:广州,深圳和珠海这三个城市)如下所示 –

160zq1215k23.png

MySQL DISTINCT 与 LIMIT子句

如果使用DISTINCT子句与LIMIT子句一起查询,当MySQL查询出LIMIT子句中指定的唯一的行数后将立即停止搜索。

下面将查询 customer 表中选择 ciyt 字段为非空(NOT NULL)的前5个唯一值。

SELECT DISTINCT

city

FROM

studymysql.customer

WHERE

city IS NOT NULL

LIMIT 5;

执行结果如下所示 –

160zq12241506.png

在本教程中,我们已经学习了使用MySQL DISTINCT子句的各种方式,如:消除重复行和计算非NULL值的行数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37098.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注