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可以有效提升数据查询的准确性和效率。
热门推荐
兰科蝴蝶兰属附生草本植物形态特征介绍
内网穿透快速入门:如何将本地网站发布到公网
山地是什么地形?山地的特点及气候特征详解
想要桂花树枝叶疯长、花开满枝、花香四溢?这养护知识要知道!
物联网如何赋能仓储物流
RFID识别系统的优势与局限性分析
RFID在应用领域未来的发展趋势:智能互联的新篇章
为什么顶一字的股风险大
步枪科普:M16A1
气胸:一种可能致命的肺部疾病
如何全面分析黄金价格的行情变化?这种分析如何为投资提供有力支持?
科技助盲:‘盲人生活自理’新策略与智能避障实践
气动薄膜三通分流调节阀的工作原理与应用
喉咙只有左半边疼是为什么
当年明月难寻「江凌江曜迟浅」全文+后续
蟒蚺蝰蝮都是蛇?上海动物园展出多种蛇类,还推出了科普读本
RFID技术进阶:频段选择的艺术与科学
车主必读:选择发动机防冻液时的关键指标和注意事项解析
如何切鱼片
如何发布并使用自己的npm包
协同反应:提升团队合作效率的关键
二手机翻新出售都违法吗?深圳检察发布合规指引鼓励循环经济
智性恋,是不是一场盛大的学历歧视?
如何礼貌拒绝别人的表白
2024年国产芯片市场前景分析:国产芯片行业市场规模同比增长19.49%
一路走好!春节刚过去一周,就有5位名人去世,最年轻者只有37岁
导热双面胶兼具导热与粘接双重功能,广泛应用在电子电器、汽车、新能源等领域
业务员提成管理的主要内容是什么?
海南儋州深度游:一日精华路线与必体验活动全攻略
干货插画作品集制作流程