使用SQL DISTINCT删除重复数据项
2022/1/20 19:14:36
本文主要是介绍使用SQL DISTINCT删除重复数据项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在本教程中,我们将学习如何使用SQL DISTINCT
运算符从结果集中删除重复数据项。
1. SQL DISTINCT运算符简介
主键确保表没有重复的行。 但是,当您使用SELECT
语句查询表中的一部分列时,可能会得到重复数据项。
要从结果集中删除重复数据项,请在SELECT
子句中插入DISTINCT
运算符,如下所示:
SELECT DISTINCT column1, column2, ... FROM table1;
如果在DISTINCT
运算符后使用一列,则数据库系统使用该列来计算重复。 如果使用两列或更多列,数据库系统将使用这些列的组合进行重复检查。
要删除重复项,数据库系统首先按SELECT
子句中指定的每个列对结果集进行排序。 然后,它从上到下扫描表,以识别彼此相邻的重复项。 如果结果集很大,则排序和扫描操作可能会降低查询的性能。
更多教程请访问http://www.manongzj.com
2. SQL DISTINCT示例
我们将使用示例数据库中的employees
表来演示DISTINCT
运算符的工作原理。
3. SQL DISTINCT一列示例
以下语句从employees
表中检索薪水数据,并按降序对其进行排序。
SELECT salary FROM employees ORDER BY salary DESC;
执行上面查询语句,得到以下结果 -
+--------+ | salary | +--------+ | 24000 | | 17000 | | 17000 | | 14000 | | 13500 | | 13000 | ... ...
如上所见,有重复的薪资数据,例如17,000
,因为两个或更多员工的薪水相同。 要删除重复项,请将DISTINCT
运算符添加到SELECT
子句,如下所示:
SELECT DISTINCT salary FROM employees ORDER BY salary DESC;
执行上面查询语句,得到以下结果 -
+--------+ | salary | +--------+ | 24000 | | 17000 | | 14000 | | 13500 | | 13000 | | 12000 | ... ...
现在,从结果集中删除所有重复项。
4. SQL DISTINCT多列示例
以下语句从employees
表中检索job_id
和salary
列的数据。
SELECT job_id, salary FROM employees ORDER BY job_id, salary DESC;
执行上面查询语句,得到以下结果 -
+--------+--------+ | job_id | salary | +--------+--------+ | 1 | 8300 | | 2 | 12000 | | 3 | 4400 | | 4 | 24000 | | 5 | 17000 | | 5 | 17000 | ... ...
上面查询结果集中,有两行记录相同:job_id
是5
和salary
是17000
两行记录。
现在,如果将DISTINCT
运算符添加到SELECT
子句,则数据库系统将使用job_id
和salary
列中的值来计算重复项。 它只保留一个行记录,如上面的屏幕截图所示。
SELECT DISTINCT job_id, salary FROM employees ORDER BY job_id, salary DESC;
执行上面查询语句,得到以下结果 -
+--------+--------+ | job_id | salary | +--------+--------+ | 1 | 8300 | | 2 | 12000 | | 3 | 4400 | | 4 | 24000 | | 5 | 17000 | | 6 | 9000 | | 6 | 8200 | ......
5. SQL DISTINCT和NULL值
NULL值在SQL中是一个特别的值。 它在某些情况下用作标记,比如:缺少信息或信息不适用。 因此,NULL
无法与任何值进行比较。 即使NULL
也不等于它自己。 如果列中有两个或多个NULL
值,数据库系统是否将它们视为相同或不同的值?
通常,DISTINCT
运算符将所有NULL
值视为相同的值。 因此在结果集中,DISTINCT
运算符只保留一个NULL
值,并从结果集中删除其它的NULL
值。
以下语句返回员工的不同电话号码。
SELECT DISTINCT phone_number FROM employees;
执行上面查询语句,得到以下结果 -
+----------------+ | phone_number | +----------------+ | 0532-86011111 | | 0551-4243311 | | 0571-87622362 | ...... | NULL | | 0351-2233611 | | 021-66050000 | | 010-67237328 | | 0755-28114518 | | 0755-83587526 | | 0513-83512816 | | 0898-31686222 | | 022-26144822 | +----------------+ 34 rows in set
请注意,它只返回一个NULL
值。
在本教程中,您学习了如何使用DISTINCT
运算符从结果集中删除重复的行。
这篇关于使用SQL DISTINCT删除重复数据项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享