Mysql 简明教程

MySQL - Distinct Clause

MySQL DISTINCT clause

MySQL 中的 DISTINCT 从一个表或多个表中返回不同值(唯一值)以与 SELECT 语句配合使用。它忽略特定列中存在的所有重复值,仅返回不同值。

此子句可用于多种场景,例如识别唯一客户姓名、唯一客户 ID 等。可与 WHERE、ORDER BY 和 GROUP BY 等其他子句结合使用以进一步筛选数据。

Syntax

以下是 MySQL 中 DISTINCT 子句的语法:

SELECT DISTINCT column1, column2, ..., columnN
FROM table_name
WHERE conditions // optional

其中,

  1. (column1, column2,…​,columnN) 是我们想要唯一(不同)值所在的列。

  2. table_name 是我们想要选择数据的表的名称。

  3. WHERE conditions 是可选的。这些用于筛选数据。

Example

首先,让我们创建一个名为 CUSTOMERS 的表使用以下 INSERT 查询:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下 INSERT INTO 语句将 7 条记录添加到上面创建的表中:

INSERT INTO CUSTOMERS(ID, NAME, AGE, ADDRESS, SALARY) VALUES
(1, 'Ramesh', 32, 'Hyderabad', NULL),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Hyderabad', 2000.00),
(4, 'Chaital', 25, 'Mumbai', NULL),
(5, 'Hardik', 27, 'Vishakapatnam', 8500.00),
(6, 'Komal', 22, 'Vishakapatnam', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

执行以下查询以显示 CUSTOMERS 表中插入的所有记录:

SELECT * FROM CUSTOMERS;

以下为 CUSTOMERS 表 −

现在,让我们检索 CUSTOMERS 表中的 ADDRESS 列,不用 DISTINCT 子句。

SELECT ADDRESS FROM CUSTOMERS;

ADDRESS 列中不忽略重复值。

在此,我们在 ADDRESS 列中使用 DISTINCT 子句

SELECT DISTINCT ADDRESS FROM CUSTOMERS;

Output

正如我们从下面的输出中看到的,ADDRESS 列中的重复值将被忽略。

DISTINCT Clause with COUNT() Function

MySQL count() 函数允许我们计算表的一列或多列中存在的唯一值的数量。让我们了解以下示例:

Example

在以下查询中,我们正在使用 MySQL COUNT() 函数来计算 CUSTOMERS 表中 ADDRESS 列的 DISTINCT 记录:

SELECT COUNT(DISTINCT ADDRESS) FROM CUSTOMERS;

Output

ADDRESS 列中存在 5 个不同的记录。

Example

在此查询中,我们正在从 ADDRESS 为“Hyderabad”的 CUSTOMERS 表中检索唯一的 SALARY 记录。

SELECT DISTINCT SALARY FROM CUSTOMERS WHERE ADDRESS = "HYDERABAD";

Output

以上程序的输出如下所示:

DISTINCT on Multiple Columns

我们可以在表的多个列上使用 MySQL DISTINCT 关键字来返回这些列中所有唯一的值组合,即移除表中的冗余记录。

Example

在以下查询中,我们正在从 CUSTOMERS 表中检索 ADDRESS 和 SALARY 列的不同组合,并按 ADDRESS 列升序对结果集进行排序。

SELECT DISTINCT ADDRESS, SALARY FROM CUSTOMERS ORDER BY ADDRESS;

Output

正如我们从下面的输出中看到的,重复值“Hyderabad”和“Vishakapatnam”在结果集中出现了两次,这是因为 Hyderabad 和 Vishakapatnam 与 SALARY 的每个组合都是唯一的。

DISTINCT with NULL values

如果特定列中存在 NULL 值,MySQL DISTINCT 将把它们当作唯一值并包含在结果集中。

Example

此处,我们正在使用以下查询返回客户的唯一薪水:

SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;

Output

执行给定的程序后,输出如下所示:

Distinct Clause Using a Client Program

除了使用 MySQL 查询从表中提取不同的记录外,你还可以使用客户端程序执行 DISTINCT 操作。

Syntax

以下是此操作在各种编程语言中的语法 −

Example

以下是这些程序 −