Sql 简明教程
SQL - DISTINCT Keyword
The SQL DISTINCT Keyword
SQL DISTINCT 关键字与 SELECT 语句一起使用,用于从表中获取唯一记录。
当需要避免任何特定列/表中现有的重复值时,我们对 SELECT 语句使用 DISTINCT 关键字。当我们使用 DISTINCT 关键字时,SELECT 语句只返回表中可用的唯一记录。
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;
DISTINCT Keyword on Multiple Columns
我们还可以对多列使用 DISTINCT 关键字,以获取跨这些列的所有唯一值的组合。此方法通常用于获取多列中唯一值汇总,或者消除冗余数据。
DISTINCT Keyword with COUNT() Function
COUNT() 函数用于获取 SELECT 查询返回的记录数。我们需要将一个表达式传递给此函数,以便 SELECT 查询返回满足指定表达式条件的记录数。
如果我们将 DISTINCT 关键字作为表达式传递给 COUNT() 函数,它将返回表中某一列中的唯一值数。
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;