SQL中的DISTINCT关键字详解:用法、示例及注意事项
创作时间:
作者:
@小白创作中心
SQL中的DISTINCT关键字详解:用法、示例及注意事项
引用
CSDN
1.
https://m.blog.csdn.net/web13508588635/article/details/145285302
在SQL查询中,经常会遇到需要去除重复数据的情况。DISTINCT关键字是实现这一功能的重要工具。本文将详细介绍DISTINCT的使用方法、应用场景以及使用时需要注意的事项,帮助读者更好地掌握这一SQL特性。
DISTINCT简介
DISTINCT是SQL中用来返回唯一不重复结果集的关键字。它通常用于SELECT语句中,可以指定一个或多个列进行去重,并返回唯一的结果。当你在使用SELECT查询数据时,可能会得到包含重复行的结果集。为了去除这些重复行,你可以使用DISTINCT关键字来获取唯一的记录。
表中插入的原始数据
在开始介绍DISTINCT的具体用法之前,我们先创建一个名为students
的表,并插入一些示例数据:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(50),
age INT,
score DECIMAL(5, 2)
);
INSERT INTO students (NAME, age, score) VALUES
('Alice', 20, 85.5),
('Bob', 22, 76.3),
('Charlie', 21, 92.0),
('Alice', 20, 85.5),
('David', 23, 68.9);
单列去重
单列去重是最基本的使用场景,使用DISTINCT可以去除查询结果中某个列的重复值,返回唯一的值。
SELECT DISTINCT age FROM students
多列去重
DISTINCT不仅可以对单个列进行去重,还可以对多个列进行组合去重,返回满足多列组合唯一的结果。
SELECT DISTINCT NAME, age, score FROM students
结合其他关键字
DISTINCT可以与其他SQL关键字结合使用,如ORDER BY、WHERE和GROUP BY等,以实现更复杂的查询需求。
SELECT DISTINCT NAME, age, score FROM students ORDER BY score DESC
SELECT DISTINCT NAME, age, score FROM students GROUP BY NAME
对表达式进行去重
DISTINCT还可以用于对表达式进行去重,而不仅仅是列名。这允许你根据某些计算得到的结果进行去重。
SELECT DISTINCT ( `name` + age) result FROM students
COUNT()统计
DISTINCT可以与聚合函数结合使用,例如COUNT(),用于统计唯一值的数量。
SELECT COUNT(DISTINCT NAME) num FROM students
注意事项
- distinct必须放在字段的开头,即放在第一个参数的位置。
- 只能在select语句中使用,不能在insert、delete、update中使用。
- distinct表示对后面的所有参数的拼接取不重复的记录。
- distinct忽略NULL值:distinct关键字默认会忽略NULL值,即将NULL视为相同的值。如果你希望包括NULL值在去重结果中,可以使用IS NULL或IS NOT NULL进行过滤。
- DISTINCT基于所有选择的列:DISTINCT关键字基于选择的所有列来进行去重。如果你只想根据部分列进行去重,可以使用子查询或者窗口函数等技术来实现。
- DISTINCT的性能消耗:DISTINCT操作可能会对查询的性能产生一定的影响,特别是在处理大量数据时。因为它需要对结果集进行排序和比较以去除重复行。如果性能是一个关键问题,可以考虑其他优化方法,例如使用索引或者合理设计查询。
- 结果集顺序不保证:使用DISTINCT关键字后,结果集的顺序可能会发生变化,因为数据库系统通常会对结果进行重新排列以去除重复行。如果需要特定的结果排序,可以使用ORDER BY子句进行排序。
完整版代码
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(50),
age INT,
score DECIMAL(5, 2)
);
INSERT INTO students (NAME, age, score) VALUES
('Alice', 20, 85.5),
('Bob', 22, 76.3),
('Charlie', 21, 92.0),
('Alice', 20, 85.5),
('David', 23, 68.9);
# 原始数据
SELECT * FROM students
# 单列去重:使用 DISTINCT 去重查询结果中的单个列,返回唯一的值。
SELECT DISTINCT age FROM students
# 多列去重:使用 DISTINCT 去重查询结果中的多个列,返回满足多列组合唯一的结果。
SELECT DISTINCT NAME, age, score FROM students
# 结合其他关键字:DISTINCT 可以与其他 SQL 关键字结合使用,如 ORDER BY、WHERE 和 GROUP BY 等
SELECT DISTINCT NAME, age, score FROM students ORDER BY score DESC
SELECT DISTINCT NAME, age, score FROM students GROUP BY NAME
# 对表达式进行去重:DISTINCT 还可以用于对表达式进行去重,而不仅仅是列名。这允许你根据某些计算得到的结果进行去重。
SELECT DISTINCT ( `name` + age) result FROM students
# COUNT()统计
SELECT COUNT(DISTINCT NAME) num FROM students
通过本文的介绍,相信读者已经掌握了DISTINCT关键字的基本用法和注意事项。在实际开发中,合理使用DISTINCT可以有效提升数据查询的准确性和效率。
热门推荐
“词俊”朱敦儒:30句经典诗词里的洛阳才子
班主任教你高效沟通:家校联系这样写最有效
玩转迈阿密不差钱:住宿交通餐饮全方位省钱指南
职场密码揭秘:如何用情绪价值赢得成功?
拉满情绪价值 打造“丽江体验”
东映动画三大经典:《海贼王》《七龙珠》《圣斗士星矢》的传奇之路
广州考古发现2.5万件文物,六千年文明史获实证
广东两城:顺德美食与从化生态,退休养老的理想选择
行李箱收纳技巧大揭秘:高效利用空间,轻装上阵!
1.5岁英语启蒙实战:口语、儿歌、绘本的科学引导法
内存时序调节指南:提升系统性能的技巧与注意事项
如何制作新鲜的自制意大利面
舟山三岛:普陀山、朱家尖、东极岛,总有一款打动你
舟山三日游:打卡最美公路和浪漫海滩
定海古城:千年海岛名城的文化新生
旅途贵宾教你高效打包行李箱
李时珍说它“利五脏,清内热”,比白菜、萝卜更营养,冬季要多吃
甘露寺见证甄嬛蜕变:从柔弱到坚强的流放岁月
蓝盈莹力荐重温《甄嬛传》甘露寺:甄嬛蜕变关键
科学饮食助力甲状腺健康:营养素摄入与饮食禁忌全解析
手机统一管理、开展文体活动,万盛区多措并举促进学生健康成长
手机应用隐藏攻略:系统自带功能与第三方工具使用指南
从设置到虚拟定位:苹果手机用户定位隐私保护指南
从偏僻小村到致富明珠 哈尔滨双城区永河村别样精彩
魏延之死:蜀汉的悲剧
马谡之死:蜀汉政权的转折点?
从选种到免疫:规模化土鸡放养全程技术解析
从甄嬛到钮祜禄氏:历史剧的艺术创作与史实之辨
<甄嬛传>"安栖观"原型:北京龙泉寺的藏汉文化交融
“天下第一坛”戒台寺:《甄嬛传》中的甄嬛修行地