SQL DISTINCT关键字
SQL DISTINCT关键字
SQL DISTINCT 关键字与SELECT语句一起使用,从表中获取唯一记录。
当需要避免特定列/表中的重复值时,我们使用DISTINCT关键字与SELECT语句。当使用DISTINCT关键字时,SELECT语句仅返回表中可用的唯一记录。
SQL DISTINCT关键字可与SELECT语句关联,从单个或多个列/表中获取唯一记录。
语法
SQL DISTINCT关键字的基本语法如下:
其中, 列1,列2, 等等是我们想要从中检索唯一或不同值的列;而 表名 表示包含数据的表的名称。
对单列使用DISTINCT关键字
我们可以在单个列上使用DISTINCT关键字来检索该列中的所有唯一值,即去除重复项。这常用于获取特定列中唯一值的摘要或消除冗余数据。
示例
假设我们使用CREATE TABLE语句在MySQL数据库中创建了一个名为CUSTOMERS的表,如下所示:
以下查询使用INSERT语句将值插入到此表中 –
得到的表格如下所示:
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的值 –
这将产生以下结果。在这里,您可以观察到薪水值 2000 出现了两次− SALARY
现在,让我们在上面的SELECT查询中使用 DISTINCT 关键字,看看结果-
输出
这将产生以下结果,其中我们没有任何重复的条目 –
DISTINCT关键字在多列上的使用
我们也可以在多列上使用DISTINCT关键字来检索所有这些列中的唯一值的组合。这通常用于获取多列中唯一值的摘要,或者用于消除冗余数据。
示例
在下面的查询中,我们使用DISTINCT关键字来检索客户年龄和工资的所有唯一组合的列表 –
输出
尽管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关键字的语法如下所示:
在下面的查询中,我们正在检索客户不同年龄的数量 –
输出
以下是产生的结果−
DISTINCT 关键字与 NULL 值
在 SQL 中,当列中存在 NULL 值时,DISTINCT 会将它们视为唯一值,并将其包含在结果集中。
示例
首先,让我们更新 CUSTOMERS 表中的两条记录,并将它们的薪资值修改为 NULL
结果的 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 |
现在,我们使用以下查询检索客户的不同薪资 –
输出
以下是上述查询的输出 –