Distinct

Distinct支持单列、多列的去重方式。单列去重的方式简明易懂,即相同值只保留1个。 多列的去重则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

Distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。

基本使用

Distinct一般是用来去除查询结果中的重复记录的,而且这个语句在selectinsertdeleteupdate中只可以在select中使用,具体的语法如下:

select distinct expression[,expression...] from tables [ where conditions];

这里的expressions可以是多个字段。本文的所有操作都是针对如下示例表的:

 

1.1 只对一列操作

这种操作是最常见和简单的,如下:

select distinct country from person

1.2 对多列进行操作

比如SELECT DISTINCT country, province FROM PERSON; 实际上返回的是country,与province同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得country,与province都相同的才被排除了,与我们期望的结果不一样,我们期望的是province不同被过滤

在这种情况下,distinct同时作用了两个字段,country,province

select distinct country, province from person

从上例中可以发现,distinct应用到多个字段的时候,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面,如下语句是错误的:

SELECT country, distinct province from person;

// 该语句是错误的

抛出错误如下:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘DISTINCT province from person’ at line 1

1.3 针对NULL的处理

从1.1和1.2中都可以看出,DistinctNULL是不进行过滤的,即返回的结果中是包含NULL值的。

Logo

更多推荐