Oracle minus用法详解及应用实例

 更新时间:2017年01月03日 14:21:40   投稿:lqh  
这篇文章主要介绍了Oracle minus用法详解及应用实例的相关资料,这里对oracle minus的用法进行了具体实例详解,需要的朋友可以参考下

Oracle minus用法

       “minus”直接翻译为中文是“减”的意思,在Oracle中也是用来做减法操作的,只不过它不是传统意义上对数字的减法,而是对查询结果集的减法。A minus B就意味着将结果集A去除结果集B中所包含的所有记录后的结果,即在A中存在,而在B中不存在的记录。其算法跟Java中的Collection的removeAll()类似,即A minus B将只去除A跟B的交集部分,对于B中存在而A中不存在的记录不会做任何操作,也不会抛出异常。

       Oracle的minus是按列进行比较的,所以A能够minus B的前提条件是结果集A和结果集B需要有相同的列数,且相同列索引的列具有相同的数据类型。此外,Oracle会对minus后的结果集进行去重,即如果A中原本多条相同的记录数在进行A minus B后将会只剩一条对应的记录,具体情况请看下面的示例。

        下面我们来看一个minus实际应用的示例,假设我们有一张用户表t_user,其中有如下记录数据:

id

no

name

age

level_no

1

00001

a

25

1

2

00002

b

30

2

3

00003

c

35

3

4

00004

d

45

1

5

00005

e

30

2

6

00006

f

35

3

7

00007

g

25

1

8

00008

h

35

2

9

00009

i

20

3

10

00010

j

25

1

       那么:

       (1)“select id from t_user where id<6 minus select id from t_user where id between 3 and 7”的结果将为:

id

1

2

       (2)“select age,level_no from t_user where id<8 minus select age,level_no from t_user where level=3”的结果为:

 

age

level_no

25

1

30

2

45

1

        看到这样的结果,可能你会觉得有点奇怪,为何会是这样呢?我们来分析一下。首先,“select age,level_no from t_user where id<8”的结果将是这样的:

age

level_no

25

1

30

2

35

3

45

1

30

2

35

3

25

1

       然后,“select age,level_no from t_user where level=3”的结果将是这样的:

age

level_no

35

3

35

3

20

3

       然后,直接A minus B之后结果应当是:

age

level_no

25

1

30

2

45

1

30

2

25

1

       这个时候,我们可以看到结果集中存在重复的记录,进行去重后就得到了上述的实际结果。其实这也很好理解,因为minus的作用就是找出在A中存在,而在B中不存在的记录。

       上述示例都是针对于单表的,很显然,使用minus进行单表操作是不具备优势的,其通常用于找出A表中的某些字段在B表中不存在对应记录的情况。比如我们拥有另外一个表t_user2,其拥有和t_user表一样的表结构,那么如下语句可以找出除id外,在t_user表中存在,而在t_user2表中不存在的记录。

select no,name,age,level_no from t_user minus select no,name,age,level_no from t_user2;

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • [Oracle] 常用工具集之SQL*Loader的用法

    [Oracle] 常用工具集之SQL*Loader的用法

    SQL*Loader是Oracle提供的用于数据加载的一种工具,它比较适合业务分析类型数据库(数据仓库),能处理多种格式的平面文件,批量数据装载比传统的数据插入效率更高
    2013-07-07
  • Oracle中3种常用的分页查询方法

    Oracle中3种常用的分页查询方法

    这篇文章主要给大家介绍了关于Oracle中3种常用的分页查询方法,分页查询就是把query到的结果集按页显示,比如一个结果集有1W行,每页按100条数据库,而你获取了第2页的结果集,需要的朋友可以参考下
    2023-09-09
  • Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复

    Oracle数据库的备份与恢复...
    2007-03-03
  • Oracle数据库服务器修改操作系统时间的注意事项详解

    Oracle数据库服务器修改操作系统时间的注意事项详解

    在本篇文章里小编给大家整理的是一篇关于Oracle数据库服务器修改操作系统时间的注意事项详解,需要的朋友们可以参考下。
    2020-03-03
  • linux自动运行rman增量备份脚本

    linux自动运行rman增量备份脚本

    这篇文章主要介绍了linux自动运行rman增量备份脚本,实现周日和周三凌晨1:00执行0级全库备份,周一、二、四、五、六凌晨1:30执行增量备份,需要的朋友可以参考下
    2014-03-03
  • Oracle的四道经典面试题分享

    Oracle的四道经典面试题分享

    这篇文章主要给大家介绍了关于Oracle的四道经典面试题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Oracle具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Oracle数据库备份还原详解

    Oracle数据库备份还原详解

    大家好,本篇文章主要讲的是Oracle数据库备份还原详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • win7安装oracle10g 提示程序异常终止 发生未知错误

    win7安装oracle10g 提示程序异常终止 发生未知错误

    本文将详细介绍oracle 10g 在win7下安装提示程序异常终止,发生未知错误的解决方法,需要的朋友可以参考下
    2012-12-12
  • MS Server和Oracle中对NULL处理的一些细节差异

    MS Server和Oracle中对NULL处理的一些细节差异

    SQL Server和Oracle中对插入数据值包含空的处理有所差异,在SQL Server中,我们可以把表字段设计为非空,但我们仍然可以通过下面语句执行插入操作
    2009-06-06
  • 使用instantclient客户端连接oracle数据库

    使用instantclient客户端连接oracle数据库

    这篇文章介绍了使用instantclient客户端连接oracle数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论