SQL DISTINCT

摘要:在本教程中,您将学习如何使用 SQL DISTINCT 运算符从表中选择不重复的值。

SQL DISTINCT 运算符简介 #

要从表的某一列中选择不重复的值,您可以在 SELECT 子句中使用 DISTINCT 运算符,如下所示:

SELECT DISTINCT
  column1
FROM
  table_name;Code language: SQL (Structured Query Language) (sql)

在此语法中,SELECT 语句返回一个结果集,其中包含表中 column1 列的唯一值。

SQL 允许您将多个列与 DISTINCT 运算符一起使用:

SELECT DISTINCT
  column1,
  column2
FROM
  table_name;

在这种情况下,SELECT 语句会使用 column1column2 两列的值组合来评估行的唯一性,并将不重复的行包含在结果集中。

请注意,DISTINCT 仅从表中选择不重复的值,它不会删除表中的重复行。

如果您想选择两列并移除其中一列的重复项,您应该改用 GROUP BY 子句。

SQL DISTINCT 运算符示例 #

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

SQL DISTINCT operator : Employees Table

从单列中选择不重复行的示例 #

以下语句从 employees 表的 salary 列中检索数据,并按从高到低的顺序排序

SELECT
  salary
FROM
  employees
ORDER BY
  salary DESC;Code language: SQL (Structured Query Language) (sql)

试一试

+----------+
| salary   |
+----------+
| 24000.00 |
| 17000.00 |
| 17000.00 |
| 14000.00 |
| 13500.00 |
| 13000.00 |
| 12000.00 |
| 12000.00 |
| 11000.00 |
| 10000.00 |
|  9000.00 |
|  9000.00 |
...

结果集有一些重复项,例如 17000120009000

以下语句使用 DISTINCT 运算符从 employees 表的 salary 列中选择唯一值:

SELECT DISTINCT
  salary
FROM
  employees
ORDER BY
  salary DESC;Code language: SQL (Structured Query Language) (sql)

试一试

  salary
----------
 24000.00
 17000.00
 14000.00
 13500.00
 13000.00
 12000.00
 11000.00
 10000.00
  9000.00
...Code language: plaintext (plaintext)

输出显示 DISTINCT 运算符返回了唯一的薪资金额。

在多列上选择不重复行的示例 #

以下语句从 employees 表中检索职位 ID 和薪水:

SELECT
  job_id,
  salary
FROM
  employees
ORDER BY
  job_id,
  salary DESC;Code language: SQL (Structured Query Language) (sql)

试一试

 job_id |  salary
--------+----------
      1 |  8300.00
      2 | 12000.00
      3 |  4400.00
      4 | 24000.00
      5 | 17000.00
      5 | 17000.00
      6 |  9000.00
      6 |  8200.00
      6 |  7800.00
      6 |  7700.00
      6 |  6900.00
      7 | 12000.00
...Code language: plaintext (plaintext)

结果集有一些重复行,例如职位 ID 为 5,薪水为 17000。这意味着有两名员工具有相同的职位 ID 和薪水。

以下语句使用 DISTINCT 运算符来移除职位 ID 和薪水中的重复值:

SELECT DISTINCT
  job_id,
  salary
FROM
  employees
ORDER BY
  job_id,
  salary DESC;Code language: SQL (Structured Query Language) (sql)

试一试

 job_id |  salary
--------+----------
      1 |  8300.00
      2 | 12000.00
      3 |  4400.00
      4 | 24000.00
      5 | 17000.00
      6 |  9000.00
      6 |  8200.00
      6 |  7800.00
...Code language: plaintext (plaintext)

请注意,您在 job_id 列中仍然会看到重复值,因为 DISTINCT 运算符是使用 job_idsalary 两列的值来评估重复性,而不仅仅是 job_id 列中的值。

SQL DISTINCT 与 NULL #

在数据库世界中,NULL 是一个特殊的值,代表未知或缺失的数据。

与常规值不同,NULL 不等于任何东西,甚至不等于它自己。例如,以下表达式将产生 NULL,即未知:

SELECT
  NULL = NULL;Code language: PHP (php)

通常,DISTINCT 运算符将所有 NULL 值视为相同。因此,DISTINCT 运算符在结果集中只保留一个 NULL

请注意,这种行为在不同的数据库产品之间可能会有所不同。

例如,以下语句返回员工的不重复电话号码:

SELECT DISTINCT
  phone_number
FROM
  employees
ORDER BY
  phone_number DESC;Code language: SQL (Structured Query Language) (sql)

试一试

 phone_number
--------------
 NULL
 650.501.2876
 650.501.1876
 650.124.1224
 650.123.4234
...Code language: plaintext (plaintext)

请注意,查询在结果集中只返回一个 NULL

摘要 #

  • SELECT 子句中使用 DISTINCT 运算符,可以从表的一个或多个列中选择唯一值。

数据库 #

测验 #

本教程是否有帮助?
© .