SQL DISTINCT关键字
SQL DISTINCT关键字
SQL DISTINCT 关键字与SELECT语句一起使用,从表中获取唯一记录。
当需要避免特定列/表中的重复值时,我们使用DISTINCT关键字与SELECT语句。当使用DISTINCT关键字时,SELECT语句仅返回表中可用的唯一记录。
SQL DISTINCT关键字可与SELECT语句关联,从单个或多个列/表中获取唯一记录。
语法
SQL DISTINCT关键字的基本语法如下:
SELECT DISTINCT column1, column2,.....columnN FROM table_name;
其中, 列1,列2, 等等是我们想要从中检索唯一或不同值的列;而 表名 表示包含数据的表的名称。
对单列使用DISTINCT关键字
我们可以在单个列上使用DISTINCT关键字来检索该列中的所有唯一值,即去除重复项。这常用于获取特定列中唯一值的摘要或消除冗余数据。
示例
假设我们使用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;
这将产生以下结果。在这里,您可以观察到薪水值 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;
输出
这将产生以下结果,其中我们没有任何重复的条目 –
SALARY
---
1500.00
2000.00
4500.00
6500.00
8500.00
10000.00
DISTINCT关键字在多列上的使用
我们也可以在多列上使用DISTINCT关键字来检索所有这些列中的唯一值的组合。这通常用于获取多列中唯一值的摘要,或者用于消除冗余数据。
示例
在下面的查询中,我们使用DISTINCT关键字来检索客户年龄和工资的所有唯一组合的列表 –
SELECT DISTINCT AGE, SALARY FROM CUSTOMERS ORDER BY AGE;
输出
尽管AGE列在两条记录中的值都是”25″,但是每个”25″与其特定的’salary’组合都是唯一的,因此结果集中包含了这两行记录。
AGE | SALARY |
---|---|
22 | 4500.00 |
23 | 2000.00 |
24 | 10000.00 |
25 | 1500.00 |
25 | 6500.00 |
27 | 8500.00 |
32 | 2000.00 |
使用COUNT()函数的DISTINCT关键字
COUNT()函数用于获取由SELECT查询返回的记录数量。我们需要传递一个表达式给这个函数,以便SELECT查询返回满足指定表达式的记录数。
如果我们将DISTINCT关键字作为一个表达式传递给COUNT()函数,它将返回表中某一列的唯一值数量。
语法
使用COUNT()函数的DISTINCT关键字的语法如下所示:
SELECT COUNT(DISTINCT column_name) FROM table_name WHERE condition;
在下面的查询中,我们正在检索客户不同年龄的数量 –
SELECT COUNT(DISTINCT AGE) as UniqueAge FROM CUSTOMERS;
输出
以下是产生的结果−
UniqueAge
---
6
DISTINCT 关键字与 NULL 值
在 SQL 中,当列中存在 NULL 值时,DISTINCT 会将它们视为唯一值,并将其包含在结果集中。
示例
首先,让我们更新 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;
输出
以下是上述查询的输出 –
SALARY
---
NULL
1500.00
2000.00
8500.00
10000.00