在 Oracle 中,DISTINCT 是一个非常常用的关键字,用于从查询结果中去除重复的行。它能够帮助你仅返回唯一(非重复)的数据行。DISTINCT 通常用于 SELECT 语句中,用来过滤掉相同的数据行。

基本语法:

SELECT DISTINCT column1, column2, ...
FROM table_name;

用法详解:

  1. 去除单列中的重复值
    当我们仅对某一列数据去重时,可以使用 DISTINCT 关键字来保证返回的结果中该列的值是唯一的。SELECT DISTINCT column_name FROM table_name; 例子SELECT DISTINCT department_id FROM employees; 该查询会返回 employees 表中 department_id 列的唯一值,去除了重复的部门 ID。
  2. 去除多列中的重复值
    如果需要从多个列中去重,那么 DISTINCT 会考虑所有列的组合。也就是说,只有在所有列的组合值都相同的情况下,才认为是重复。SELECT DISTINCT column1, column2 FROM table_name; 例子SELECT DISTINCT department_id, job_id FROM employees; 该查询会返回 employees 表中 department_id 和 job_id 列的所有唯一组合。例如,如果某个部门的多个员工拥有相同的职位,这个查询会把这些重复的组合去掉,只返回每个部门和职位组合的唯一值。
  3. DISTINCT 与 COUNT 配合使用
    DISTINCT 也可以与聚合函数(如 COUNT)一起使用,来统计唯一值的数量。SELECT COUNT(DISTINCT column_name) FROM table_name; 例子SELECT COUNT(DISTINCT department_id) FROM employees; 该查询会返回 employees 表中唯一的部门 ID 数量,不会重复计算相同的部门。
  4. DISTINCT 在与其他 SQL 子句配合时的行为
    • 与 ORDER BY 一起使用DISTINCT 会去重结果中的重复值,但并不会影响 ORDER BY 排序的行为。SELECT DISTINCT department_id FROM employees ORDER BY department_id;
    • 与 GROUP BY 一起使用DISTINCT 会优先去除重复值,GROUP BY 会对数据进行分组处理。通常两者很少直接同时使用,但在某些查询中可以配合使用。SELECT department_id, COUNT(DISTINCT job_id) FROM employees GROUP BY department_id;

注意事项:

  • DISTINCT 会影响查询的性能,因为在执行过程中,Oracle 需要去检查所有行,删除重复的记录。这可能会增加数据库的负担,尤其是在数据量较大的情况下。
  • DISTINCT 是对整行数据进行去重的,不仅仅是单个列的去重。如果你选择了多列作为输出字段,DISTINCT 会基于所有列的值去重,而不是只针对某一列。

总结

  • DISTINCT 主要用于 去除查询结果中的重复行
  • 可以单列去重,也可以多列联合去重
  • 性能开销:使用 DISTINCT 可能会影响查询效率,尤其是大数据量时。
  • 在使用 聚合函数 时,可以与 COUNT 等函数一起,统计唯一值的数量。

希望这些示例能帮助你理解 DISTINCT 的用法。如果你有更具体的使用场景,欢迎提供详细信息,我可以进一步帮助你!