MySQL 基础———— UNION 联合查询
引言
聯合查詢與連接查詢不同,通過UNION 關鍵字,我們可以將多個查詢語句一同執行并將結果集展示出來,不涉及到任何關聯關系。
UNION 的含義是“聯合,并集,結合”,在MySQL中可以將多個查詢語句的結果合并成一個結果集,在MySQL 不支持FULL OUTER JOIN 的情況下,彌補了“并集” 查詢的短板。
連接查詢相關知識總結,參考《MySQL 基礎 ———— 連接查詢》。
一、UNION 介紹
UNION 查詢非常簡單,就是將多個SQL的結果取并集,適用于查詢多個功能含義比較類似的表或結果集,同時可以將一條比較復雜的SQL拆分成多條語句。
員工表:
學生表:
聯合查詢:?
SELECT emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 FROM emp UNION SELECT stu_id 編號, stu_name 姓名, class_id 所屬部門或班級 FROM student LIMIT 15上面的SQL語句使用 UNION 關鍵字將emp 和 student 的查詢合并在了一起。如果希望合并多個查詢,就可以使用下面的格式進行合并:
查詢語句 1?
UNION
查詢語句 2
UNION
......
二、聯合查詢的規則
聯合查詢是有一定使用規則的,如果不加注意,MySQL就有可能執行報錯,或意義混亂
1、多條查詢語句的查詢列數必須保持一致,否則報錯。
2、多條查詢語句的列值類型和順序最好保持一致。
3、UNION 關鍵字默認不查詢重復記錄,但只要有一個字段不一樣就認為是兩條記錄。
2.1 規則一:查詢列數必須保持一致
其實很好理解,如果要將兩個結果集合并,那么就需要將列數統一,MySQL對此作了嚴格的限制,不會以 NULL 值顯示沒有查詢該列的查詢記錄,這是為了保證數據的準確性,原因是 NULL 也是一種值。
SELECT emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級, manager_id FROM emp UNION SELECT stu_id 編號, stu_name 姓名, class_id 所屬部門或班級 FROM student??
2.2 規則二:列值類型和順序最好保持一致
“最好” 的意思是 “我們可以不這樣做,但皮一下并沒有什么意義”。
比如,我們將stu_name 與 class_id 調換順序:
SELECT emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 FROM emp UNION SELECT stu_id 編號, class_id 姓名, stu_name 所屬部門或班級 FROM student LIMIT 15?MySQL雖然不會報錯,但結果已經不具有什么使用意義了。另外,列的別名其實并不需要完全統一,多條查詢語句中如果出現不統一的列名,MySQL會默認使用第一條查詢語句的列名。如:
SELECT emp_id 編號, emp_name 姓名, dept_id 所屬部門或班級 FROM emp UNION SELECT stu_id, stu_name, class_id FROM student LIMIT 15但為了保證可讀性,建議為每條查詢語句指定相同的列名,保持統一格式。
2.3 規則三:UNION 默認去重
UNION 關鍵字不會查詢重復的記錄,但重復的記錄并不是簡簡單單的“看上去重復”或“主鍵重復”,記錄中只要有一個字段不一致,UNION 就會老老實實的將他們都查詢出來。
三、UNION 與 UNION ALL
UNION 關鍵字是去重的聯合查詢,如果非要將所有記錄都查詢出來,不忽略重復的記錄,那么可以使用 UNION ALL ,對比來看一下:
SELECT * FROM emp UNION SELECT * FROM empUNION 的結果:?
SELECT * FROM emp UNION ALL SELECT * FROM empUNION? ALL 的結果:
綜上,就是關于 UNION 聯合查詢的用法總結,歡迎文末留言。
?
總結
以上是生活随笔為你收集整理的MySQL 基础———— UNION 联合查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php的Apa红灯_macos – 使
- 下一篇: 笔记本超频会烧吗_笔记本电脑cpu超频是