Oracle学习笔记(二)----------union

趁热再整理一个关于数据库(Oracle)的关键字的用法

 

union关键字

union字面意思就是“联合”,通过该关键字可以将两个sql语句合并起来一起查询,以达到想要的查询结果。

举个例子

 

设有表如下:

学生表:

+----+------+------+---------+
| id | name | age  | classid |
+----+------+------+---------+
|  1 | 关羽  |  35  |  7班    |
|  2 | 张飞  |  33  |  5班    |
|  3 | 赵云  |  31  |  3班    |
|  4 | 马超  |  28  |  2班    |
|  5 | 黄忠  |  60  |  8班    |
+----+------+------+---------+

 

执行以下sql语句:

-- 通过union可以将两个sql语句合并起来

select * from student
where student.age >= 35
union
select * from student
where student.age < 30;

查询结果:

+----+-------+-------+---------+
| id | name  | age   | classid |
+----+-------+-------+---------+
|  1 |  关羽  |   35  |  7班    |
|  5 |  黄忠  |   60  |  8班    |
|  4 |  马超  |   28  |  2班    |
+----+--------+------+---------+

通过union关键字将两条sql语句合并一起查询,查询到结果一并显示出来。

 

再看另一条sql语句:

-- 通过union可以将两个sql语句合并起来

select * from student
where student.age >= 30
union
select * from student
where student.age < 35;

执行结果如下:

+----+------+------+---------+
| id | name | age  | classid |
+----+------+------+---------+
|  1 | 关羽  |  35  |  7班    |
|  2 | 张飞  |  33  |  5班    |
|  3 | 赵云  |  31  |  3班    |
|  5 | 黄忠  |  60  |  8班    |
|  4 | 马超  |  28  |  2班    |
+----+------+------+---------+

通过该sql语句查询到所有记录,可以看到union关键字相当于将两个where字句的条件用或(||、or)关联起来。注意union不会显示重复的记录。

 

与union关键字类似作用的就是union all关键字,两者的区别是union all关键字查询出来不会合并重复的记录,union all会显示查到的所有记录,相同记录可重复出现。

如上面的sql语句将关键字union换成union all,执行结果将会不一样

sql语句:

-- 通过union可以将两个sql语句合并起来

select * from student
where student.age >= 30
union all
select * from student
where student.age < 35;

union all执行结果:

+----+------+------+---------+
| id | name | age  | classid |
+----+------+------+---------+
|  1 | 关羽  |  35  |  7班    |
|  2 | 张飞  |  33  |  5班    |
|  3 | 赵云  |  31  |  3班    |
|  5 | 黄忠  |  60  |  8班    |
|  2 | 张飞  |  33  |  5班    |
|  3 | 赵云  |  31  |  3班    |
|  4 | 马超  |  28  |  2班    |
+----+------+------+---------+

可以看到,union all也将两条sql语句合并起来了,不同的是,每条sql查询出来的结果都会直接显示出来(前4条记录是第一个sql,后三条是第二个sql),它并没有将重复记录合并起来。

必须要注意的是,union和union all查询中,两个select语句的字段类型要匹配,字段个数也要一致。

union和union all可以不局限于同一张表,两个sql语句可以分别对应不同的表。

 

例如,还设有另一张表如下:

+------------+--------------+------+---------------+
| teacher_id | teacher_name | age  | teach_classid |
+------------+--------------+------+---------------+
|    a       |    张三       |  50  |    7班        |
|    b       |    李四       |  41  |    5班        |
|    c       |    王五       |  38  |    3班        |
+------------+--------------+------+---------------+

执行以下sql语句:

select * from student
where student.age >= 30
union
select * from teacher
where teacher.age < 50;

执行结果如下:

+----+------+------+---------+
| id | name | age  | classid |
+----+------+------+---------+
| 1  | 关羽  |  35  |   7班   |
| 2  | 张飞  |  33  |   5班   |
| 3  | 赵云  |  31  |   3班   |
| 5  | 黄忠  |  60  |   8班   |
| b  | 李四  |  41  |   5班   |
| c  | 王五  |  38  |   3班   |
+----+------+------+---------+

上面这个例子通过union关键字将两条分别查询不同表的sql语句合并起来了,注意合并之后的字段名称以第一条sql语句的字段名称来命名。

union all同样道理,只不过不会合并重复记录。

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。