MySQL 基礎 UNION 聯合查詢

2021-09-29 12:13:28 字數 2849 閱讀 1504

聯合查詢連線查詢不同,通過union 關鍵字,我們可以將多個查詢語句一同執行並將結果集展示出來,不涉及到任何關聯關係。

union 的含義是「聯合,並集,結合」,在mysql中可以將多個查詢語句的結果合併成乙個結果集,在mysql 不支援full outer join 的情況下,彌補了「並集」 查詢的短板。

連線查詢相關知識總結,參考《mysql 基礎 ———— 連線查詢》。

union 查詢非常簡單,就是將多個sql的結果取並集,適用於查詢多個功能含義比較類似的表或結果集,同時可以將一條比較複雜的sql拆分成多條語句。

員工表:

學生表:

聯合查詢: 

select emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 from emp

union

select stu_id 編號, stu_name 姓名, class_id 所屬部門或班級 from student

上面的sql語句使用 union 關鍵字將emp 和 student 的查詢合併在了一起。如果希望合併多個查詢,就可以使用下面的格式進行合併:

查詢語句 1 

union

查詢語句 2

union

聯合查詢是有一定使用規則的,如果不加注意,mysql就有可能執行報錯,或意義混亂

1、多條查詢語句的查詢列數必須保持一致,否則報錯。

2、多條查詢語句的列值型別順序最好保持一致。

3、union 關鍵字預設不查詢重覆記錄,但只要有乙個欄位不一樣就認為是兩條記錄。

其實很好理解,如果要將兩個結果集合並,那麼就需要將列數統一,mysql對此作了嚴格的限制,不會以 null 值顯示沒有查詢該列的查詢記錄,這是為了保證資料的準確性,原因是null 也是一種值

select emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級, manager_id from emp

union

select stu_id 編號, stu_name 姓名, class_id 所屬部門或班級 from student

「最好」 的意思是 「我們可以不這樣做,但皮一下並沒有什麼意義」。比如,我們將stu_name 與 class_id 調換順序:

select emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 from emp

union

select stu_id 編號, class_id 姓名, stu_name 所屬部門或班級 from student

mysql雖然不會報錯,但結果已經不具有什麼使用意義了。另外,列的別名其實並不需要完全統一,多條查詢語句中如果出現不統一的列名,mysql會預設使用第一條查詢語句的列名。如:

select emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 from emp

但為了保證可讀性,建議為每條查詢語句指定相同的列名,保持統一格式。

union 關鍵字不會查詢重複的記錄,但重複的記錄並不是簡簡單單的「看上去重複」或「主鍵重複」,記錄中只要有乙個欄位不一致,union 就會老老實實的將他們都查詢出來。

union 關鍵字是去重的聯合查詢,如果非要將所有記錄都查詢出來,不忽略重複的記錄,那麼可以使用 union all ,對比來看一下:

select * from emp

union

select * from emp

union 的結果: 

union  all 的結果:

mysql聯合查詢union

將多條查詢結果合併成乙個結果 查詢語句1 union all 查詢語句2 查詢部門編號 90或郵箱包含a的員工資訊 select from employees where email like a or department id 90 或者 select from employees where ...

MySql 高階查詢 union 聯合查詢

1.union 聯合查詢 將多個查詢結果集合到一起 2.語法 select 查詢語句 union select 查詢語句 union select 查詢語句 union select 查詢語句 3.例子 查詢學生資訊和班級資訊,集合到一起 select class id,class name,cla...

聯合 union 用法

聯合 union 在c裡面見得並不多,但是在一些對記憶體要求特別嚴格的地方,聯合又是頻繁出現,那麼究竟什麼是聯合?怎麼去用?有什麼需要注意的地方呢?1 什麼是聯合?一種構造型別的資料結構。在乙個 聯合 內可以定義多種不同的資料型別,乙個被說明為該 聯合 型別的變數中,允許裝入該 聯合 所定義的任何一...