SQL的 DISTINCT 和 UNION:如何去重和合并查询结果

        在SQL中,DISTINCTUNION 都用于去重和合并查询结果,但它们的作用和使用方式有所不同。下面详细解释这两者:

1. DISTINCT

   DISTINCT 关键字用于去除查询结果中的重复行,确保每一行都是唯一的。它应用于SELECT语句中的列,意味着只会返回不同(唯一)的值

示例:

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

idnamedepartment
1AliceHR
2BobIT
3AliceHR
4CarolIT
5BobIT

你希望查询所有员工的唯一姓名,可以使用 DISTINCT

SELECT DISTINCT name
FROM employees;

结果

name
Alice
Bob
Carol

   DISTINCT 会去除重复的 name,只保留唯一的值。

用法进阶:

select distinct name,department 
from employees

        此用法会返回唯一的 (name, department) 组合。也就是说,只有当 name 和 department 的组合形式重复时,它们才会被去掉。

2. UNION

   UNION 用于合并两个或多个查询结果集,并自动去除重复行。它将每个查询的结果合并成一个最终的结果集,并排除重复的行

UNION 需要确保所有的 SELECT 语句返回的列数和列类型一致。其主要特点是:

  • 去重:合并后的结果会去掉重复的记录。
  • 顺序不保证UNION 的结果集中的行顺序不一定与原始查询的顺序一致。

示例:

假设有两个表,分别是 employees1employees2,它们的结构相同,且包含如下数据:

employees1:

idnamedepartment
1AliceHR
2BobIT

employees2:

idnamedepartment
3CarolHR
4AliceHR

你希望将这两个表中的 name 合并并去重:

SELECT name FROM employees1
UNION
SELECT name FROM employees2;

结果

name
Alice
Bob
Carol

        在这个例子中,UNION 将从 employees1employees2 表中取出 name 列的值,去掉重复的 Alice

3. UNION ALL

        如果你不希望去重,可以使用 UNION ALLUNION ALL 会将所有结果合并,无论是否有重复行。

示例:

SELECT name FROM employees1
UNION ALL
SELECT name FROM employees2;

结果

name
Alice
Bob
Carol
Alice

        在这个例子中,UNION ALL 保留了重复的 Alice,因此返回了所有的记录。

总结:

  • DISTINCT:用于在查询结果中去除重复的行,确保每一行是唯一的。适用于一个查询中去重。
  • UNION:用于合并多个查询结果,并去除重复的行。适用于合并来自不同查询的结果。
  • UNION ALL:与 UNION 类似,但不去重,保留所有行。

选择使用 DISTINCT 还是 UNION 取决于你需要的结果:是去重单一查询的结果,还是合并多个查询并去重。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

檐角小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值