Oracle中minus,oracle minus语句性能

Oracle中minus,oracle minus语句性能,Oracle minus用法详解及应用实例

本文主要介绍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

感谢您的阅读,希望能帮到您,也感谢您对本站的支持!

Oracle中minus,oracle minus语句性能