SQL教學
SQL RDBMS概念
SQL簡介
SQL NOT NULL約束
SQL DEFAULT約束
SQL唯一約束
SQL主鍵
SQL外鍵
SQL CHECK約束
SQL示例數據庫
SQL索引約束
SQL NULL值
數據庫 - 第一範式(1NF)
數據庫 - 第二範式(2NF)
數據庫 - 第三範式(3NF)
SQL RDBMS數據庫
SQL語法
SQL數據類型
SQL操運算符
SQL算術運算符
SQL比較運算符
SQL邏輯運算符
SQL表達式
SQL創建數據庫(CREATE DATABASE)
SQL丟棄或刪除數據庫(DROP DATABASE)
SQL選擇數據庫(SELECT Database, USE語句)
SQL創建表(CREATE Table)
SQL從現有表創建表
SQL刪除表(DROP或DELETE Table)
SQL INSERT INTO插入查詢
SQL SELECT查詢語句
SQL WHERE子句
SQL AND和OR運算符
SQL UPDATE更新查詢
SQL DELETE刪除查詢
SQL LIKE子句
SQL TOP,LIMIT,ROWNUM子句
SQL ORDER BY排序子句
SQL GROUP BY(分組)
SQL Distinct關鍵字
SQL排序結果
SQL約束
SQL Join聯接
SQL INNER JOIN(內部連接)
SQL LEFT JOIN(左連接)
SQL RIGHT JOIN(右連接)
SQL FULL JOIN(全連接)
SQL自連接
SQL笛卡爾或交叉連接
SQL UNION子句/操作符
SQL INTERSECT子句
SQL EXCEPT子句
SQL別名語法
SQL索引
SQL ALTER TABLE(修改表)
SQL TRUNCATE TABLE(截斷表)
SQL View(視圖)
SQL Having子句
SQL事務
SQL通配符運算符
SQL日期函數
SQL ADDDATE()函數
SQL ADDTIME()函數
SQL CONVERT_TZ()函數
SQL CURDATE()函數
SQL CURRENT_DATE()函數
SQL CURTIME()函數
SQL CURRENT_TIME()函數
SQL CURRENT_TIMESTAMP()方法
SQL DATE(expr)函數
SQL DATEDIFF()方法
SQL DATE_ADD()和DATE_SUB()方法
SQL DATE_FORMAT()函數
SQL DATE_SUB()方法
SQL DAY()函數
SQL DAYNAME()函數
SQL DAYOFMONTH()函數
SQL DAYOFWEEK()函數
SQL DAYOFYEAR()函數
SQL EXTRACT()函數
SQL FROM_DAYS()函數
SQL FROM_UNIXTIME()函數
SQL HOUR()方法
SQL LAST_DAY()函數
SQL LOCALTIME和LOCALTIME()函數
SQL LOCALTIMESTAMP和LOCALTIMESTAMP()函數
SQL MAKEDATE()函數
SQL MAKETIME()函數
SQL MICROSECOND()函數
SQL MINUTE()函數
SQL MONTH()函數
SQL MONTHNAME()函數
SQL NOW()函數
SQL PERIOD_ADD()函數
SQL PERIOD_DIFF()函數
SQL QUARTER()函數
SQL SECOND()函數
SQL SEC_TO_TIME()函數
SQL STR_TO_DATE()函數
SQL SUBDATE()函數
SQL SUBTIME()函數
SQL SYSDATE()函數
SQL TIME()函數
SQL TIMEDIFF()函數
SQL TIMESTAMP()函數
SQL TIMESTAMPADD()函數
SQL TIMESTAMPDIFF()函數
SQL TIME_FORMAT()函數
SQL TIME_TO_SEC()函數
SQL TO_DAYS()函數
SQL UNIX_TIMESTAMP()函數
SQL UTC_DATE()函數
SQL UTC_TIME()函數
SQL UTC_TIMESTAMP()函數
SQL WEEK()函數
SQL WEEKDAY()函數
SQL WEEKOFYEAR()函數
SQL YEAR()函數
SQL YEARWEEK()函數
SQL臨時表
SQL克隆表
SQL子查詢
SQL使用序列(自動遞增)
SQL DISTINCT重複處理
SQL注入
SQL實用函數
SQL MAX()函數
SQL MIN()函數
SQL AVG()函數
SQL SUM()函數
SQL SQRT()函數
SQL RAND()函數
SQL CONCAT()函數
SQL數值函數
SQL ABS()函數
SQL ACOS()函數
SQL ASIN(X)函數
SQL ATAN(X)函數
SQL ATAN2()函數
SQL BIT_AND()函數
SQL BIT_COUNT()函數
SQL BIT_OR()函數
SQL CEIL()函數
SQL CONV()函數
SQL COS()函數
SQL COT()函數
SQL DEGREES()函數
SQL EXP(X)函數
SQL FLOOR(X)函數
SQL FORMAT(X,D)函數
SQL GREATEST()函數
SQL INTERVAL()函數
SQL LEAST()函數
SQL LOG()函數
SQL LOG10(X)函數
SQL MOD()函數
SQL OCT(N)函數
SQL PI()函數
SQL POW()函數
SQL RADIANS()函數
SQL ROUND()函數
SQL SIGN(X)函數
SQL SIN(X)函數
SQL SQRT(X)函數
SQL STD()函數
SQL TAN(X)函數
SQL TRUNCATE()函數
SQL字符串函數
SQL ASCII(str)函數
SQL BIN(N)函數
SQL BIT_LENGTH()函數
SQL CHAR()函數
SQL CHAR_LENGTH()函數
SQL CHARACTER_LENGTH()函數
SQL字符串CONCAT()函數
SQL CONCAT_WS()函數
SQL CONV(N,from_base,to_base)函數
SQL ELT()函數
SQL EXPORT_SET()函數
SQL FIELD()函數
SQL FIND_IN_SET()函數
SQL FORMAT()函數
SQL HEX()函數
SQL INSERT()函數
SQL INSTR()函數
SQL LCASE()函數
SQL LEFT()函數
SQL LENGTH()函數
SQL LOAD_FILE()函數
SQL LOCATE()函數
SQL LOWER()函數
SQL LPAD()函數
SQL LTRIM()函數
SQL MAKE_SET()函數
SQL MID()函數
SQL OCT()函數
SQL OCTET_LENGTH()函數
SQL ORD()函數
SQL POSITION()函數
SQL QUOTE()函數
SQL REGEXP模式
SQL REPEAT()函數
SQL REPLACE()函數
SQL REVERSE()函數
SQL RIGHT()函數
SQL RPAD()函數
SQL SOUNDEX()函數
SQL SPACE()函數
SQL STRCMP()函數
SQL SUBSTRING()函數
SQL SUBSTRING_INDEX()函數
SQL TRIM()函數
SQL UCASE()函數
SQL UNHEX()函數
SQL UPPER()函數

SQL Union運算符

本教程將演示如何使用SQL UNION組合來自多個查詢的兩個或多個結果集,並解釋UNIONUNION ALL之間的區別。

1. SQL UNION運算符簡介

UNION運算符將兩個或多個SELECT語句的結果集合併到一個結果集中。 以下語句說明了如何使用UNION運算符組合兩個查詢的結果集:

SELECT 
    column1, column2
FROM
    table1 
UNION [ALL]
SELECT 
    column3, column4
FROM
    table2;

要使用UNION運算符,可以編寫單獨的SELECT語句,並通過關鍵字UNION將它們連接起來。

SELECT語句返回的列必須具有相同或可轉換的數據類型,大小和相同的順序。

數據庫系統首先執行兩個SELECT語句來處理查詢。 然後,它將兩個單獨的結果集合併爲一個,並消除重複的行。 爲了消除重複的行,數據庫系統對每列的組合結果進行排序,並掃描它以查找彼此相鄰的匹配行。

要保留結果集中的重複行,請使用UNION ALL運算符。

假設我們有兩個結果集A(1,2)B(2,3)。 下圖說明了A UNION B結果:

SQL

以下圖片說明了A UNION ALL B的結果:
SQL

聯合與聯接不同,聯接組合了多個表的列,而聯合組合了表的行。

2. SQL UNION示例

要從A表中獲取數據,請使用以下SELECT語句:

SELECT 
    id
FROM
    A;

執行上面查詢語句,得到以下結果:

SELECT 
    id
FROM
    A;

要從B表中檢索數據,請使用以下語句:

mysql> SELECT 
    id
FROM
    B;
+----+
| id |
+----+
|  2 |
|  3 |
+----+
2 rows in set

要組合這兩個查詢的結果集,請使用UNION運算符,如下所示:

SELECT
    id
FROM
    a
UNION
SELECT
    id
FROM
    b;

執行上面查詢語句,得到以下結果:

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set

結果集僅包含3行,因爲UNION運算符刪除了一個重複行。

3. SQL UNION ALL示例

要保留重複行,請使用UNION ALL運算符,如下所示:

SELECT
    id
FROM
    a
UNION ALL
SELECT
    id
FROM
    b;

執行上面查詢語句,得到以下結果:

+----+
| id |
+----+
|  1 |
|  2 |
|  2 |
|  3 |
+----+
4 rows in set

4. SQL UNION帶有ORDER BY示例

要對結果集進行排序,請在所有SELECT語句之後放置ORDER BY子句,如下所示:

SELECT
    id
FROM
    a
UNION
SELECT
    id
FROM
    b
ORDER BY id DESC;

執行上面查詢語句,得到以下結果:

+----+
| id |
+----+
|  3 |
|  2 |
|  1 |
+----+
3 rows in set

數據庫系統執行以下步驟:

  • 首先,分別執行每個SELECT語句。
  • 其次,組合結果集並刪除重複行以創建組合結果集。
  • 第三,按ORDER BY子句中指定的列對組合結果集進行排序。

實際上,我們經常使用UNION運算符來組合來自不同表的數據。 請參閱以下employeesdependents表:

SQL

以下語句使用UNION運算符組合員工和受撫養人的名字和姓氏。

SELECT
    first_name,
    last_name
FROM
    employees
UNION
SELECT
    first_name,
    last_name
FROM
    dependents
ORDER BY
    last_name;

執行上面查詢語句,得到以下結果:

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Grace      | Chen      |
| Dan        | Chen      |
| Daniel     | Chen      |
| Matthew    | Chen      |
| John       | Chen      |
| Valli      | Chen      |
| Diana      | Chen      |
| Helen      | Chen      |
| Nancy      | Chen      |
| Karl       | Chen      |
| Matthew    | Han       |
.....
| Guy        | Zhang     |
| Karen      | Zhang     |
| Ed         | Zhao      |
| Britney    | Zhao      |
| Jennifer   | Zhao      |
| Susan      | Zhou      |
| Uma        | Zhou      |
| Bob        | Zhou      |
| Lucille    | Zhou      |
| Michael    | Zhou      |
| Pat        | Zhou      |
+------------+-----------+
70 rows in set

在本教程中,您學習瞭如何使用UNION運算符組合來自多個查詢的兩個或多個結果集。