Oracle10g中新的多重集运算符解析
2007-05-09 12:11:49 来源:WEB开发网select num multiset intersect num_tab_typ(1) num from num_tab
NUM
--------------------------
NUM_TAB_TYP(1)
NUM_TAB_TYP(1)
NUM_TAB_TYP()
多重集运算符UNION 返回的是这两个嵌套表中所有的值,并将这些值结合到一个嵌套表中。如下例:
select num multiset union num_tab_typ(1) num from num_tab;
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5, 1)
NUM_TAB_TYP(1, 3, 5, 1)
NUM_TAB_TYP(2, 4, 6, 1)
大家可以注意到,在嵌入表中的值不一定是唯一的。正如上面的例子,使用 UNION 运算符后,在最后的结果中有两项出现了重复的值。如果你想只保留嵌套表中不重复的值,那么你只需要向下面这个例子中一样,在语句中加上关键字DISTINCT 就可以除去重复的值。
select num multiset union distinct num_tab_typ(1) num from num_tab;
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5)
NUM_TAB_TYP(1, 3, 5)
NUM_TAB_TYP(2, 4, 6, 1)
对于每个嵌套表的多重集运算符,都只会从每个集合中选择一个值来进行合并或者排除。也就是说在两个嵌套表中如果出现重复的值,那么对于重复的值只有一个会被除去。例如,num_tab_typ(1,1,2,3) MULTISET EXCEPT num_tab_typ(1,2,3) 的运行结果将会是num_tab_typ(1).
在 Oracle 10g 中,你可以比较两个嵌套表是否相等。只要这两个表中的元素个数相等并且值也相等,那么这两个嵌套表就是相等的,而与这两个表中元素的顺序无关。
select num from num_tab where num = num_tab_typ(1,3,5);
NUM
--------------------------
NUM_TAB_TYP(1, 3, 5)
select num from num_tab where num = num_tab_typ(1,5,3);
NUM
--------------------------
NUM_TAB_TYP(1, 3, 5)
select num from num_tab where num = num_tab_typ(1,1,3,5);
no rows selected
更多精彩
赞助商链接