SQL Server Select Distinct子句

在本教程中,将学习如何使用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值的列,则DISTINCT子句将仅保留一个NULL并消除其它的NULL值。 换句话说,DISTINCT子句将所有NULL值视为相同的值。

SQL Server SELECT DISTINCT示例

为了方便演示,将使用示例数据库中的customers表。表的结构如下所示:

A. DISTINCT一个字段的示例

以下语句返回customers表中所有客户所在的所有城市:

SELECT
    city
FROM
    sales.customers
ORDER BY
    city;

执行上面查询语句,得到以下结果 -

从查询输出中可以清楚地看到,城市是重复的。
要获取不同的城市唯一值,请按如下方式添加DISTINCT关键字:

SELECT DISTINCT
    city
FROM
    sales.customers
ORDER BY
    city;

执行上面查询语句,得到以下结果:

现在,查询为每组重复项返回一个不同的值。也就是说它从结果集中删除了所有重复的城市。

B. DISTINCT多列示例

以下语句查找所有客户的不同城市和州。

SELECT DISTINCT
    city,
    state
FROM
    sales.customers

执行以下查询语句,得到以下结果 -

在此示例中,语句使用citystate列中的值组合来评估重复项。

C. DISTINCT带有null值示例

以下示例查找客户的不同(唯一)电话号码:

SELECT DISTINCT
    phone
FROM
    sales.customers
ORDER BY
    phone;

执行上面查询语句,得到以下结果:

在此示例中,使用DISTINCT子句在phone列上,结果中删除其他NULL仅保留一个NULL值。

在本教程中,学习了如何使用SQL Server SELECT DISTINCT子句检索指定列列表中的不同值。


上一篇: SQL Server数据查询 下一篇: SQL Server连接表