未加星标

Oracle minus用法详解及应用实例

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二03 | 时间 | 作者 红领巾 ] 0人收藏点击收藏

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;

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

本文数据库(综合)相关术语:系统安全软件

主题: 算法Java数据谢大其实
分页:12
转载请注明
本文标题:Oracle minus用法详解及应用实例
本站链接:http://www.codesec.net/view/523567.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(44)