欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL中UNION與UNION ALL的區(qū)別小結(jié)

 更新時(shí)間:2025年04月24日 09:35:29   作者:灰_灰丶灰  
UNION?和?UNION ALL?都用于將兩個(gè)或多個(gè)結(jié)果集合并為一個(gè)結(jié)果集,但它們在處理重復(fù)數(shù)據(jù)方面有顯著區(qū)別,本文就來介紹一下SQL中UNION與UNION ALL的區(qū)別小結(jié),感興趣的可以了解一下

在 SQL 中,UNION 和 UNION ALL 都用于將兩個(gè)或多個(gè)結(jié)果集合并為一個(gè)結(jié)果集,但它們在處理重復(fù)數(shù)據(jù)方面有顯著區(qū)別。以下是它們的詳細(xì)區(qū)別:

1. UNION

UNION 操作符用于合并兩個(gè)或多個(gè) 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ù)的行時(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 的性能相對較高。
  • 用途: 當(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 操作。請根據(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)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 淺談SQL Server 2016里TempDb的進(jìn)步

    淺談SQL Server 2016里TempDb的進(jìn)步

    tempdb:是連接到 SQL Server 實(shí)例的所有用戶都可用的全局資源,它保存所有臨時(shí)表,臨時(shí)工作表,臨時(shí)存儲過程,臨時(shí)存儲大的類型,中間結(jié)果集,表變量和游標(biāo)等。另外,它還用來滿足所有其他臨時(shí)存儲要求.
    2016-01-01
  • MSSQL 2000 使用幫助(sql server簡明教程)

    MSSQL 2000 使用幫助(sql server簡明教程)

    這篇文章主要介紹了MSSQL 2000 使用幫助(sql server簡明教程),需要的朋友可以參考下
    2017-04-04
  • SQL語句練習(xí)實(shí)例之二——找出銷售冠軍

    SQL語句練習(xí)實(shí)例之二——找出銷售冠軍

    在公司中,老板走進(jìn)來,要一張每個(gè)地區(qū)銷量前3名的銷售額與銷售員的報(bào)表
    2011-10-10
  • sql server 獲取系統(tǒng)時(shí)間的方法

    sql server 獲取系統(tǒng)時(shí)間的方法

    Sql Server 中一個(gè)非常強(qiáng)大的日期格式化函數(shù),獲得當(dāng)前系統(tǒng)時(shí)間,GETDATE
    2012-11-11
  • SQL查詢用戶連續(xù)N天登錄

    SQL查詢用戶連續(xù)N天登錄

    業(yè)務(wù)中常見分析之一是分析用戶連續(xù)登錄使用情況,本文主要介紹了SQL查詢用戶連續(xù)N天登錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 診斷SQLSERVER問題常用的日志概述及使用

    診斷SQLSERVER問題常用的日志概述及使用

    這里主要有兩個(gè):1.Windows事件日志2.SQLSERVER ErrorLog記下來將詳細(xì)介紹下它們的作用及使用方法,感興趣的朋友可以了解下,或許本的知識點(diǎn)對你有所幫助
    2013-02-02
  • 一個(gè)簡單的SQL 行列轉(zhuǎn)換語句

    一個(gè)簡單的SQL 行列轉(zhuǎn)換語句

    在數(shù)據(jù)庫開發(fā)中經(jīng)常會遇到行列轉(zhuǎn)換的問題,比如下面的問題,部門,員工和員工類型三張表,我們要統(tǒng)計(jì)類似這樣的列表
    2009-08-08
  • SQL Server 2005 創(chuàng)建簡單的存儲過程--總結(jié)分析

    SQL Server 2005 創(chuàng)建簡單的存儲過程--總結(jié)分析

    本篇文章是對使用SQL Server 2005創(chuàng)建簡單的存儲過程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • SQL對時(shí)間處理的語句小結(jié)

    SQL對時(shí)間處理的語句小結(jié)

    做項(xiàng)目時(shí)經(jīng)常要對數(shù)據(jù)庫中存儲的時(shí)間做一些處理后再操作,于是自己總結(jié)了一些
    2011-11-11
  • SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法

    SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法

    在開發(fā)中我們經(jīng)常會用到SQL?Server,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評論