SQL中的DISTINCT关键字详解:用法与注意事项
创作时间:
作者:
@小白创作中心
SQL中的DISTINCT关键字详解:用法与注意事项
引用
CSDN
1.
https://blog.csdn.net/m0_74823892/article/details/144272953
在SQL查询中,经常会遇到需要去除重复数据的情况。本文将详细介绍SQL中的DISTINCT关键字,包括其基本用法、应用场景以及使用时需要注意的事项。
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的具体用法
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()统计
使用COUNT()函数结合DISTINCT可以统计唯一值的数量。
SELECT COUNT(DISTINCT NAME) num FROM students
使用DISTINCT时的注意事项
- 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可以有效地帮助我们处理数据重复的问题,提高数据查询的准确性和效率。
热门推荐
冬天常给孩子们吃发酵面食,馒头做成香肠卷,十个孩子八个爱吃
自制凉皮完全攻略:从揉面到调味,8步做出正宗凉皮
胃酸胃胀反酸水烧心是怎么回事,缓解反酸可用铝碳酸镁
夏天来了,你真的会用痱子粉吗?
冬日必打卡:苏州松鹤楼&得月楼美食指南
周末打卡:苏州博物馆和平江路
春节打卡三亚:暖冬度假胜地
春节必打卡:自贡灯会&哈尔滨冰雪大世界
南京网红打卡地新玩法:中山陵、夫子庙、玄武湖的别样体验
2024春节数据观察:流动的春节,不息的生意
婚前必修课:从心理准备到幸福经营
香港婚姻登记处:如何顺利办理结婚手续?
跟着小菲玩转上海三日游!
为何韩文与中文相似?
情感的自我提升:如何通过学习不断成长与进步
早餐行业正经历深刻变革,价格下行与成本压力并存
上海环球金融中心:生日必打卡的云端胜地
健步走:轻松降三高的秘密武器!
妙佑医疗推荐:10种非药物降压降脂生活方式
秋冬养生:如何有效控制血压和血脂?
狗肉市场:繁荣背后的公共卫生隐患
入夏后,建议中老年:少吃豆腐大虾,多吃这3样,养阳散寒好入夏
狗肉是发物吗?中医、营养学专家这样回答
老年人长期吃鸡蛋和不吃鸡蛋,有何区别?医生:注意3点,更健康
燕窝到底有用吗?营养学证据来了
烟笼寒水月笼沙:南京夫子庙秦淮河夜游全攻略
南京秋冬打卡胜地:从夫子庙到紫金山
冬日打卡:南京三大历史遗迹探秘
白玉兰奖认证:殷桃凭《人世间》再证演技
《小夫妻》:当殷桃遇上齐溪,这部家庭剧为何如此圈粉?