微软官方发布:SQL SELECT DISTINCT语句权威教程与最佳实践指南

文章导读
SELECT DISTINCT语句用于返回唯一不同的值。它从一组可能包含重复值的行中操作,并根据SELECT列表中的所有表达式返回唯一行。语法:SELECT DISTINCT列1,列2 FROM表名;示例:SELECT DISTINCT city FROM customers;这将返回客户表中所有不同的城市名称。
📋 目录
  1. 基本用法
  2. 与聚合函数结合
  3. 性能考虑
  4. 最佳实践
  5. 常见错误
  6. 示例代码
A A

SELECT DISTINCT语句用于返回唯一不同的值。它从一组可能包含重复值的行中操作,并根据SELECT列表中的所有表达式返回唯一行。语法:SELECT DISTINCT列1,列2 FROM表名;示例:SELECT DISTINCT city FROM customers;这将返回客户表中所有不同的城市名称。

基本用法

使用 SELECT DISTINCT 从一组可能包含重复值的行中返回唯一值。 DISTINCT 从 SELECT 列表中的所有表达式返回唯一行。要在 SELECT DISTINCT 中使用列别名,必须将列别名放在 GROUP BY 子句中。示例:SELECT DISTINCT FirstName, LastName FROM Person.Person ORDER BY FirstName;

与聚合函数结合

SELECT DISTINCT 可以与聚合函数如 COUNT 结合使用,以计算唯一值的数量。示例:SELECT COUNT(DISTINCT column_name) FROM table_name;这返回指定列中唯一值的总数。

微软官方发布:SQL SELECT DISTINCT语句权威教程与最佳实践指南

性能考虑

SELECT DISTINCT 可能比不带它的查询慢得多,因为它需要对结果进行排序并删除重复项。大型表上避免不必要的使用 DISTINCT。对于大数据集,考虑使用 GROUP BY 作为替代,因为它可能更高效。

最佳实践

仅在真正需要唯一值时使用 SELECT DISTINCT。优先考虑 GROUP BY 来实现去重,因为它允许额外的聚合。确保索引覆盖 DISTINCT 列以优化性能。测试查询计划以验证效率。

常见错误

不要在包含浮点数列的查询中使用 SELECT DISTINCT,因为浮点精度问题可能导致意外重复。避免在 SELECT DISTINCT 上使用 *,因为它包括所有列,可能导致不必要的计算。

微软官方发布:SQL SELECT DISTINCT语句权威教程与最佳实践指南

示例代码

假设有一个 Sales 表:SELECT DISTINCT Country FROM Sales WHERE Year = 2020 ORDER BY Country;结果将列出2020年销售的唯一国家。

FAQ
Q: SELECT DISTINCT 和 GROUP BY 有什么区别?
A: SELECT DISTINCT 返回唯一行,而 GROUP BY 用于分组并允许聚合函数;DISTINCT 隐式分组所有列。
Q: SELECT DISTINCT 性能如何?
A: 它涉及排序,可能慢;使用索引和 GROUP BY 优化。
Q: 能否在子查询中使用 SELECT DISTINCT?
A: 可以,例如 SELECT * FROM table WHERE id IN (SELECT DISTINCT id FROM other_table);
Q: DISTINCT ON 在 SQL Server 中可用吗?
A: 不,SQL Server 不支持 PostgreSQL 风格的 DISTINCT ON;使用 ROW_NUMBER() 替代。