mysql中的distinct的用法[亲测有效]

mysql中的distinct的用法[亲测有效]distinct用法详解distinct关键字的作用distinct关键字的语法having用法详解having关键字

distinct的作用

在mysql中,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用

distinct的原理

distinct进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端,在这个分组的过程可能会出现两种不同的情况:

  • distinct 依赖的字段全部包含索引:
    该情况mysql直接通过操作索引对满足条件的数据进行分组,然后从分组后的每组数据中去一条数据。

  • distinct 依赖的字段未全部包含索引:
    该情况由于索引不能满足整个去重分组的过程,所以需要用到临时表,mysql首先需要将满足条件的数据放到临时表中,然后在临时表中对该部分数据进行分组,然后从临时表中每个分组的数据中去一条数据,在临时表中进行分组的过程中不会对数据进行排序。

distinct的用法

distinct的使用语法是这样的:

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

在使用distinct的过程中主要注意一下几点:

  • 在对字段进行去重的时候,要保证distinct在所有字段的最前面
  • 如果distinct关键字后面有多个字段时,则会对多个字段进行组合去重,只有多个字段组合起来的值是相等的才会被去重

下面我们通过在开发过程中经常遇到的一些关于distinct的实例来加深大家对该关键字用法的理解:

数据库表结构和数据如下图所示:
user表结构和数据

  • 对单个字段进行去重sql:
select distinct  age from user;

查询结果
age
10
20
30
  • 对多个字段进行去重sql:
select distinct name,age from user;

查询结果
name	age
One	10
Zero	20
Two	20
Four	30
One	30
  • 对多个字段进行去重并求count的sql:
select count(distinct name,age) as total from user;

查询结果
total
5

  • 对select * 进行去重
select distinct * from user;

由于 * 代表所有字段,所以该sqlselect distinct id,name,age,sign from user 语义相同

查询结果:
id		name	age		sign
1		One		10		梦想要有的,万一实现了呢
2		Zero	20		http://www.chaoshizhushou.com
3		Two		20		OneZeroTwoFour
4		Four	30		加油
5		One		30		学习才是硬道理
6		Four	30		一日三省吾身

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

(0)
编程小号编程小号

相关推荐

发表回复

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