在 MySQL 中使用 SELECT 语句执行简单的数据查询时,返回的是所有匹配的记录。如果表中的某些字段没有唯一性约束,那么这些字段就可能存在重复值。为了实现查询不重复的数据,MySQL 提供了 DISTINCT 关键字。

DISTINCT 关键字的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据给用户。

DISTINCT 关键字的语法格式为:

SELECT DISTINCT <字段名> FROM <表名>;

其中,“字段名”为需要消除重复记录的字段名称,多个字段时用逗号隔开。

使用 DISTINCT 关键字时需要注意以下几点:

  • DISTINCT 关键字只能在 SELECT 语句中使用。
  • 在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。
  • 如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。

例 1
下面通过一个具体的实例来说明如何实现查询不重复数据。

test 数据库中 student 表的表结构和数据如下所示:

mysql> SELECT * FROM test.student;
+----+----------+------+-------+
| id | name     | age  | stuno |
+----+----------+------+-------+
|  1 | zhangsan |   18 |    23 |
|  2 | lisi     |   19 |    24 |
|  3 | wangwu   |   18 |    25 |
|  4 | zhaoliu  |   18 |    26 |
|  5 | zhangsan |   18 |    27 |
|  6 | wangwu   |   20 |    28 |
+----+----------+------+-------+

结果显示,student 表中存在 6 条记录。

下面对 student 表的 age 字段进行去重,SQL 语句和运行结果如下:

mysql> SELECT DISTINCT age FROM student;
+------+
| age  |
+------+
|   18 |
|   19 |
|   20 |
+------+

对 student 表的 name 和 age 字段进行去重,SQL 语句和运行结果如下:

mysql> SELECT DISTINCT name,age FROM student;
+----------+------+
| name     | age  |
+----------+------+
| zhangsan |   18 |
| lisi     |   19 |
| wangwu   |   18 |
| zhaoliu  |   18 |
| wangwu   |   20 |
+----------+------+

对 student 表中的所有字段进行去重,SQL 语句和运行结果如下:

mysql> SELECT DISTINCT * FROM student;
+----+----------+------+-------+
| id | name     | age  | stuno |
+----+----------+------+-------+
|  1 | zhangsan |   18 |    23 |
|  2 | lisi     |   19 |    24 |
|  3 | wangwu   |   18 |    25 |
|  4 | zhaoliu  |   18 |    26 |
|  5 | zhangsan |   18 |    27 |
|  6 | wangwu   |   20 |    28 |
+----+----------+------+-------+

因为 DISTINCT 只能返回它的目标字段,而无法返回其它字段,所以在实际情况中,我们经常使用 DISTINCT 关键字来返回不重复字段的条数。

查询 student 表中对 name 和 age 字段去重之后记录的条数,SQL 语句和运行结果如下:

mysql> SELECT COUNT(DISTINCT name,age) FROM student;
+--------------------------+
| COUNT(DISTINCT name,age) |
+--------------------------+
|                        5 |
+--------------------------+

结果显示,student 表中对 name 和 age 字段去重之后有 5 条记录。

2、MySQL使用(DISTINCT)过滤重复数据相关推荐

  1. C#过滤重复数据,使用泛型

    #region List<T> 过滤重复数据 public delegate bool EqualsComparer<T>(T x, T y); /// <summary ...

  2. oracle 查的数据去重复数据,Oracle查询和过滤重复数据

    对数据库某些意外情况,引起的重复数据,如何处理呢? ----------------查重复: select * from satisfaction_survey s where s.as_side = ...

  3. Java List 过滤重复数据

    Java List 过滤重复数据 需求: 数据库返回结果集中包含重复数据并存入List集合中,过滤到重复数据并保留最新数据 解析: 数据库中新增记录位置在下面 而SQL查询一般为升序即从上向下查询也就 ...

  4. scrapy过滤重复数据和增量爬取

    原文链接 前言 这篇笔记基于上上篇笔记的---<scrapy电影天堂实战(二)创建爬虫项目>,而这篇又涉及redis,所以又先熟悉了下redis,记录了下<redis基础笔记> ...

  5. 怎么有效地查询MySQL表中的重复数据

    在MySQL数据库中,偶尔会遇到需要查找表中出现的重复数据的情况.这种情况下,我们可以通过编写一些SQL查询语句轻松地找到并处理这些重复行.本文将介绍一些常见的方法和技巧,帮助你有效地查询MySQL表 ...

  6. MySql删除表中重复数据

    有一表中存在大量重复数据 在此记录下我删除表内重复数据的方法 -- 新增测试表 create table basic_farmer ( id INT(11), user_name VARCHAR(25 ...

  7. MySQL DISTINCT:去重(过滤重复数据)

    在使用 MySQL SELECT 语句查询数据的时候返回的是所有匹配的行. 例如,查询 tb_students_info 表中所有 age 的执行结果如下所示. mysql> SELECT ag ...

  8. MySQL 过滤重复数据

    MySQL SELECT 语句查询数据的时候返回的是所有匹配的行. 查询 tb_students_info 表中所有 age 的执行结果如下所示. mysql> SELECT age FROM ...

  9. MySQL - 13使用DISTINCT去除重复数据

    distinct的使用 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的 某一列含有重复值是很常见的,如employ表的dept列.如果在查询数据时,希 ...

最新文章

  1. ant 使用常见问题
  2. SharePoint 出现无法识别的属性“type”
  3. Java(15) _Runtime类 内存方法
  4. SQL解析器的性能测试
  5. JS异步模式与Promise模式
  6. 复习上学期的HTML CSS(1)
  7. 每天一个linux命令(lsof)
  8. Eclipse 版本升级:如何不卸载旧版本 Eclipse 实现在线升级到最新版本?
  9. python16进制字节序_Python-十六进制数据传递与接收
  10. 本两个Build工作总结
  11. css权威指南读书笔记
  12. #9733;双十一背后的消费心理
  13. ROG Phone 6什么时候发布 ROG Phone 6配置如何
  14. java 加密方式_Get史上最优雅的加密方式!没有之一!
  15. django MVT模式介绍
  16. hive学习之数据插入操作
  17. IDEA使用手记——IDEA主菜单恢复
  18. Mentor-dft 学习笔记 day12-Multi-Mode ChainsScan Insertion Flows
  19. ORACLE 常用函数——日期/时间函数(感谢潇湘隐者)
  20. 【正点原子FPGA连载】第二章 实验平台简介 -摘自【正点原子】新起点之FPGA开发指南_V2.1

热门文章

  1. DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)
  2. TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模
  3. Windows之Chocolatey:windows下的apt-get即Chocolatey简介、安装、使用方法之详细攻略
  4. Pandas matplotlib 无法显示中文 Ubuntu16.04
  5. TCP协议三步挥手与四步挥手
  6. X星球居民小区的楼房全是一样的...
  7. iOS 关于权限设置的问题
  8. Divide and conquer:K Best(POJ 3111)
  9. 关于内存管理/set/get方法
  10. dos窗口显示中文的一种方法