数据库教程-SQL DISTINCT运算符

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

在本教程中,我们将学习如何使用SQL DISTINCT运算符从结果集中删除重复数据项。

1. SQL DISTINCT运算符简介

主键确保表没有重复的行。 但是,当您使用SELECT语句查询表中的一部分列时,可能会得到重复数据项。

要从结果集中删除重复数据项,请在SELECT子句中插入DISTINCT运算符,如下所示:

SELECT DISTINCT     column1, column2, ... FROM     table1; 

如果在DISTINCT运算符后使用一列,则数据库系统使用该列来计算重复。 如果使用两列或更多列,数据库系统将使用这些列的组合进行重复检查。

要删除重复项,数据库系统首先按SELECT子句中指定的每个列对结果集进行排序。 然后,它从上到下扫描表,以识别彼此相邻的重复项。 如果结果集很大,则排序和扫描操作可能会降低查询的性能。

2. SQL DISTINCT示例

我们将使用示例数据库中的employees表来演示DISTINCT运算符的工作原理。

SQL 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_idsalary列的数据。

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_id5salary17000两行记录。

现在,如果将DISTINCT运算符添加到SELECT子句,则数据库系统将使用job_idsalary列中的值来计算重复项。 它只保留一个行记录,如上面的屏幕截图所示。

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运算符从结果集中删除重复的行。

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 sql教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/25/数据库教程-sql-distinct运算符/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注