7.5 SQL Server查询去重
SQL Server SELECT DISTINCT
目录
SELECT DISTINCT简介
有时,您可能只希望在表的指定列中获取不同的值。为此,可以使用SELECT DISTINCT子句:
| SELECT DISTINCT | |
| column_name | |
| FROM | |
| table_name; |
查询只返回指定列中的不同值。换句话说,它从结果集中删除列中的重复值。
如果使用多个列:
| SELECT DISTINCT | |
| column_name1, | |
| column_name2 , | |
| ... | |
| FROM | |
| table_name; |
查询使用SELECT列表中所有列中的值组合来计算唯一性。
如果将DISTINCT子句应用于具有NULL的列,DISTINCE子句只保留一个NULL并删除其他为NULL的值。换句话说,DISTINCT子句将所有空NULL视为相同的值。
SELECT DISTINCT示例
用于演示,假设数据库中有如下客户(customers)表:

A) DISTINCT单列
以下语句返回customers表中所有客户的所有城市:
| SELECT | |
| city | |
| FROM | |
| sales.customers | |
| ORDER BY | |
| city; |

从输出中可以清楚地看到,城市是重复的。
要获得不同的城市,使用DISTINCT关键字:
| SELECT DISTINCT | |
| city | |
| FROM | |
| sales.customers | |
| ORDER BY | |
| city; |

city列去重成功
B) DISTINCT多列
此语句返回所有客户的所有城市和州:
| SELECT | |
| city, | |
| state | |
| FROM | |
| sales.customers | |
| ORDER BY | |
| city, | |
| state; |

以下语句查找所有客户的不同城市和州.
| SELECT DISTINCT | |
| city, | |
| state | |
| FROM | |
| sales.customers |

在本例中,语句使用city和state列中的值组合来计算重复项。即这两列值同时都相同才算重复项
C) DISTINCT NULL值
以下示例查找客户的不同电话号码:
| SELECT DISTINCT | |
| phone | |
| FROM | |
| sales.customers | |
| ORDER BY | |
| phone; |

在本例中,DISTINCT子句在phone列中仅保留一个NULL,并删除了其他NULL。
DISTINCT与GROUP BY
下面的语句使用GROUP BY子句从sales.customers表中返回不同的城市以及州和邮政编码:
| SELECT | |
| city, | |
| state, | |
| zip_code | |
| FROM | |
| sales.customers | |
| GROUP BY | |
| city, state, zip_code | |
| ORDER BY | |
| city, state, zip_code |
下图显示了部分输出:

它相当于使用DISTINCT运算符的以下查询:
| SELECT | |
| DISTINCT | |
| city, | |
| state, | |
| zip_code | |
| FROM | |
| sales.customers; |
DISTINCT和GROUP BY子句都通过删除重复项来减少结果集中返回的行数。
但是,如果要对一列或多列应用聚合函数,则应使用GROUP BY子句。
漫思
浙公网安备 33010602011771号