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 minus用法详解及应用实例的相关资料,这里对oracle minus的用法进行了具体实例详解,需要的朋友可以参考下
此资源为.txt文件,里面描述了sql中minus的使用方法和案例,如果需要可以下载
这个规则导致了典型的悬挂e l s e二义性,可以用一种标准的方法解决:e l s e部分通常作为当前i f的一个子结构立即分析(“最近嵌套”非二义性规则)。 16. iteration_stmt -> while ( expression ) statement w h i l...
仅仅使用select语句就可以完成分页,学习一下rownum 会有用处的
用法 user> ( require '[com.gfredericks.minus :as minus]) nil user> ( def the-data { :foo 12 , :bar [ 1 2 3 ]}) #'user/the-data user> ( def the-different-data ( -> the-data ( assoc :bam " okay " ) ...
Doing INTERSECT and MINUS in MySQL Doing an INTERSECT An INTERSECT is simply an inner join where we compare the tuples of one table with those of the other, and select those that appear in both while ...
使用Electron创建菜单栏桌面应用程序的高级方法。 该模块提供样板,用于使用Electron设置菜单栏应用程序。 您所要做的只是将其指向index.html , menubar将处理其余部分。 :check_mark_button: 仅一种依赖性和一...
假设以下功能在目标浏览器中可用: (由) (由) 使用了以下功能,但在库中嵌入了回退: - 如果 requestAnimationFrame 不可用,则将使用基于 setInterval 的方法作为后备。 - 项目中包含class-list 。独立使用...
在此数据集上分别使用PCA和SVD方法进行特征提取,并报告获得的特征值以及特征向量结果,对数据属性进行分析,使用盒图分别对获得的最优属性进行分析和对比。 import pandas as pd import os from numpy import * ...
编译原理 从词法分析器到语法分析器的实现,词法分析器以有穷状态机实现,而语法分析器主要使用LL1算法实现,中间使用了大量的图论算法。
开发扩展其方法时使用$.extend方法,即jQuery.extend(object); 代码如下: $.extend({ add:function(a,b){return a+b;} , minus:function(a,b){return a-b;} }); 页面中调用: 代码如下: var i = $.add(3,2); var j ...
ASP.NET MVC 3简单算数表达式生成验证码,使用 HtmlHelper扩展方法。没有使用WCF等。使用C#编写。 关键特性: 验证码为简单的数学运算 随机替换预先定义的文本(+为plus,-为minus) 文本颜色随机改变 代码中没有开放...
NumberControl max = { 4 } min = { 0 } value = { 0 } onChange = { fn } onReject = { fn } className = 'user-supplied-main-class' childClasses = { { minus : 'user-supplied-minus-class' , num : 'user-...
安装npm install --save chart.js chartjs-plugin-error-bars用法数据集必须定义一个errorBars对象,该对象包含错误栏属性键(与使用的刻度相同)以及值plus和minus 。 加值始终为正,反之亦然。 分类量表的用法: ...
Kakoune 编辑器的 Idris 突出显示和 IDE 操作 安装 确保安装了 NodeJS 和 。...用法 有关示例项目,请参阅tests/目录 # The plugin expects the "*.ipkg" file to be in the same folder as the "src" dir
问题 你想使用生成器(协程)替代系统线程来实现并发。这个有时又被称为用户级线程或绿色线程。 解决方案 要使用生成器实现自己的并发,你首先要对生成器函数和 yield 语句有深刻理解。... print('T-minus', n) yield
12.1 groupby和having的用法 12.1.1 添加一个orderby 12.1.2 执行顺序 12.2 分组视图 12.3 用别名重命名列 12.4 分组视图的功能 12.4.3 对列和分组函数进行排序 12.4.4 连接列 12.5 更多分组可能性 第13章 当一个...
3.5.9 使用哪种命名方法 62 3.6 使用Oracle配置文件 63 3.7 使用管理工具 64 3.7.1 OEM/网格控件 64 3.7.2 Oracle网络管理器 64 3.7.3 OEM控制台 65 3.7.4 OEM组件 65 3.7.5 Oracle网络配置助手 65 3.7.6 ...
12.1 groupby和having的用法 12.1.1 添加一个orderby 12.1.2 执行顺序 12.2 分组视图 12.3 用别名重命名列 12.4 分组视图的功能 12.4.3 对列和分组函数进行排序 12.4.4 连接列 12.5 更多分组可能性 第13章 当一个...
# 使用这种方法可以对测试用例排序 # tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")] # suite.addTests(tests) # 使用TestLoader的方法传入TestCase suite....