UNION 操作符可以对查询进行并运算,ALL 参数表示运算结果包括重复行。使用 UNION 运算的所有查询,必须符合在其目标列表中有相同数目的表达式。
语法格式:
select_1 union [all] select_2 { union [all] select_3 } ….
例如,查询专业为软件技术或者计算机网络技术的学生信息。
mysql> select * from student where specialty='软件技术'
union all
select * from student where specialty='计算机网络技术';
+------------+-----------+-----+------------+-----------------------+---------+
| Sid | Sname | Sex | Birthdate | Specialty | AScores |
+------------+-----------+-----+------------+-----------------------+---------+
| 2011216007 | 张锋 | 男 | 1992-09-03 | 软件技术 | 389.0 |
| 2011216111 | 吴秋娟 | 女 | 1992-08-05 | 软件技术 | 408.0 |
| 2011216112 | 穆金华 | 男 | 1992-10-06 | 软件技术 | 365.0 |
| 2012216056 | 刘明明 | 女 | 1994-10-09 | 软件技术 | 357.0 |
| 2012216057 | 孙政先 | 男 | 1993-05-16 | 软件技术 | 362.5 |
| 2012216058 | 王婷 | 女 | 1994-04-13 | 软件技术 | 356.0 |
| 2011216115 | 张欣欣 | 女 | 1992-04-12 | 计算机网络技术 | 315.5 |
| 2011216117 | 孟霞 | 女 | 1993-01-11 | 计算机网络技术 | 334.0 |
| 2012216088 | 吕文昆 | 男 | 1993-09-03 | 计算机网络技术 | 335.0 |
| 2012216089 | 姜丽丽 | 女 | 1994-10-18 | 计算机网络技术 | 368.0 |
+------------+-----------+-----+------------+-----------------------+---------+
使用 UNION 实现全外连接。当然因为数据原因,这个全外连接和左外连接结果没有什么区别
mysql> select * from student left join sc on student.sid=sc.sid
union
select * from student right join sc on student.sid=sc.sid;
+------------+-----------+------+------------+-----------------------+---------+------------+----------+--------+
| Sid | Sname | Sex | Birthdate | Specialty | AScores | Sid | Cid | Scores |
+------------+-----------+------+------------+-----------------------+---------+------------+----------+--------+
| 2011216001 | 赵成刚 | 男 | 1992-05-05 | 计算机应用技术 | 405.0 | 2011216001 | 16020010 | 96.0 |
| 2011216001 | 赵成刚 | 男 | 1992-05-05 | 计算机应用技术 | 405.0 | 2011216001 | 16020011 | 80.0 |
| 2011216002 | 李婧 | 女 | 1992-01-06 | 计算机应用技术 | 395.5 | 2011216002 | 16020010 | 67.0 |
| 2011216003 | 郭洪亮 | 男 | 1992-04-12 | 计算机应用技术 | 353.0 | 2011216003 | 16020012 | 78.0 |
| 2011216003 | 郭洪亮 | 男 | 1992-04-12 | 计算机应用技术 | 353.0 | 2011216003 | 16020013 | 87.0 |
| 2011216003 | 郭洪亮 | 男 | 1992-04-12 | 计算机应用技术 | 353.0 | 2011216003 | 16020014 | 85.0 |
| 2011216004 | 吕珊珊 | 女 | 1993-10-11 | 计算机信息管理 | 353.0 | NULL | NULL | NULL |
| 2011216005 | 高全英 | 女 | 1993-07-05 | 计算机信息管理 | 387.5 | NULL | NULL | NULL |
| 2011216006 | 赫莎 | 女 | 1991-08-03 | 计算机信息管理 | 372.0 | NULL | NULL | NULL
......
UNION 操作符和 JOIN 操作符的区别和联系:UNION 是将相同列的若干条数据行进行合并,而 JOIN 是将两个或多个表的若干个列进行连接。二者都是进行连接操作,但是一个是对行进行操作,另一个是对列进行操作。
文章大部分内容来源:《 SQL Server 2008 R2 数据库技术及应用(第3版)》。以上内容基于数据库版本mysql 5.7.28。