深入了解Oracle10g中新的多重集运算符(中)
文章作者 100test 发表时间 2007:03:14 13:40:37
来源 100Test.Com百考试题网
0select 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 中,你可以比较两个嵌套表是否相等。只要这两个表中的元素个数相等并且值也相等,那么这两个嵌套表就是相等的,而与这两个表中元素的顺序无关。
0select num from num_tab where num = num_tab_typ(1,3,5).
NUM
--------------------------
NUM_TAB_TYP(1, 3, 5)
0select num from num_tab where num = num_tab_typ(1,5,3).
NUM
--------------------------
NUM_TAB_TYP(1, 3, 5)
0select num from num_tab where num = num_tab_typ(1,1,3,5).
no rows 0selected
你还可以使用CARDINALITY 函数来得到某个嵌套表中元素的个数。
0select cardinality(num) from num_tab.
CARDINALITY(NUM)
----------------
5
3
3
数据库认为不存在重复值的嵌套表是一个SET。事实上,存在函数SET ,它可以通过删除嵌套表中重复的数据从而将一个嵌套表转化成一个SET。同样还有一个新的 SQL 子句——IS A SET,在嵌套表中不存在重复值的时候返回真值。
0select num from num_tab where num is a set.
NUM
--------------------------
NUM_TAB_TYP(1, 2, 3, 4, 5)
NUM_TAB_TYP(1, 3, 5)
NUM_TAB_TYP(2, 4, 6)
0select num from num_tab where num multiset union num_tab_typ(1) is a set.
NUM
--------------------------
NUM_TAB_TYP(2, 4, 6)
现在你也可以使用IS EMPTY 这个新的SQL 子句来判断嵌套表中的值是否为空。.
0select num from num_tab where num multiset intersect
num_tab_typ(1) is empty.
NUM
--------------------------
NUM_TAB_TYP(2, 4, 6)