在本教程中,您将学习如何从结果集中删除重复的值。
从数据库表中获取数据时,结果集可能包含重复的行或值。 如果要删除这些重复的值,可以在SELECT关键字之后直接指定关键字DISTINCT,如下所示:
DISTINCT子句用于从结果集中删除重复的行:
SELECT DISTINCT column_list FROM table_name;
在这里,column_list是用逗号分隔的要获取其值的数据库表的列名或字段名的列表(例如name,age,country等)。
注意: DISTINCT子句的行为类似于UNIQUE约束,除了它对待null的方式不同。 两个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 | +-----------+
正如您看到的,这次的结果集中没有重复的值。
注意:如果将SELECT DISTINCT语句用于具有多个NULL值的列,则SQL保留一个NULL值,并从结果集中删除其他值,因为DISTINCT将所有NULL值视为相同的值。