SQL中UNION與UNION ALL的區(qū)別小結
在 SQL 中,UNION
和 UNION ALL
都用于將兩個或多個結果集合并為一個結果集,但它們在處理重復數據方面有顯著區(qū)別。以下是它們的詳細區(qū)別:
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); // 使用 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); } } // 清理示例數據 stmt.executeUpdate("DROP TABLE IF EXISTS table1"); stmt.executeUpdate("DROP TABLE IF EXISTS table2"); } catch (SQLException e) { e.printStackTrace(); } } }
在上述代碼中,演示了如何使用 JDBC 執(zhí)行 UNION
和 UNION ALL
操作。請根據需要調整數據庫連接字符串、用戶名、密碼和 SQL 語句。
總結
UNION
: 合并結果集并去除重復的行。UNION ALL
: 合并結果集并保留所有重復的行。
到此這篇關于SQL中UNION與UNION ALL的區(qū)別小結的文章就介紹到這了,更多相關SQL UNION與UNION ALL區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MSSQL 2000 使用幫助(sql server簡明教程)
這篇文章主要介紹了MSSQL 2000 使用幫助(sql server簡明教程),需要的朋友可以參考下2017-04-04SQL Server 2005 創(chuàng)建簡單的存儲過程--總結分析
本篇文章是對使用SQL Server 2005創(chuàng)建簡單的存儲過程進行了詳細的分析介紹,需要的朋友參考下2013-06-06