mysql 重复数据 distinct_MySQL教程67-使用DISTINCT过滤重复数据

在MySQL中,DISTINCT关键字用于从查询结果中去除重复的记录。本文通过实例展示了如何使用DISTINCT对单一字段、多个字段以及所有字段进行去重操作,并解释了COUNT(DISTINCT ...)在统计不重复记录数时的应用。示例中,对student表的age字段去重后返回3条记录,对name和age字段去重后返回5条记录。
摘要由CSDN通过智能技术生成

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

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

DISTINCT 关键字的语法格式为:

SELECT DISTINCT FROM ;

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

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

DISTINCT 关键字只能在 SELECT 语句中使用。

在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。

如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。

例 1

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

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

mysql> SELECT * FROMtest.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 FROMstudent;+------+

| age |

+------+

| 18 |

| 19 |

| 20 |

+------+

3 rows in set (0.00 sec)

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

mysql> SELECT DISTINCT name,age FROMstudent;+----------+------+

| name | age |

+----------+------+

| zhangsan | 18 |

| lisi | 19 |

| wangwu | 18 |

| zhaoliu | 18 |

| wangwu | 20 |

+----------+------+

5 rows in set (0.00 sec)

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

mysql> SELECT DISTINCT * FROMstudent;+----+----------+------+-------+

| 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) FROMstudent;+--------------------------+

| COUNT(DISTINCT name,age) |

+--------------------------+

| 5 |

+--------------------------+

1 row in set (0.01 sec)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值