SQL中UNION與UNION ALL的區(qū)別小結(jié)
在 SQL 中,UNION
和 UNION ALL
都用于將兩個(gè)或多個(gè)結(jié)果集合并為一個(gè)結(jié)果集,但它們?cè)谔幚碇貜?fù)數(shù)據(jù)方面有顯著區(qū)別。以下是它們的詳細(xì)區(qū)別:
1. UNION
UNION
操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集,并自動(dòng)去除結(jié)果集中重復(fù)的行。
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;
- 去重:
UNION
自動(dòng)去除重復(fù)的行,只返回唯一的行。 - 性能: 由于需要進(jìn)行去重操作,
UNION
的性能相對(duì)較低,尤其是在大數(shù)據(jù)集上。 - 用途: 當(dāng)需要合并結(jié)果集并且不希望結(jié)果集中包含重復(fù)的行時(shí)使用。
2. UNION ALL
UNION ALL
操作符用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集,不去除重復(fù)的行,返回所有結(jié)果,包括重復(fù)的行。
SELECT column1, column2 FROM table1 UNION ALL SELECT column1, column2 FROM table2;
- 去重:
UNION ALL
不去除重復(fù)的行,返回所有結(jié)果。 - 性能: 由于不進(jìn)行去重操作,
UNION ALL
的性能相對(duì)較高。 - 用途: 當(dāng)需要合并結(jié)果集并且希望包含所有行,包括重復(fù)的行時(shí)使用。
示例代碼
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()) { // 示例數(shù)據(jù)準(zhǔn)備 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); // 使用 UNION String 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 ALL String 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); } } // 清理示例數(shù)據(jù) stmt.executeUpdate("DROP TABLE IF EXISTS table1"); stmt.executeUpdate("DROP TABLE IF EXISTS table2"); } catch (SQLException e) { e.printStackTrace(); } } }
在上述代碼中,演示了如何使用 JDBC 執(zhí)行 UNION
和 UNION ALL
操作。請(qǐng)根據(jù)需要調(diào)整數(shù)據(jù)庫連接字符串、用戶名、密碼和 SQL 語句。
總結(jié)
UNION
: 合并結(jié)果集并去除重復(fù)的行。UNION ALL
: 合并結(jié)果集并保留所有重復(fù)的行。
到此這篇關(guān)于SQL中UNION與UNION ALL的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)SQL UNION與UNION ALL區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別
- MySQL之union和union all的使用及區(qū)別說明
- 簡(jiǎn)單聊一聊SQL中的union和union?all
- 帶例子詳解Sql中Union和Union?ALL的區(qū)別
- MySQL系列理解運(yùn)用union(all)與limit及exists關(guān)鍵字教程
- 簡(jiǎn)單了解MySQL union all與union的區(qū)別
- MySQL中UNION與UNION ALL的基本使用方法
- 淺析mysql union和union all
- 5分鐘了解MySQL5.7中union all用法的黑科技
- SQL語句之Union和Union All的用法
相關(guān)文章
淺談SQL Server 2016里TempDb的進(jìn)步
tempdb:是連接到 SQL Server 實(shí)例的所有用戶都可用的全局資源,它保存所有臨時(shí)表,臨時(shí)工作表,臨時(shí)存儲(chǔ)過程,臨時(shí)存儲(chǔ)大的類型,中間結(jié)果集,表變量和游標(biāo)等。另外,它還用來滿足所有其他臨時(shí)存儲(chǔ)要求.2016-01-01MSSQL 2000 使用幫助(sql server簡(jiǎn)明教程)
這篇文章主要介紹了MSSQL 2000 使用幫助(sql server簡(jiǎn)明教程),需要的朋友可以參考下2017-04-04sql server 獲取系統(tǒng)時(shí)間的方法
Sql Server 中一個(gè)非常強(qiáng)大的日期格式化函數(shù),獲得當(dāng)前系統(tǒng)時(shí)間,GETDATE2012-11-11一個(gè)簡(jiǎn)單的SQL 行列轉(zhuǎn)換語句
在數(shù)據(jù)庫開發(fā)中經(jīng)常會(huì)遇到行列轉(zhuǎn)換的問題,比如下面的問題,部門,員工和員工類型三張表,我們要統(tǒng)計(jì)類似這樣的列表2009-08-08SQL Server 2005 創(chuàng)建簡(jiǎn)單的存儲(chǔ)過程--總結(jié)分析
本篇文章是對(duì)使用SQL Server 2005創(chuàng)建簡(jiǎn)單的存儲(chǔ)過程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法
在開發(fā)中我們經(jīng)常會(huì)用到SQL?Server,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12