【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.mzph.cn/news/857606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 学习笔记 PropertyChangedEventHandler、 =>、DependencyObject、DataContext

在C#中,PropertyChangedEventHandler 和 PropertyChanged 常常与 INotifyPropertyChanged 接口一起使用,这是实现数据绑定和通知机制的关键部分,尤其在WPF (Windows Presentation Foundation) 或其他支持数据绑定的UI框架中。 PropertyChang…

怎样去掉卷子上的答案并打印

当面对试卷答案的问题时,一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片,然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心,但它确实为我们提供了一个可行的解决途径。 然…

【2024.6.22】今日科技时事:科技前沿大事件

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

如何避免vue的url中使用hash符号?

目录 1. 安装 Vue Router 2. 配置 Vue Router 使用 history 模式 3. 更新 main.js 4. 配置服务器以支持 history 模式(此处需要仔细测试) a. Nginx 配置 b. Apache 配置 5. 部署并测试 总结 在 Vue.js 项目中,避免 URL 中出现 # 符号的…

docker-compose功能、操作

文章目录 前言主要功能基本用法 前言 docker-compose 是一个用于定义和运行多容器 Docker 应用的工具。它使用一个 YAML 文件(通常命名为 docker-compose.yml)来配置应用的服务、网络和卷等属性。通过 docker-compose,你可以利用一个单一的命…

YAML 入门教程

YAML 是 "YAML Aint a Markup Language"(YAML 不是一种标记语言)的递归缩写,是一种人类可读的完整的数据序列化语言。YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言&#xf…

宝塔部署GeoServer教程

前期准备:下载geoserver 直接用我上传的geoserver或者是去官网下https://geoserver.org/release/stable/ 压缩包的geoserver版本是:2.25.1 jdk要求版本是:jdk11以上 tomcat版本:可选8或者9,建议用9 windows选择Window…

linux./xxx.py :Command not found

从windows传入linux系统中的py文件,在运行时出现了如标题所示的错误 第一行#!/bin/python3 但是却无法使用./xxx.py运行,通过一番调试,发现 windows的换行符与linux的换行符不一致导致了错误的发生 如何解决这个问题,使用dos2unix…

视频监控统一管理平台LntonCVS安防视频监控系统视频汇聚方案

LntonCVS平台最初被设计为一个以视频汇聚为核心的平台。那么,什么是视频汇聚平台,以及它是如何处理视频资源的呢?简单来说,视频汇聚平台能够从不同的视频源(如直播和点播)收集、整合和展示视频内容。以下是…

春天,快速恢复能量的10件小事(不妨试试)

春天快速恢复能量的十件小事,不妨试试随着天气回暖,万物都在恢复生机。 只是很多朋友感慨自己似乎总有些能量不足,没干什么重活累活,但觉得浑身疲乏,精神状态很低迷,不仅容易走神,而且记忆力也在…

Docker可视化web工具

docker run --restart always --name docker.ui -d -v /var/run/docker.sock:/var/run/docker.sock -p 8989:8999 joinsunsoft/docker.ui #--restart always:重启策略,只要关闭就会重启 http://192.168.10.51:8989 账号:ginghan 密码&#xf…

IOS Swift 从入门到精通: 函数,参数和异常

文章目录 编写函数接受参数返回值参数标签省略参数标签默认参数可变参数函数编写抛出函数运行异常函数输入输出参数总结 编写函数 函数让我们可以重复使用代码,这意味着我们可以编写一个函数来做一些有趣的事情,然后从很多地方运行该函数。重复代码通常…

Java匿名类

Java 匿名类是一种特殊的内部类,它没有名字,并且通常用来简化代码实现,尤其是在实现接口或者抽象类的实例时。匿名类可以在实例化时定义其行为,而不需要创建单独的类文件。 匿名类的特点 没有名字:匿名类是没有名字的…

写代码必用字体

下载链接 字体下载链接 使用情况/截图 软件:DEV-CPP 系统:Win10专业版 自带判等、大于、小于等符号的专属字体

计算机组成原理网课笔记2

存储系统基本概念 CPU:运算器控制器。​ 作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。 ​ 主存储器的基本组成 半导体元件的原理 在电容上面的金属板加一个5V的高电平,产生电压差,电容里面的电荷就会开…

计算机系统基础实训五—CacheLab实验

实验目的与要求 1、让学生更好地应用程序性能的优化方法; 2、让学生更好地理解存储器层次结构在程序运行过程中所起的重要作用; 3、让学生更好地理解高速缓存对程序性能的影响; 实验原理与内容 本实验将帮助您了解缓存对C程序性能的影响…

带你学习Mybatis之MappedStatement

mybatis之MappedStatement MappedStatement是保存mapper.xml的一个节点(select|insert|delete|update),包括许多配置的sql、sql的id、缓存信息、resultMap、parameterType、resultType、languageDriver等重要配置内容 public final class MappedStatement { privat…

【面向对象】复习(二)

内存对齐 class A{ static int a; } int main(){ A obj; cout<<sizeof(obj); } 在你的代码中&#xff0c;class A 包含一个静态成员变量 a。静态成员变量不属于类的任何特定实例&#xff0c;而是属于整个类。因此&#xff0c;在计算类的实例大小时&#xff0c;静态…

如何在 Ubuntu 14.04 上使用 HAProxy 实现 SSL 终止

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 HAProxy&#xff0c;全称高可用代理&#xff0c;是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案&#xff0c;可在 Linu…

2024.6.22 刷题总结

2024.6.22 **每日一题** 2663.字典序最小的美丽字符串&#xff0c;该题考察了回文串的性质&#xff0c;一个回文串去掉首尾字母后&#xff0c;仍然是回文串&#xff0c;可以根据这一性质得到如果没有长度为m-2的回文串&#xff0c;那么就不会有长度为m的回文串.由答案取的是最小…