- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 備份資料庫
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 清空表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - 插入查詢
- SQL - 選擇查詢
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查詢
- SQL - 刪除查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - Where 子句
- SQL - Top 子句
- SQL - Distinct 子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL - Having 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY,ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION 與 UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線與右連線
- SQL - Union 與 Join
- SQL 鍵
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 叢集索引
- SQL - 非叢集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - Min & Max
- SQL - 空值函式
- SQL - 檢查約束
- SQL - 預設約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - Group By 與 Order By
- SQL - IN 與 EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - UNION 與 UNION ALL
UNION 和 UNION ALL 運算子只是 SQL 對代數集合運算子的實現。兩者都用於從多個表中檢索行並將它們作為單個表返回。這兩個運算子之間的區別在於,UNION 僅返回不同的行,而 UNION ALL 返回表中存在的所有行。
但是,為了使這些運算子能夠在這些表上工作,它們需要遵循以下條件:
- 要組合的表必須具有相同數量的列,並且資料型別相同。
- 行數不必相同。
滿足這些條件後,UNION 或 UNION ALL 運算子將多個表中的行作為結果表返回。
第一個表的列名將成為結果表的列名,第二個表的內容將合併到具有相同資料型別的結果列中。
什麼是 UNION?
UNION 是 SQL 中的一種運算子/子句,其工作方式類似於關係代數中的並集運算子。它只是組合來自多個聯合兼容表的的資訊。
由於 UNION 自動消除所有重複記錄,因此只有來自表的不同行會被新增到結果表中。
語法
以下是 SQL 中 UNION 運算子的語法:
SELECT * FROM table1 UNION SELECT * FROM table2;
示例
讓我們首先建立兩個表 COURSES_PICKED 和 EXTRA_COURSES_PICKED,它們具有相同數量的列,並且具有相同的資料型別。
使用以下查詢建立 COURSES_PICKED 表:
CREATE TABLE COURSES_PICKED( STUDENT_ID INT NOT NULL, STUDENT_NAME VARCHAR(30) NOT NULL, COURSE_NAME VARCHAR(30) NOT NULL );
使用以下查詢將值插入 COURSES_PICKED 表:
INSERT INTO COURSES_PICKED VALUES (1, 'JOHN', 'ENGLISH'), (2, 'ROBERT', 'COMPUTER SCIENCE'), (3, 'SASHA', 'COMMUNICATIONS'), (4, 'JULIAN', 'MATHEMATICS');
該表將顯示如下:
| 學生 ID | 學生姓名 | 課程名稱 |
|---|---|---|
| 1 | 約翰 | 英語 |
| 2 | 羅伯特 | 計算機科學 |
| 3 | 薩沙 | 傳播學 |
| 4 | 朱利安 | 數學 |
現在,讓我們使用以下查詢建立另一個表 EXTRA_COURSES_PICKED:
CREATE TABLE EXTRA_COURSES_PICKED( STUDENT_ID INT NOT NULL, STUDENT_NAME VARCHAR(30) NOT NULL, EXTRA_COURSE_NAME VARCHAR(30) NOT NULL );
以下是將值插入 "EXTRA_COURSES_PICKED" 表的查詢:
INSERT INTO EXTRA_COURSES_PICKED VALUES (1, 'JOHN', 'PHYSICAL EDUCATION'), (2, 'ROBERT', 'GYM'), (3, 'SASHA', 'FILM'), (4, 'JULIAN', 'MATHEMATICS');
該表將建立如下:
| 學生 ID | 學生姓名 | 課程選擇 |
|---|---|---|
| 1 | 約翰 | 體育 |
| 2 | 羅伯特 | 健身房 |
| 3 | 薩沙 | 電影 |
| 4 | 朱利安 | 數學 |
現在,讓我們使用以下 UNION 查詢組合這兩個表:
SELECT * FROM COURSES_PICKED UNION SELECT * FROM EXTRA_COURSES_PICKED;
輸出
執行 UNION 操作後獲得的結果表如下:
| 學生 ID | 學生姓名 | 課程名稱 |
|---|---|---|
| 1 | 約翰 | 英語 |
| 2 | 羅伯特 | 計算機科學 |
| 3 | 薩沙 | 傳播學 |
| 4 | 朱利安 | 數學 |
| 1 | 約翰 | 體育 |
| 2 | 羅伯特 | 健身房 |
| 3 | 薩沙 | 電影 |
什麼是 UNION ALL?
UNION ALL 也是 SQL 中的一種運算子/子句,用於將多個表合併成一個表。但是,此運算子還會保留結果表中的重複行。
假設有兩個表,一個表包含一名球員參加的國際比賽數量,另一個表包含一名球員參加的國家級比賽數量。
如上表所示,科利在國際上打了 234 場比賽,在國內打了 234 場比賽。即使這些列中的資料相同,它們也都是獨立的比賽。需要在顯示球員總比賽場數的結果表中包含這兩行。因此,在這種情況下,我們使用 UNION ALL 運算子。
語法
以下是 SQL 中 UNION ALL 運算子的語法:
SELECT * FROM table1 UNION ALL SELECT * FROM table2;
示例
在以下示例中,讓我們對上面給出的相同示例表:"COURSES_PICKED" 和 "EXTRA_COURSES_PICKED" 執行 UNION ALL 操作,使用以下查詢:
SELECT * FROM COURSES_PICKED UNION ALL SELECT * FROM EXTRA_COURSES_PICKED;
輸出
結果表顯示如下:
| 學生 ID | 學生姓名 | 課程名稱 |
|---|---|---|
| 1 | 約翰 | 英語 |
| 2 | 羅伯特 | 計算機科學 |
| 3 | 薩沙 | 傳播學 |
| 4 | 朱利安 | 數學 |
| 1 | 約翰 | 體育 |
| 2 | 羅伯特 | 健身房 |
| 3 | 薩沙 | 電影 |
| 4 | 朱利安 | 數學 |