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

【SQL】UNION 与 UNION ALL 的区别

在 SQL 中,UNIONUNION ALL 都用于将两个或多个结果集合并为一个结果集,但它们在处理重复数据方面有显著区别。以下是它们的详细区别:

1. UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并自动去除结果集中重复的行。

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
  • 去重: UNION 自动去除重复的行,只返回唯一的行。
  • 性能: 由于需要进行去重操作,UNION 的性能相对较低,尤其是在大数据集上。
  • 用途: 当需要合并结果集并且不希望结果集中包含重复的行时使用。

2. UNION ALL

UNION ALL 操作符用于合并两个或多个 SELECT 语句的结果集,不去除重复的行,返回所有结果,包括重复的行。

SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
  • 去重: UNION ALL 不去除重复的行,返回所有结果。
  • 性能: 由于不进行去重操作,UNION ALL 的性能相对较高。
  • 用途: 当需要合并结果集并且希望包含所有行,包括重复的行时使用。

示例代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;public class UnionExample {private static final String JDBC_URL = "jdbc:mysql://localhost:3306/yourdatabase";private static final String JDBC_USER = "yourusername";private static final String JDBC_PASSWORD = "yourpassword";public static void main(String[] args) {try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);Statement stmt = conn.createStatement()) {// 示例数据准备String createTableSQL1 = "CREATE TABLE IF NOT EXISTS table1 (id INT, name VARCHAR(255))";String createTableSQL2 = "CREATE TABLE IF NOT EXISTS table2 (id INT, name VARCHAR(255))";stmt.executeUpdate(createTableSQL1);stmt.executeUpdate(createTableSQL2);String insertDataSQL1 = "INSERT INTO table1 (id, name) VALUES (1, 'Alice'), (2, 'Bob')";String insertDataSQL2 = "INSERT INTO table2 (id, name) VALUES (2, 'Bob'), (3, 'Charlie')";stmt.executeUpdate(insertDataSQL1);stmt.executeUpdate(insertDataSQL2);// 使用 UNIONString unionSQL = "SELECT id, name FROM table1 UNION SELECT id, name FROM table2";try (ResultSet rs = stmt.executeQuery(unionSQL)) {System.out.println("Results of UNION:");while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");System.out.println("ID: " + id + ", Name: " + name);}}// 使用 UNION ALLString unionAllSQL = "SELECT id, name FROM table1 UNION ALL SELECT id, name FROM table2";try (ResultSet rs = stmt.executeQuery(unionAllSQL)) {System.out.println("Results of UNION ALL:");while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");System.out.println("ID: " + id + ", Name: " + name);}}// 清理示例数据stmt.executeUpdate("DROP TABLE IF EXISTS table1");stmt.executeUpdate("DROP TABLE IF EXISTS table2");} catch (SQLException e) {e.printStackTrace();}}
}

在上述代码中,演示了如何使用 JDBC 执行 UNIONUNION ALL 操作。请根据需要调整数据库连接字符串、用户名、密码和 SQL 语句。

总结

  • UNION: 合并结果集并去除重复的行。
  • UNION ALL: 合并结果集并保留所有重复的行。
http://www.lryc.cn/news/379436.html

相关文章:

  • 分类判决界面---W-H、H-K算法
  • Python基础教程(三十):math模块
  • 你只是重新发现了一些东西
  • 【英伟达GPU的挑战者】Groq—AI大模型推理的革命者
  • Python学习路线
  • C++ std::forward()
  • 常见的8种排序(含代码):插入排序、冒泡排序、希尔排序、快速排序、简单选择排序、归并排序、堆排序、基数排序
  • go语言day2
  • vue echarts画多柱状图+多折线图
  • cesium for unity 打包webgl失败,提示不支持
  • python开发基础——day7 序列类型方法
  • 用java写一个二叉树翻转
  • 数学建模系列(3/4):典型建模方法
  • AI播客下载:Machine Learning Street Talk(AI机器学习)
  • 鱼缸补水器工作原理是什么
  • Linux-Tomcat服务配置到系统服务
  • Python抓取高考网图片
  • Vue配置项data
  • 在IDEA 2024.1.3 (Community Edition)中创建Maven项目
  • 动手学深度学习(Pytorch版)代码实践 -卷积神经网络-28批量规范化
  • Apache Paimon系列之:Append Table和Append Queue
  • Vue使用vue-esign实现在线签名 加入水印
  • 与码无关:分数限制下,选好专业还是选好学校?
  • 什么是负载均衡技术?
  • 存在重复元素Ⅱ python3
  • 【CV炼丹师勇闯力扣训练营 Day13:§6二叉树1】
  • 代码随想录算法训练营第46天 [ 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III ]
  • 基于IDEA的Maven简单工程创建及结构分析
  • 解锁空间数据奥秘:ArcGIS Pro与Python双剑合璧,处理表格数据、矢量数据、栅格数据、点云数据、GPS数据、多维数据以及遥感云平台数据等
  • 后端路线指导(4):后端春招秋招经验分享