深入解析mysql中distinct的用法
作者:有梦想的攻城狮
本文深入解析了MySQL中DISTINCT关键字的功能,包括其作用、原理及使用方法,DISTINCT用于去除重复记录,提高数据查询效率,文章通过实例展示了如何对单个或多个字段进行去重,并结合COUNT函数使用,感兴趣的朋友跟随小编一起看看吧
DISTINCT简介
DISTINCT 的作用是消除结果集中的重复行,语法如下:
SELECT DISTINCT columns FROM table_name WHERE where_conditions;
mysql中的distinct的用法
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的实例来加深大家对该关键字用法的理解:
数据库表结构和数据如下图所示:
- 对单个字段进行去重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; 由于 * 代表所有字段,所以该sql和 select 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 一日三省吾身
到此这篇关于mysql中的distinct的用法的文章就介绍到这了,更多相关mysql distinct用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!