SQL中UNION與UNION ALL的區(qū)別小結(jié)
在 SQL 中,UNION 和 UNION ALL 都用于將兩個或多個結(jié)果集合并為一個結(jié)果集,但它們在處理重復(fù)數(shù)據(jù)方面有顯著區(qū)別。以下是它們的詳細(xì)區(qū)別:
1. UNION
UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集,并自動去除結(jié)果集中重復(fù)的行。
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;
- 去重:
UNION自動去除重復(fù)的行,只返回唯一的行。 - 性能: 由于需要進(jìn)行去重操作,
UNION的性能相對較低,尤其是在大數(shù)據(jù)集上。 - 用途: 當(dāng)需要合并結(jié)果集并且不希望結(jié)果集中包含重復(fù)的行時使用。
2. UNION ALL
UNION ALL 操作符用于合并兩個或多個 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的性能相對較高。 - 用途: 當(dāng)需要合并結(jié)果集并且希望包含所有行,包括重復(fù)的行時使用。
示例代碼
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 操作。請根據(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別
- MySQL之union和union all的使用及區(qū)別說明
- 簡單聊一聊SQL中的union和union?all
- 帶例子詳解Sql中Union和Union?ALL的區(qū)別
- MySQL系列理解運用union(all)與limit及exists關(guā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)文章
SQLServer中NEWID()函數(shù)用于生成一個唯一的標(biāo)識符的方法實踐
NEWID函數(shù)用于生成一個唯一的標(biāo)識符,本文主要介紹了SQLServer中NEWID()函數(shù)用于生成一個唯一的標(biāo)識符的方法實踐,具有一定的參考價值,感興趣的可以了解一下2024-08-08
SQL?SERVER數(shù)據(jù)庫日志文件收縮圖文詳解
數(shù)據(jù)庫收縮的主要目的之一是釋放未被使用的空間,隨著數(shù)據(jù)庫的日常操作,如插入、更新、刪除等,下面這篇文章主要介紹了SQL?SERVER數(shù)據(jù)庫日志文件收縮的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
sql?server?數(shù)據(jù)庫鎖教程及鎖操作方法
SQL?Server數(shù)據(jù)庫鎖機(jī)制是保證并發(fā)性和數(shù)據(jù)一致性的關(guān)鍵,它通過不同級別的鎖和鎖類型(共享、排他、更新等)來管理資源訪問,了解和正確使用鎖機(jī)制,可以幫助開發(fā)者設(shè)計高效、并發(fā)性強(qiáng)的數(shù)據(jù)庫應(yīng)用,本文介紹sql?server?數(shù)據(jù)庫鎖教程及鎖操作,感興趣的朋友一起看看吧2025-02-02

