MySQL之使用UNION和UNION ALL合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集
使用UNION和UNION ALL合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集
在MySQL中, UNION
和 UNION ALL
是用于合并兩個(gè)或多個(gè) SELECT 語句的結(jié)果集的操作符。
UNION
會(huì)去除結(jié)果集中的重復(fù)行,返回唯一的行,而 UNION ALL
會(huì)返回所有的行,包括重復(fù)行。
舉個(gè)通用的例子
SELECT column1, column2, ... FROM table1 WHERE condition UNION SELECT column1, column2, ... FROM table2 WHERE condition;
SELECT column1, column2, ...
: 指定要查詢的列。FROM table
: 指定要查詢的表。WHERE condition
: 指定篩選條件(可選)。
注意事項(xiàng):
UNION
連接的兩個(gè) SELECT 語句必須包含相同數(shù)量和類型的列,列的順序也必須相同。
默認(rèn)情況下,UNION
會(huì)去除重復(fù)的行。如果要包含重復(fù)的行,可以使用 UNION ALL
。
使用 UNION
或 UNION ALL
時(shí),結(jié)果集的列名是由第一個(gè) SELECT
語句中的列名決定的,因此要確保兩個(gè) SELECT
語句中的列名和類型相匹配。
舉個(gè)實(shí)際的例子
假設(shè)有兩個(gè)表 employees1
和 employees2
包含相同的列結(jié)構(gòu)和部分重復(fù)數(shù)據(jù),然后使用 UNION
和 UNION ALL
進(jìn)行查詢和合并。
創(chuàng)建兩個(gè)表并插入一些數(shù)據(jù)
-- 創(chuàng)建 employees1 表 CREATE TABLE employees1 ( employee_id INT, first_name VARCHAR(50), last_name VARCHAR(50) ); -- 插入數(shù)據(jù)到 employees1 表 INSERT INTO employees1 VALUES (1, 'John', 'Doe'), (2, 'Jane', 'Smith'), (3, 'Bob', 'Johnson'), (4, 'Alice', 'Doe'); -- 創(chuàng)建 employees2 表 CREATE TABLE employees2 ( employee_id INT, first_name VARCHAR(50), last_name VARCHAR(50) ); -- 插入數(shù)據(jù)到 employees2 表,包含一些與 employees1 表重復(fù)的數(shù)據(jù) INSERT INTO employees2 VALUES (3, 'Bob', 'Johnson'), (4, 'Alice', 'Doe'), (5, 'Eva', 'Williams');
使用 UNION
合并這兩個(gè)表的數(shù)據(jù):
-- 使用 UNION 合并,去除重復(fù)行 SELECT employee_id, first_name, last_name FROM employees1 UNION SELECT employee_id, first_name, last_name FROM employees2;
結(jié)果如下:
+-------------+------------+-----------+ | employee_id | first_name | last_name | +-------------+------------+-----------+ | 1 | John | Doe | | 2 | Jane | Smith | | 3 | Bob | Johnson | | 4 | Alice | Doe | | 5 | Eva | Williams | +-------------+------------+-----------+
可以看到,UNION
自動(dòng)去除了重復(fù)的行。
使用 UNION ALL
合并這兩個(gè)表的數(shù)據(jù):
-- 使用 UNION ALL 合并,包含重復(fù)行 SELECT employee_id, first_name, last_name FROM employees1 UNION ALL SELECT employee_id, first_name, last_name FROM employees2;
結(jié)果如下:
+-------------+------------+-----------+ | employee_id | first_name | last_name | +-------------+------------+-----------+ | 1 | John | Doe | | 2 | Jane | Smith | | 3 | Bob | Johnson | | 4 | Alice | Doe | | 3 | Bob | Johnson | | 4 | Alice | Doe | | 5 | Eva | Williams | +-------------+------------+-----------+
可以看到
UNION ALL
保留了所有行,包括重復(fù)的行。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql遠(yuǎn)程登錄root賬戶報(bào)錯(cuò)1045的解決
這篇文章主要介紹了mysql遠(yuǎn)程登錄root賬戶報(bào)錯(cuò)1045的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04MySQL8.x登陸root用戶突然提示mysql_native_password的實(shí)現(xiàn)
本文主要介紹了MySQL 8.x登陸root用戶突然提示mysql_native_password,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08MySQL安裝出現(xiàn)The?configuration?for?MySQL?Server?8.0.28?has
這篇文章主要給大家介紹了MySQL安裝出現(xiàn)The?configuration?for?MySQL?Server?8.0.28?has?failed.?You?can...錯(cuò)誤的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09Mysql中count帶條件計(jì)數(shù)實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Mysql中count帶條件計(jì)數(shù)的相關(guān)資料,Mysql中count()函數(shù)的一般用法是統(tǒng)計(jì)字段非空的記錄數(shù),所以可以利用這個(gè)特點(diǎn)來進(jìn)行條件統(tǒng)計(jì),需要的朋友可以參考下2023-09-09將數(shù)據(jù)插入到MySQL表中的詳細(xì)教程
這篇文章主要介紹了將數(shù)據(jù)插入到MySQL表中的詳細(xì)教程,文中給出了在PHP腳本中操作的示例,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05Advanced SQL Injection with MySQL
Advanced SQL Injection with MySQL...2006-12-12