在数据库查询中,我们经常会遇到重复数据的问题。例如:
- 同一个用户下了多个订单,查询用户列表时出现重复;
- 查询商品分类时,某些分类被多次列出。
这时候,我们就需要用到 SQL 中非常实用的一个关键字 —— DISTINCT!
它可以帮我们从查询结果中去除重复记录,只保留唯一的值。
一、什么是 DISTINCT?
DISTINCT 是 SQL 中用于去重的关键字。它作用于 SELECT 查询中,确保返回的结果集中某列或组合列的值是唯一的。
你可以把它理解为:“相同的值只显示一次”。
二、基本语法
SELECT DISTINCT column_name
FROM table_name;
column_name:你希望去重的字段名。- 如果需要对多个字段组合去重,也可以这样写:
SELECT DISTINCT column1, column2
FROM table_name;
三、示例讲解
假设我们有一个 orders 表,记录了用户的购买记录:
表:orders
| order_id | user_id | product |
|---|---|---|
| 1 | 1 | 手机 |
| 2 | 1 | 耳机 |
| 3 | 2 | 鼠标 |
| 4 | 2 | 鼠标 |
| 5 | 3 | 显示器 |
| 6 | 1 | 手机 |
示例1:查询所有不同的用户 ID
SELECT DISTINCT user_id FROM orders;
结果:
| user_id |
|---|
| 1 |
| 2 |
| 3 |
这样就避免了同一个用户ID多次出现。
示例2:查询用户购买的不同商品种类
SELECT DISTINCT product FROM orders;
结果:
| product |
|---|
| 手机 |
| 耳机 |
| 鼠标 |
| 显示器 |
这样就能清晰看到有哪些不同的商品被购买过。
示例3:查询“用户 + 商品”组合的唯一性(多字段去重)
SELECT DISTINCT user_id, product FROM orders;
结果:
| user_id | product |
|---|---|
| 1 | 手机 |
| 1 | 耳机 |
| 2 | 鼠标 |
| 3 | 显示器 |
可以看到,虽然用户2买了两次鼠标,但只保留了一条记录;用户1买过两次手机,也只显示一次。
注意
DISTINCT对性能有一定影响,尤其是在大数据量表上使用时,请尽量配合WHERE或LIMIT使用。DISTINCT与GROUP BY在很多情况下效果相同,但在语义和执行效率上略有差异:
| 对比项 | DISTINCT | GROUP BY |
|---|---|---|
| 目的 | 去重 | 分组统计 |
| 是否支持聚合函数 | ❌ | ✅ |
| 性能差异 | 通常更适用于单字段去重 | 更适合复杂分组和统计 |
四、总结对比表
| 操作类型 | SQL示例 | 说明 |
|---|---|---|
| 单字段去重 | SELECT DISTINCT user_id | 返回不重复的用户ID |
| 多字段去重 | SELECT DISTINCT user_id, product | 返回不重复的用户+商品组合 |
| 去除重复行 | SELECT DISTINCT * | 整行完全一致的记录只保留一条 |
| 与 GROUP BY 对比 | GROUP BY user_id 等效去重功能 | 但更适合做统计汇总 |
如果这篇文章对大家有帮助可以点赞关注,你的支持就是我的动力😊!