SQL DISTINCT 子句
在本教程中,您将学习如何从结果集中删除重复值。
检索不同的值
从数据库表中获取数据时,结果集可能包含重复的行或值。 如果要删除这些重复值,可以在 SELECT
关键字之后直接指定关键字 DISTINCT
,如下所示:
语法
DISTINCT
子句用于从结果集中删除重复行:
SELECT DISTINCT
column_list
FROM table_name
;在这里,column_list 是一个逗号分隔的数据库表(例如 name, age, country 等)的列或字段名称列表,您要获取其值。
注意: DISTINCT
子句的行为类似于 UNIQUE
约束,不同之处在于它处理空值的方式。 两个 NULL
值被认为是唯一的,同时它们不被认为彼此不同。
让我们看看一些例子来展示它是如何工作的。
假设我们的数据库中有一个 customers 表,其中包含以下记录:
+---------+--------------------+-----------+-------------+ | cust_id | cust_name | city | postal_code | +---------+--------------------+-----------+-------------+ | 1 | Maria Anders | Berlin | 12209 | | 2 | Fran Wilson | Madrid | 28023 | | 3 | Dominique Perrier | Paris | 75016 | | 4 | Martin Blank | Turin | 10100 | | 5 | Thomas Hardy | Portland | 97219 | | 6 | Christina Aguilera | Madrid | 28001 | +---------+--------------------+-----------+-------------+
现在执行以下语句,该语句返回该表 city 列中的所有行。
SELECT city FROM customers;
执行后,你会得到如下输出:
+-----------+ | city | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | | Madrid | +-----------+
如果你仔细看输出,你会发现"Madrid"这个城市在我们的结果集中出现了两次,这是不好的。 好吧,让我们解决这个问题。
删除重复数据
以下语句使用 DISTINCT
生成 customers 表中所有城市的列表。
SELECT DISTINCT city FROM customers;
执行上述命令后,您将获得如下输出:
+-----------+ | city | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | +-----------+
正如您这次看到的,我们的结果集中没有重复值。
注意:如果对具有多个 NULL 值的列使用 SELECT DISTINCT
语句,则 SQL 会保留一个 NULL
值并从结果集中删除其他值,因为 DISTINCT
将所有 NULL
值作为相同的值。
Advertisements