SQL 基础教程
SQL 连接
SQL 高级教程
SQL 参考资料

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