莆仙生活网
当前位置: 莆仙生活网 > 知识库 >

oracle交集

时间:2024-06-19 12:37:59 编辑:莆仙君

oracle中INTERSECT,MINUS用法

intersect 就是交集,minus 就是差集。步骤举例如下:1、分别创建两张表,TEST_A及TEST_B;2、插入样例数据;insert into test_a values(1);insert into test_a values(2);insert into test_a values(3);insert into test_b values(1);insert into test_b values(2);commit;3、编写INTERSECT语句,select * from TEST_A t INTERSECT select * from TEST_B t;可以发现只有交集结果1、2;4、编写MINUS语句,select * from TEST_A t MINUS select * from TEST_B t;可以发现只有差集结果3;扩展资料1、交集就是两个结果集中都有的元素。假设有两个数集A和B,A包含1、2、3,B包含1、2,这两个数集都有1、2,那么A和B交在一起的部分1、2,就是A和B的交集。2、差集就是A中存在,但是B中不存在的数据集。假设有两个数集A和B,A包含1、2、3,B包含1、2,这两个数集差集就是1。

oracle 多个结果集union后保持各自原有排序

可行
但是你必须把每个结果集保存在子查询中。
如:
SELECT *
FROM (SELECT '002', '语文', '' FROM DUAL ORDER BY 1)
UNION ALL
SELECT *
FROM (SELECT '001', '数学', '' FROM DUAL ORDER BY 1)
UNION ALL
SELECT * FROM (SELECT '003', '英语', '' FROM DUAL ORDER BY 1)
但是,如果你不写在子查询中,就不行
如:
SELECT '002', '语文'
FROM DUAL
ORDER BY 1
UNION ALL
SELECT '001', '数学'
FROM DUAL
ORDER BY 1
UNION ALL
SELECT '003', '英语' FROM DUAL ORDER BY 1
这种方式肯定是不会,并且SQL会报错。

oracle中,多个结果集union后保持各自原有排序,是否可行?

使用Union All就是能实现
  Oracle中Union与Union All的区别
  如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。
  union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
  Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
  Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
  Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
  Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
  可以在最后一个结果集中指定Order by子句改变排序方式。

  有关union和union all关键字需要注意的问题是:
  union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。
  使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。