SQL中的DISTINCT关键字详解:用法、示例及注意事项
创作时间:
作者:
@小白创作中心
SQL中的DISTINCT关键字详解:用法、示例及注意事项
引用
CSDN
1.
https://blog.csdn.net/m0_74823892/article/details/144272953
在数据库查询中,经常会遇到需要去除重复记录的情况。SQL中的DISTINCT关键字就是专门用于处理这类需求的利器。本文将详细介绍DISTINCT的使用方法、应用场景以及使用时需要注意的事项,帮助你更好地掌握这一重要功能。
DISTINCT简介
DISTINCT是SQL中用来返回唯一不重复结果集的关键字。它通常用于SELECT语句中,可以指定一个或多个列进行去重,并返回唯一的结果。当你在使用SELECT查询数据时,可能会得到包含重复行的结果集。为了去除这些重复行,你可以使用DISTINCT关键字来获取唯一的记录。
基本用法
1. 单列去重
使用DISTINCT去重查询结果中的单个列,返回唯一的值。
SELECT DISTINCT age FROM students
2. 多列去重
使用DISTINCT去重查询结果中的多个列,返回满足多列组合唯一的结果。
SELECT DISTINCT NAME, age, score FROM students
3. 结合其他关键字
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
4. 对表达式进行去重
DISTINCT还可以用于对表达式进行去重,而不仅仅是列名。这允许你根据某些计算得到的结果进行去重。
SELECT DISTINCT ( `name` + age) result FROM students
5. 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可以让你的数据库查询更加高效和准确。
热门推荐
白血球低的原因、影响及应对方法全面解析与健康建议
自媒体昵称如何取?有哪些技巧和注意事项?
“三山”留胜迹 古厝展新颜——福州打造城市中轴线文化地标
泰安赏红叶攻略:九如山、红叶谷等八大景点详解
激光电视机与液晶电视机的对比
AI当你的节电顾问 连锁企业必看的「可视化」用电数据
蔚蓝档案强度榜解析:打造最强S3阵容的关键指南
固定资产报废收入的税务处理指南
胡萝卜对眼睛健康有帮助吗?探讨胡萝卜在改善视力方面的作用
汕头的房价走势如何?这种走势对购房者的决策有何影响?
Windows系统无法访问互联网的常见原因及解决方案
迎合现代健康理念 经典名方苏合香丸的逆袭
生活水平不如父母一代,日本“下流社会”给我们怎样警示?
2024年中国牛肉进出口数据分析简报
现在填表时必填的籍贯,在古代有多重要?
高考生物答题技巧归纳
警惕金融骗局,学会这几招教你守住“钱袋子”
探寻苏州虎丘塔,千年历史的见证与传承
小学生自然教育:理论与实践指南
周瑜打黄盖的故事是怎样的?这件事的起因是什么?
晨钟暮鼓中的古刹气息:洛阳白马寺深度游
孩子发烧、呕吐,别急着吃流感特效药,这种病毒感染正高发
肝功七项化验单怎么看结果
加拿大公司注册费用详解:从注册到运营的全面指南
我们会变得更好——评析《战神诸神黄昏》
【以案释法】关于违约金的认定,法院这样判→
冲击赛季首冠,斯瓦泰克晋级8强!郑钦文挑战萨巴伦卡,压力很大
身上摸到这3类肿块,当心癌症来袭
如何正确注销移动电话卡?详细步骤解析
BIOS入门设置——刚装起用ROG主板的PC之后应该做些什么调整呢?