目录

  1. UNION 的基本语法
  2. 使用 UNION 合并查询结果
  3. UNION ALLUNION 的区别
  4. 使用 ORDER BY 排序与 UNION
  5. 使用 LIMITUNION
  6. 注意事项和最佳实践
  7. 参考资料

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, ...: 各个查询的字段。
  • table1, table2: 要查询的表。
  • condition: 过滤条件。

使用 UNION 合并查询结果

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

示例:合并 userscustomers 表中的电子邮件地址

SELECT email FROM users
UNION
SELECT email FROM customers;

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


UNION ALLUNION 的区别

  • 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 排序返回 userscustomers 表中的电子邮件地址。

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


使用 LIMITUNION

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

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

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

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


注意事项和最佳实践

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

参考资料


如果你有更多关于 UNION 的问题,或者想要进一步讨论如何优化查询,随时告诉我!