跳到主要内容

SQL DISTINCT 关键字

在 SQL 中,DISTINCT 关键字用于从查询结果中去除重复的行。它可以帮助我们获取唯一的值,从而简化数据分析过程。对于初学者来说,理解 DISTINCT 的使用场景和方法是非常重要的。

什么是 DISTINCT?

DISTINCT 是 SQL 中的一个关键字,用于在查询结果中返回唯一的值。当我们从表中查询数据时,可能会遇到重复的行。使用 DISTINCT 可以确保结果集中每一行都是唯一的。

基本语法

sql
SELECT DISTINCT column1, column2, ...
FROM table_name;
  • column1, column2, ...:要查询的列名。
  • table_name:要查询的表名。

使用 DISTINCT 的示例

假设我们有一个名为 employees 的表,其中包含以下数据:

idnamedepartment
1AliceHR
2BobIT
3AliceHR
4CharlieIT
5BobIT

如果我们想要查询所有不同的部门名称,可以使用以下 SQL 语句:

sql
SELECT DISTINCT department
FROM employees;

输出结果:

department
HR
IT

可以看到,DISTINCT 去除了重复的部门名称,只返回了唯一的值。

DISTINCT 在多列中的应用

DISTINCT 也可以用于多列。在这种情况下,它会根据所有指定的列的组合来去除重复的行。

例如,如果我们想要查询所有不同的 namedepartment 组合,可以使用以下 SQL 语句:

sql
SELECT DISTINCT name, department
FROM employees;

输出结果:

namedepartment
AliceHR
BobIT
CharlieIT

在这个例子中,DISTINCT 去除了 namedepartment 组合中的重复行。

DISTINCT 与 NULL 值

需要注意的是,DISTINCT 也会将 NULL 值视为唯一值。如果查询的列中包含 NULL 值,DISTINCT 会保留一个 NULL 值。

例如,假设 employees 表中有一行的 department 列为 NULL

idnamedepartment
6DavidNULL

如果我们再次运行以下查询:

sql
SELECT DISTINCT department
FROM employees;

输出结果:

department
HR
IT
NULL

可以看到,NULL 值也被保留在结果集中。

实际应用场景

场景 1:统计唯一用户

假设我们有一个 orders 表,记录了用户的订单信息:

order_iduser_idorder_date
11012023-01-01
21022023-01-02
31012023-01-03
41032023-01-04

如果我们想要统计有多少个不同的用户下了订单,可以使用以下 SQL 语句:

sql
SELECT COUNT(DISTINCT user_id) AS unique_users
FROM orders;

输出结果:

unique_users
3

场景 2:获取唯一的产品类别

假设我们有一个 products 表,记录了产品的类别信息:

product_idcategory
1Electronics
2Clothing
3Electronics
4Furniture

如果我们想要获取所有不同的产品类别,可以使用以下 SQL 语句:

sql
SELECT DISTINCT category
FROM products;

输出结果:

category
Electronics
Clothing
Furniture

总结

DISTINCT 是 SQL 中一个非常有用的关键字,它可以帮助我们从查询结果中去除重复的行,从而获取唯一的值。无论是统计唯一用户、获取唯一的产品类别,还是处理包含 NULL 值的数据,DISTINCT 都能派上用场。

提示

在使用 DISTINCT 时,请注意它可能会影响查询的性能,尤其是在处理大量数据时。因此,在不需要去除重复行的情况下,尽量避免使用 DISTINCT

附加资源与练习

  1. 练习 1:在一个包含重复值的表中,尝试使用 DISTINCT 查询唯一的值。
  2. 练习 2:结合 COUNT 函数,统计某个列中的唯一值数量。
  3. 进一步学习:了解 GROUP BYHAVING 子句,它们与 DISTINCT 有相似的功能,但在某些场景下更为强大。

通过掌握 DISTINCT 关键字,你将能够更高效地处理 SQL 查询中的重复数据问题。继续练习并探索更多 SQL 的高级功能吧!