趁热再整理一个关于数据库(Oracle)的关键字的用法sql
union关键字数据库
union字面意思就是“联合”,经过该关键字能够将两个sql语句合并起来一块儿查询,以达到想要的查询结果。spa
举个例子code
设有表以下:blog
学生表:io
+----+------+------+---------+ | id | name | age | classid | +----+------+------+---------+ | 1 | 关羽 | 35 | 7班 | | 2 | 张飞 | 33 | 5班 | | 3 | 赵云 | 31 | 3班 | | 4 | 马超 | 28 | 2班 | | 5 | 黄忠 | 60 | 8班 | +----+------+------+---------+
执行如下sql语句:class
-- 经过union能够将两个sql语句合并起来 select * from student where student.age >= 35 union select * from student where student.age < 30;
查询结果:select
+----+-------+-------+---------+ | id | name | age | classid | +----+-------+-------+---------+ | 1 | 关羽 | 35 | 7班 | | 5 | 黄忠 | 60 | 8班 | | 4 | 马超 | 28 | 2班 | +----+--------+------+---------+
经过union关键字将两条sql语句合并一块儿查询,查询到结果一并显示出来。sql语句
再看另外一条sql语句:nio
-- 经过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一样道理,只不过不会合并重复记录。