Sql 简明教程

SQL - DISTINCT Keyword

The SQL DISTINCT Keyword

SQL DISTINCT 关键字与 SELECT 语句一起使用,用于从表中获取唯一记录。

当需要避免任何特定列/表中现有的重复值时,我们对 SELECT 语句使用 DISTINCT 关键字。当我们使用 DISTINCT 关键字时,SELECT 语句只返回表中可用的唯一记录。

Syntax

SQL DISTINCT 关键字的基本语法如下 −

SELECT DISTINCT column1, column2,.....columnN
FROM table_name;

其中 column1, column2, 等是我们希望从中获取唯一或不同值的目标列; table_name 表示包含数据的表的名称。

DISTINCT Keyword on Single Columns

我们可以对一列使用 DISTINCT 关键字来获取该列中的所有唯一值,即删除重复项。此方法通常用于获取特定列中唯一值汇总或者消除冗余数据。

Example

假设我们已使用 CREATE TABLE 语句在 MySQL 数据库中创建了一个名为 CUSTOMERS 的表,如下所示 −

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 语句将值插入此表:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

获得的表如下所示:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

首先,让我们使用 SELECT 查询从 CUSTOMERS 表中获取 SALARY 值 −

SELECT SALARY FROM CUSTOMERS ORDER BY SALARY;

这将产生以下结果。在这里,您可以看到 SALARY 值 2000 出现了两次 −

SALARY

1500.00

2000.00

2000.00

4500.00

6500.00

8500.00

10000.00

现在,我们对上面的 SELECT 查询使用 DISTINCT 关键字,然后查看结果 −

SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;

Output

这将产生以下结果,其中没有任何重复的条目 −

SALARY

1500.00

2000.00

4500.00

6500.00

8500.00

10000.00

DISTINCT Keyword on Multiple Columns

我们还可以对多列使用 DISTINCT 关键字,以获取跨这些列的所有唯一值的组合。此方法通常用于获取多列中唯一值汇总,或者消除冗余数据。

Example

在以下查询中,我们使用 DISTINCT 关键字获取客户年龄和工资的所有唯一值组合 −

SELECT DISTINCT AGE, SALARY FROM CUSTOMERS ORDER BY AGE;

Output

虽然 AGE 列在两个记录中具有值“25”,但“25”的每一个特定“工资”组合都是唯一的,因此两个行都包含在结果集中 −

AGE

SALARY

22

4500.00

23

2000.00

24

10000.00

25

1500.00

25

6500.00

27

8500.00

32

2000.00

DISTINCT Keyword with COUNT() Function

COUNT() 函数用于获取 SELECT 查询返回的记录数。我们需要将一个表达式传递给此函数,以便 SELECT 查询返回满足指定表达式条件的记录数。

如果我们将 DISTINCT 关键字作为表达式传递给 COUNT() 函数,它将返回表中某一列中的唯一值数。

Syntax

以下是在 COUNT() 函数中使用 DISTINCT 关键字的语法 −

SELECT COUNT(DISTINCT column_name)
FROM table_name WHERE condition;

其中, column_name 是要为其统计唯一值的列的名称; table_name 是包含此数据的表的名称。

Example

在下面该查询中,我们获取了不同客户年龄的数量 −

SELECT COUNT(DISTINCT AGE) as UniqueAge  FROM CUSTOMERS;

Output

以下是产生的结果:

UniqueAge

6

DISTINCT Keyword with NULL Values

在 SQL 中,当列中有 NULL 值时,DISTINCT 会将它们视为唯一值,并将它们包括在结果集中。

Example

首先,请允许我们更新 CUSTOMERS 表的两个记录,并将它们的工资值修改为 NULL

UPDATE CUSTOMERS SET SALARY = NULL WHERE ID IN(6,4);

得到的 CUSTOMERS 表如下 −

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

NULL

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

NULL

7

Muffy

24

Indore

10000.00

现在,我们使用以下查询检索客户的不同工资 −

SELECT DISTINCT SALARY FROM CUSTOMERS ORDER BY SALARY;

Output

以下是以上查询的输出:

SALARY

NULL

1500.00

2000.00

8500.00

10000.00