【译】MySQL基础教程-05-使用MySQL DISTINCT消除重复

简介:在本教程中,您将学习如何在SELECT语句中使用MySQL DISTINCT子句来消除结果集中的重复行。

MySQL DISTINCT子句简介

从表中查询数据时,可能会出现重复的行。要删除这些重复行,请使用SELECT语句中DISTINCT 子句。

使用该DISTINCT 子句的语法如下:

MySQL DISTINCT示例

让我们看一个使用该DISTINCT 子句从employees表中选择员工唯一姓氏的简单示例。

首先,我们employees使用以下SELECT语句从表中查询员工的姓氏:

试试看

 

MySQL的重复的,最后的名字

有些员工姓氏相同   BondurFirrelli等等。

要删除重复的姓氏,请将该DISTINCT 子句添加到SELECT 语句中,如下所示:

试试看

MySQL DISTINCT姓氏
当我们使用该DISTINCT 子句时,结果集中将删除重复的姓氏。

MySQL DISTINCT和NULL值

如果列具有NULL值并且您使用该DISTINCT 列的子句,则MySQL会保留一个NULL值并消除另一个值,因为该DISTINCT 子句将所有NULL值视为相同的值。

例如,在customers表中,我们有许多行,其  state列具有NULL值。当我们使用该DISTINCT 子句查询客户的状态时,我们将看到唯一的状态和NULL值作为以下查询:

试试看

MySQL DISTINCT与NULL示例

MySQL DISTINCT有多个列

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

例如,要从customers表中获取城市和州的唯一组合,请使用以下查询:

试试看

MySQL DISTINCT多列示例

如果没有该DISTINCT 条款,您将获得州和城市的重复组合,如下所示:

试试看

MySQL上没有DISTINCT子句的多列

DISTINCT子句与GROUP BY子句

如果在语句中使用GROUP BY子句SELECT而不使用聚合函数,则该GROUP BY子句的行为类似于DISTINCT 子句。

以下语句使用该GROUP BY子句从customers表中选择客户的唯一状态。

试试看

MySQL DISTINCT与GROUP BY示例

您可以使用以下DISTINCT子句来实现类似的结果:

试试看

MySQL DISTINCT与GROUP BY示例进行排序

一般来说,该DISTINCT 条款是该条款的特例GROUP BY。之间的区别DISTINCT 条款,GROUP BY条款是该GROUP BY条款排序结果集,而DISTINCT 条款不。

如果将ORDER BY子句添加到使用该  DISTINCT子句的语句,则结果集将进行排序,并且与使用GROUP BY子句的语句返回的结果集相同。

试试看

MySQL DISTINCT和聚合函数

在MySQL将聚合函数应用于结果集之前,您可以使用DISTINCT带有聚合函数的子句(例如,SUMAVGCOUNT)来删除重复的行。

例如,要计算美国客户的唯一状态,请使用以下查询:

试试看

带有COUNT功能的MySQL DISTINCT

带有LIMIT子句的MySQL DISTINCT

如果您使用DISTINCT 带有LIMIT子句的子句,MySQL会在找到LIMIT子句中指定的唯一行数时立即停止搜索。

以下查询选择表中的前5个非null唯一状态customers

试试看

带有LIMIT子句的MySQL DISTINCT

在本教程中,我们向您展示了使用MySQL DISTINCT 子句的各种方法,例如消除重复行和计算非NULL值。


关注微信公众号

码中人 微信公众号