MySQL UNION 操作符

UNION 的基本语法

UNION 操作符用于将两个或多个 SELECT 查询的结果合并为一个结果集。所有的 SELECT 查询必须具有相同的列数,并且对应列的数据类型也应兼容。UNION 会去除重复的行(即执行去重操作),而 UNION ALL 则会返回所有结果,包括重复项。

基本语法:

SELECT column1, column2, ...
FROM table1
WHERE condition
UNION
SELECT column1, column2, ...
FROM table2
WHERE condition;

  • SELECT column1, column2, ...: 各个查询的字段。
  • table1table2: 要查询的表。
  • condition: 过滤条件。

使用 UNION 合并查询结果

UNION 操作符合并两个或多个 SELECT 查询的结果,去掉重复的记录。每个 SELECT 查询的列数必须相同。

示例:合并 users 和 customers 表中的电子邮件地址

SELECT email FROM users
UNION
SELECT email FROM customers;

此查询会返回 users 和 customers 表中的所有电子邮件地址,但去除重复的地址。


UNION ALL 与 UNION 的区别

  • UNION: 会去掉重复的记录。
  • UNION ALL: 不会去掉重复的记录,直接返回所有结果,包括重复项。

示例:使用 UNION 去重

SELECT email FROM users
UNION
SELECT email FROM customers;

此查询会返回不重复的电子邮件地址。

示例:使用 UNION ALL 保留重复项

SELECT email FROM users
UNION ALL
SELECT email FROM customers;

此查询会返回所有电子邮件地址,包括重复的。


使用 ORDER BY 排序与 UNION

UNION 操作符合并查询结果后,可以使用 ORDER BY 对整个结果集进行排序。注意,ORDER BY 语句应该放在所有 SELECT 查询的最后。

示例:合并两个查询并按 email 排序

SELECT email FROM users
UNION
SELECT email FROM customers
ORDER BY email;

此查询会按 email 排序返回 users 和 customers 表中的电子邮件地址。

注意:ORDER BY 排序会作用于整个结果集,而不是单个查询的结果。


使用 LIMIT 与 UNION

你可以使用 LIMIT 子句来限制合并结果的数量。LIMIT 语句应放在 UNION 查询的最后面。

示例:获取前 10 条电子邮件地址

SELECT email FROM users
UNION
SELECT email FROM customers
LIMIT 10;

此查询会合并 users 和 customers 表中的电子邮件地址,并仅返回前 10 条记录。


注意事项和最佳实践

  • 列数和数据类型: 使用 UNION 时,所有查询必须返回相同数量的列,并且对应列的数据类型应兼容。例如,如果一个查询返回 3 列,另一个查询也必须返回 3 列,且列的类型应该匹配。
  • 性能问题UNION 会去除重复的记录,这可能会影响查询性能,特别是在数据量较大的情况下。如果不需要去重,建议使用 UNION ALL,因为它不执行去重操作,执行速度更快。
  • ORDER BY 和 LIMIT: 当使用 ORDER BY 或 LIMIT 时,它们会应用于最终的合并结果,而不是每个单独的查询。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值