• Post author:
  • Post category:mysql
  • Post comments:0评论

  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。

发表回复

验证码: 43 + = 52