在ORACLE里,提供了一些关键字用于操纵多张表的数据集合
–
–
–
–
首先,我们创建一张新的表,这张表的结构和student表一样,数据由我们自己录入。我们可以使用复制表的语法
然后插入一些新的学生数据
下面,如果我们想1次性地对外返回这2张表的所有数据时,我们可以使用union
也可以使用union all
结果是一样的,那么union和union all到底有什么区别呢?
让我们再插入一些数据
现在,我们发现student和new_student中出现了2条相同的记录,然后我们分别使用union和union all来查询数据看看结果
使用union
使用union all
也就是说,union会自动驱除掉2张表里重复的数据,如果有重复的数据的话只显示1次,而union all不会驱除重复的数据,是纯粹地将2张表的所有数据查出来“拼接”在了一起
注意,不论使用union 还是union all,都需要表之间查询的列的个数和类型相匹配
当然,并不需要2张表的结构完全一样,我们只需要查询的列相匹配即可,例如查询student和subject里的所有学号
之前,我们学习过了向1张表里插入来自另外1张表的信息
那么,能不能向1张表里插入来自多张表的数据呢?
利用union all,我们可以很轻松地实现这样的功能。
现在向new_student_test表中插入来自student和new_student这2张表的数据
只要我们需要可以任意连接多张表,3,4,5张都可以
现在我们想要查询出student和new_student中重复的数据,可以使用子查询这样做
但是,我们可以更简单地使用Intersect 取交集 即专门查询重复的数据
同理,我们也可以简单地使用minus 取减集
注意是上面的查询结果集合减去下面的结果集合
因此minus并不能获得2张表里不重复的数据
如果想要查询2张表里不重复的记录的话,可以换个角度思考
2张表中不重复的记录等于2张表中的所有记录减去2张表中重复的记录
那么使用组合查询再结合子查询我们可以达到目的
minus同样可以用于oracle的分页语句中(但是不规范,超过200条记录后可能会出错)
例如查询第11条至第15条记录
第11条至第15条记录等于前15条检录减去前10条记录