- 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 vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線 vs 右連線
- SQL - Union vs 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 vs Order By
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
UNION 與 JOIN
SQL 提供各種關係運算符來處理關係資料庫中跨多個表的資料。其中,UNION 和 JOIN 查詢從根本上用於組合來自多個表的資料。
儘管它們都用於相同目的,即組合表,但這些運算子的工作方式之間存在許多差異。主要區別在於,UNION 運算子組合來自多個相似表的,無論資料相關性如何,而 JOIN 運算子僅用於組合來自多個表的相關資料。
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');
使用以下查詢建立 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', 'PHOTOGRAPHY');
現在,讓我們使用以下 UNION 查詢組合 COURSES_PICKED 和 EXTRA_COURSES_PICKED 表 -
SELECT * FROM COURSES_PICKED UNION SELECT * FROM EXTRA_COURSES_PICKED;
輸出
執行 UNION 操作後獲得的結果表為 -
| STUDENT_ID | STUDENT_NAME | COURSE_NAME |
|---|---|---|
| 1 | Jhon | English |
| 1 | Jhon | Physical Education |
| 2 | Robert | Computer Science |
| 2 | Robert | Gym |
| 3 | Shasha | Communications |
| 3 | Shasha | Film |
| 4 | Julian | Mathematics |
| 4 | Julian | Photography |
JOIN 的工作原理
連線操作用於將來自多個相關表的資訊組合到一個表中,基於它們的公共欄位。此操作可以與各種子句一起使用,例如 ON、WHERE、ORDER BY、GROUP BY 等。
連線有兩種型別 -
- 內連線
- 外連線
基本型別的連線是內連線,它只檢索公共列的匹配值。它是一個預設連線。
外連線的結果表包含來自第一個表的所有匹配和不匹配的行。它分為子型別,如左連線、右連線和全連線。
語法
以下是 SQL 中連線操作的基本語法 -
SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name = table2.column_name;
示例
在以下示例中,我們將連線上面建立的相同表,即 COURSES_PICKED 和 EXTRA_COURSES_PICKED,使用以下查詢 -
SELECT c.STUDENT_ID, c.STUDENT_NAME, COURSE_NAME, COURSES_PICKED FROM COURSES_PICKED c JOIN EXTRA_COURSES_PICKED e ON c.STUDENT_ID = e.STUDENT_ID;
輸出
結果表將顯示如下 -
| STUDENT_ID | STUDENT_NAME | COURSE_NAME | COURSE_PICKED |
|---|---|---|---|
| 1 | Jhon | ENGLISH | Physical Education |
| 2 | Robert | COMPUTER SCIENCE | Gym |
| 3 | Shasha | COMMUNICATIONS | Film |
| 4 | Julian | MATHEMATICS | Photography |
UNION 與 JOIN
正如我們在上面給出的示例中看到的,UNION 運算子只能在聯合相容的表上執行,而 JOIN 運算子連線兩個不必相容但應該相關的表。
讓我們總結一下這些查詢之間的所有區別 -
| UNION | JOIN |
|---|---|
| UNION 操作僅在聯合相容的表上執行,即表必須包含相同數量的列,並且資料型別相同。 | JOIN 操作可以在至少有一個公共欄位的表上執行。表不必是聯合相容的。 |
| 組合的資料將作為結果表的新行新增。 | 組合的資料將作為新列新增到結果表中。 |
| 這作為連線操作。 | 這作為交集操作。 |
| UNION 從結果表中刪除所有重複值。 | JOIN 保留來自兩個表的所有值,即使它們是冗餘的。 |
| UNION 不需要任何其他子句來組合兩個表。 | JOIN 需要一個額外的 ON 子句來根據公共欄位組合兩個表。 |
| 它主要用於以下場景,例如將組織中的舊員工列表與新員工列表合併。 | 這用於需要合併相關表的場景。例如,組合包含客戶列表及其下訂單的表。 |