当前位置: 首页 > news >正文

SQL的UNION用法大全介绍

SQL的UNION用法大全介绍

  • SQL UNION用法大全
    • 基本语法
    • UNION与UNION ALL的区别
    • UNION使用规则
    • 常见用法示例
      • 1. 基本合并查询
      • 2. 保留重复记录
      • 3. 多表合并
      • 4. 带WHERE条件的UNION
      • 5. 不同列名的合并
      • 6. 与ORDER BY结合使用
      • 7. 使用UNION实现复杂逻辑
    • 高级用法
      • 1. 使用UNION实现PIVOT效果
      • 2. 动态SQL与UNION结合
      • 3. 使用UNION ALL计算总计行
    • 性能优化建议
    • 注意事项

SQL UNION用法大全

UNION是SQL中用于合并多个SELECT语句结果集的操作符,下面详细介绍UNION的各种用法和注意事项。

基本语法

SELECT column1, column2, ...
FROM table1
UNION [ALL]
SELECT column1, column2, ...
FROM table2;

UNION与UNION ALL的区别

特性UNIONUNION ALL
去重自动去除重复行保留所有行,包括重复行
性能较慢(需要排序和去重)较快(直接合并结果)
结果排序结果默认按第一列升序排列结果顺序不确定

UNION使用规则

  1. 列数相同:所有SELECT语句必须有相同数量的列
  2. 数据类型兼容:对应列的数据类型必须兼容
  3. 列名规则:结果集使用第一个SELECT语句的列名
  4. ORDER BY位置:ORDER BY子句只能出现在最后一个SELECT语句后

常见用法示例

1. 基本合并查询

-- 合并两个表的数据(去重)
SELECT product_id, product_name FROM products_2022
UNION
SELECT product_id, product_name FROM products_2023;

2. 保留重复记录

-- 合并两个表的数据(保留重复)
SELECT customer_id FROM orders_jan
UNION ALL
SELECT customer_id FROM orders_feb;

3. 多表合并

-- 合并三个表的数据
SELECT employee_id, name FROM hr_employees
UNION
SELECT employee_id, name FROM sales_employees
UNION
SELECT employee_id, name FROM it_employees;

4. 带WHERE条件的UNION

-- 合并带条件的查询
SELECT product_id, price FROM products WHERE price > 100
UNION
SELECT product_id, price FROM discounted_products WHERE discount > 0.2;

5. 不同列名的合并

-- 列名不同时,使用第一个查询的列名
SELECT id AS user_id, name FROM users
UNION
SELECT customer_id, customer_name FROM customers;

6. 与ORDER BY结合使用

-- 对整个结果集排序
SELECT product_id, product_name FROM domestic_products
UNION
SELECT product_id, product_name FROM imported_products
ORDER BY product_name;

7. 使用UNION实现复杂逻辑

-- 使用UNION实现OR逻辑
SELECT * FROM employees WHERE department = 'IT'
UNION
SELECT * FROM employees WHERE salary > 8000;

高级用法

1. 使用UNION实现PIVOT效果

-- 将行转为列
SELECT 'Total Sales' AS metric, SUM(amount) AS value FROM sales
UNION
SELECT 'Average Sale', AVG(amount) FROM sales
UNION
SELECT 'Max Sale', MAX(amount) FROM sales;

2. 动态SQL与UNION结合

-- 根据不同条件动态构建UNION查询
DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM table1 WHERE condition1';
IF @param = 1SET @sql = @sql + ' UNION SELECT * FROM table2 WHERE condition2';
EXEC sp_executesql @sql;

3. 使用UNION ALL计算总计行

-- 在报表中添加总计行
SELECT product_id, SUM(quantity) AS total_quantity
FROM order_details
GROUP BY product_id
UNION ALL
SELECT 'TOTAL' AS product_id, SUM(quantity) AS total_quantity
FROM order_details;

性能优化建议

  1. 尽量使用UNION ALL:除非确实需要去重,否则使用UNION ALL性能更好
  2. 限制结果集大小:在UNION前先用WHERE过滤数据
  3. 索引优化:确保UNION涉及的列有适当索引
  4. 考虑使用临时表:对于复杂UNION操作,可先存入临时表再处理
  5. 避免过度使用:UNION操作较耗资源,应考虑是否有更好的替代方案

注意事项

  1. UNION操作可能会改变结果顺序,除非显式使用ORDER BY
  2. 某些数据库对UNION结果的行数有限制
  3. 在事务中使用UNION时要注意锁定问题
  4. 不同数据库对UNION的实现可能有细微差别

通过合理使用UNION和UNION ALL,可以有效地合并多个查询结果,满足复杂的数据分析需求。


文章转载自:

http://g03Pidw7.ntwxt.cn
http://8gDJAtDk.ntwxt.cn
http://aaoOyj4S.ntwxt.cn
http://kfAMCLZx.ntwxt.cn
http://W9LA2jLZ.ntwxt.cn
http://zxLL5U9P.ntwxt.cn
http://CPg0EkZA.ntwxt.cn
http://jzSjxEuC.ntwxt.cn
http://0Xqio2AP.ntwxt.cn
http://2z5yeVk8.ntwxt.cn
http://0wbCAa8q.ntwxt.cn
http://FoIRv6Ue.ntwxt.cn
http://RPd6RxTb.ntwxt.cn
http://JjC7Pl03.ntwxt.cn
http://ZLV76XAR.ntwxt.cn
http://67Ad0quq.ntwxt.cn
http://kDC8myIw.ntwxt.cn
http://laWaxLFt.ntwxt.cn
http://nW720WMH.ntwxt.cn
http://n4tHnnQZ.ntwxt.cn
http://AQ5yWEtO.ntwxt.cn
http://Jet86lr9.ntwxt.cn
http://TCFxQqsi.ntwxt.cn
http://nQxuB56Y.ntwxt.cn
http://WiPO319d.ntwxt.cn
http://Z43iaHBY.ntwxt.cn
http://G5Cdb4Gw.ntwxt.cn
http://7UYPS0iO.ntwxt.cn
http://vzUwPe7e.ntwxt.cn
http://96WnfJpP.ntwxt.cn
http://www.dtcms.com/a/388638.html

相关文章:

  • 从Web原生到高性能:如何优化企业数据库管理工具
  • 基于python新能源汽车数据分析可视化系统 懂车帝 Scrapy爬虫 Django框架 Vue框架 大数据项目(源码+文档)✅
  • 线性回归和 softmax 回归
  • mysql远程访问连接设置
  • 《WINDOWS 环境下32位汇编语言程序设计》学习17章 PE文件(2)
  • Linux网络编程:从协议到实战
  • Vector 底层实现详解
  • OpenShift Virtualization - 虚机存储的相关概念 DataVolume、CDI 和 StorageProfile
  • 2025年Web自动化测试与Selenium面试题收集:从基础到进阶的全方位解析
  • pytorch中的FSDP
  • 贪心算法与材料切割问题详解
  • 2. 结构体
  • MySQL 核心操作:多表联合查询与数据库备份恢复
  • vue3学习日记(十四):两大API选型指南
  • 微信支付回调成功通知到本地
  • 量化交易 - Simple Regression 简单线性回归(机器学习)
  • Kubernetes控制器详解:从Deployment到CronJob
  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化
  • 【C语言】冒泡排序算法解析与实现
  • [GESP202309 三级] 进制判断
  • 【C++】const和static的用法
  • 箭头函数{}规则,以及隐式返回
  • brain.js构建训练神经网络
  • 开学季高效学习与知识管理技术
  • C++STL与字符串探秘
  • 【面试题】- 使用CompletableFuture实现多线程统计策略工厂模式
  • 打工人日报#20250917