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 8.0.16 winx64及Linux修改root用戶密碼 的方法
這篇文章主要介紹了mysql 8.0.16 winx64及Linux修改root用戶密碼 的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07MySQL將版本由5.7.37更新到5.7.39的實(shí)現(xiàn)方式
這篇文章主要介紹了MySQL將版本由5.7.37更新到5.7.39的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12一種簡單的ID生成策略: Mysql表生成全局唯一ID的實(shí)現(xiàn)
這篇文章主要介紹了一種簡單的ID生成策略: Mysql表生成全局唯一ID的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11mysql Event Scheduler: Failed to open table mysql.event
這篇文章主要介紹了mysql Event Scheduler: Failed to open table mysql.event,需要的朋友可以參考下2016-04-04MySQL中union和order by同時(shí)使用的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狹ySQL中union和order by同時(shí)使用的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12監(jiān)控MySQL主從狀態(tài)的shell腳本
這篇文章主要分享了監(jiān)控MySQL主從狀態(tài)的shell腳本,幫助大家更好的監(jiān)控mysql數(shù)據(jù)庫,保持穩(wěn)定性,感興趣的朋友可以了解下2020-12-12