SQL 如何(或是否可以)在多个列上使用 SELECT DISTINCT
在本文中,我们将介绍如何在 SQL 中使用 SELECT DISTINCT 语句来选择多个列的唯一值。
阅读更多:SQL 教程
什么是 SELECT DISTINCT ?
在 SQL 中,SELECT DISTINCT 用于从表中选择唯一的值。它可以用于一个或多个列,并返回这些列中的不同值。
SELECT DISTINCT on 单个列
让我们首先探讨如何在单个列上使用 SELECT DISTINCT。
假设我们有一个名为 “Customers” 的表,其中包含了客户的多个信息列,如姓名、城市和邮政编码。我们想要选择不同的城市。
SELECT DISTINCT city
FROM Customers;
上述语句将返回 “Customers” 表中不同的城市列表。
SELECT DISTINCT on 多个列
当我们希望在多个列上使用 SELECT DISTINCT 时,需要使用多个列名,并以逗号分隔。
假设我们继续使用 “Customers” 表,但这次我们想要根据客户的姓名和城市选择唯一的客户。
SELECT DISTINCT name, city
FROM Customers;
上述语句将返回 “Customers” 表中不同的客户姓名和城市的组合列表。
SELECT DISTINCT on 多个列时的注意事项
当我们在多个列上使用 SELECT DISTINCT 时,需要注意以下几点:
- SELECT DISTINCT 计算唯一值的方式是将指定的多个列作为一个整体来计算,而不是分别计算每一列的唯一值。这意味着只有当多个列的组合是唯一的,才会被选择。
- SELECT DISTINCT 的结果集将包含指定的多个列的各个组合,而不是每个列的唯一值。这意味着唯一的列值组合可能会出现多次。
- 当我们使用 SELECT DISTINCT 时,返回的结果集是无序的,除非我们使用 ORDER BY 子句指定排序的列。
让我们通过一个示例来说明上述注意事项。假设我们有一个名为 “Orders” 的表,其中包含了订单号、客户姓名和订单日期。
订单号 | 客户姓名 | 订单日期 |
---|---|---|
001 | David | 2021-01-01 |
002 | David | 2021-01-02 |
003 | John | 2021-01-03 |
004 | Alex | 2021-01-03 |
005 | John | 2021-01-04 |
现在,我们希望选择唯一的客户姓名和订单日期的组合:
SELECT DISTINCT customer_name, order_date
FROM Orders;
结果集将如下所示:
客户姓名 | 订单日期 |
---|---|
David | 2021-01-01 |
David | 2021-01-02 |
John | 2021-01-03 |
Alex | 2021-01-03 |
John | 2021-01-04 |
注意到客户姓名和订单日期的组合是唯一的,但客户姓名和订单日期的各个值并不唯一。
使用 SELECT DISTINCT on 多个列的实际应用
SELECT DISTINCT on 多个列的实际应用非常广泛。例如,我们可以使用它来识别具有唯一组合的记录,或者根据多个列进行筛选。
示例 1:识别具有唯一组合的记录
假设我们有一个名为 “Employees” 的表,其中包含了员工的姓名、部门和职位。我们想要识别具有唯一姓名和部门组合的员工。
SELECT DISTINCT name, department
FROM Employees;
该查询将返回 “Employees” 表中具有唯一姓名和部门组合的员工记录。
示例 2:根据多个列进行筛选
假设我们继续使用 “Employees” 表,并且我们想要选择姓名为 “John”,部门为 “Sales” 的员工记录。我们可以使用以下查询:
SELECT DISTINCT *
FROM Employees
WHERE name = 'John' AND department = 'Sales';
该查询将返回 “Employees” 表中符合条件的唯一记录。
总结
通过使用 SELECT DISTINCT 语句,我们可以在 SQL 中选择特定列或多个列的唯一值。我们可以在单个列上使用 SELECT DISTINCT,也可以在多个列上使用 SELECT DISTINCT。在多个列上使用 SELECT DISTINCT 需要注意结果集的排序和唯一组合的计算方式。
希望本文对你在 SQL 中使用 SELECT DISTINCT on 多个列时有所帮助!