当前位置: 首页 > article >正文

MySQL数据库——MySQL使用DISTINCT过滤重复数据

在 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 |
+----+----------+------+-------+
6 rows in set (0.00 sec)

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

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

mysql> SELECT DISTINCT age FROM student;
+------+
| age  |
+------+
|   18 |
|   19 |
|   20 |
+------+
3 rows in set (0.00 sec)

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

mysql> SELECT DISTINCT name,age FROM student;
+----------+------+
| name     | age  |
+----------+------+
| zhangsan |   18 |
| lisi     |   19 |
| wangwu   |   18 |
| zhaoliu  |   18 |
| wangwu   |   20 |
+----------+------+
5 rows in set (0.00 sec)

对 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 |
+----+----------+------+-------+
6 rows in set (0.00 sec)

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

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

mysql> SELECT COUNT(DISTINCT name,age) FROM student;
+--------------------------+
| COUNT(DISTINCT name,age) |
+--------------------------+
|                        5 |
+--------------------------+
1 row in set (0.01 sec)

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

黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括


http://www.kler.cn/a/13948.html

相关文章:

  • 【SCI电气】考虑不同充电需求的电动汽车有序充电调度方法(Matlab代码实现)
  • 机器学习 探索性数据分析
  • vue3 Pinia快速入门
  • 指纹浏览器科普:管理上百个社媒账号?窗口同步?RPA自动化?
  • MySQL基础练习——创建数据库、数据表,并进行修改
  • 【Chano的SFM教程】3dmax 面部表情.VTA基本制作教程
  • 匿名管道与命名管道
  • springboot集成webservice
  • 【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?
  • JUC多并发编程 LockSupport和线程中断
  • 最佳实践:Android应用中的网络请求和数据缓存
  • 利用校正板对无人机影像辐射校正
  • [算法前沿]--004-transformer的前世今生
  • java超市会员积分管理系统
  • 【Android车载系列】第10章 系统服务-SystemServer源码分析(API28)
  • mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)
  • Linux清理系统日志或临时文件logrotate使用方法
  • zookeeper笔记
  • AUTOSAR网络管理
  • 【华为OD机试真题 C++】1054 - 统一限载货物数最小值 | 机试题+算法思路+考点+代码解析