本文主要介绍Oracle minus用法的详细说明和应用实例的相关资料。这里详细讲解一下甲骨文减的用法,有需要的朋友可以参考一下。
Oracle minus用法
“减”直接翻译成中文就是“减”的意思,在甲骨文中也用于减法,只不过不是传统的数字减法,而是查询结果集的减法。A减B是指将结果集A中包含的所有记录从结果集B中删除的结果,即存在于A中但不存在于B中的记录,算法类似于Java中的Collection的removeAll(),即A减B只会删除A和B的交集,不会对存在于B中但不存在于A中的记录做任何事情,也不会抛出异常。
Oracle的减是按列比较的,所以A能够减B的前提条件是结果集A和结果集B需要有相同的列数,列索引相同的列有相同的数据类型。此外,Oracle将在减去后对结果集进行重复数据删除,即如果A中有许多相同的记录,则在减去b后将只有一条对应的记录,详细信息请参见下面的示例。
我们来看一个负号实际应用的例子。假设我们有一个用户表t_user,其中包含以下记录数据:
身份证明(identification)
不
名字
年龄
级别_否
一个
00001
a
25
一个
2
00002
b
30
2
三
00003
c
35
三
四
00004
d
45
一个
五
00005
e
30
2
六
00006
f
35
三
七
00007
g
25
一个
八
00008
h
35
2
九
00009
我
20
三
10
00010
j
25
一个
所以:
(1)“从t _ user中选择id,其中id 6减去从t _ user中选择id,其中id在3和7之间”的结果将是:
身份证明(identification)
一个
2
(2)“select age,level _ no from t _ user where id8 MINUS select age,level _ no from t _ user where level=3”的结果为:
年龄
级别_否
25
一个
30
2
45
一个
看到这样的结果,你可能会觉得有些奇怪。为什么会这样呢?我们来分析一下。首先,“select age,level _ no from t _ user where id8”的结果如下所示:
年龄
级别_否
25
一个
30
2
35
三
45
一个
30
2
35
三
25
一个
然后,“select age,level _ no from t _ user where level=3”的结果将如下所示:
年龄
级别_否
35
三
35
三
20
三
然后,直接在A减去B之后,结果应该是:
年龄
级别_否
25
一个
30
2
45
一个
30
2
25
一个
这时我们可以看到结果集中有重复记录,上面的实际结果是经过去重后得到的。其实很好理解,因为减号的作用是找出A中存在而b中不存在的记录。
以上例子都是针对单表的。显然,对于单表操作使用减号是没有优势的。它通常用于找出表A中的某些字段在表b中没有对应记录的情况,例如,如果我们有另一个表t_user2,它与t_user表具有相同的表结构,那么下面的语句可以找出t_user表中存在但t_user2表中除id之外不存在的记录。
select no,name,age,level_no from t_user减去select no,name,age,level _ no from t _ user2
感谢您的阅读,希望能帮到您,也感谢您对本站的支持!