深入了解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)



相关文章


Oracle中空扩音机玩味浓
Oracle中巧取指定记录与巧用外关联查询
深入了解Oracle10g中新的多重集运算符(下)
Oracle中空间管理对系统性能的影响
深入了解Oracle10g中新的多重集运算符(中)
Oracle升级许可模型
甲骨文公布第二财季报告成绩可喜
Oracle数据库文件移动的方法和步骤
提高Oracle数据库查询统计速度经验总结
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛