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;
相关推荐
在使用`MINUS`时,有几个关键点需要注意: 1. **相同列数和数据类型**:A和B必须具有相同的列数,并且对应列的数据类型必须兼容。这是因为在比较时,Oracle会根据列的顺序和类型进行匹配。 2. **去重**:`MINUS`...
3. **空值处理**:MINUS会忽略两个查询结果中的空值,如果你希望包含空值,可能需要使用其他方法,如UNION或INTERSECT操作。 总之,SQL中的MINUS操作符是一种强大的数据处理工具,可以帮助我们有效地处理数据集的...
1. **列数和类型**:在使用`UNION`、`INTERSECT`和`MINUS`时,所有`SELECT`语句必须有相同数量的列,并且这些列的顺序和数据类型也必须相同。 2. **NULL值**:`UNION`和`INTERSECT`将所有NULL值视为相同的值,而`...
3. **LR或LL解析**:语法分析通常使用自底向上的LR(左到右,右most衍生)或自顶向下的LL(左到右,左most解析)方法。C-minus的简单性可能使得LR或LL解析策略更为适用。LR分析器从右端符号开始,逐步构建语法树;而...
然而,这取决于具体的数据分布和索引策略,因此在实际应用中,应根据具体情况选择最适合的方法。 5. **在源码和工具中的应用** 在源码开发和数据库工具中,这些操作符常用于数据分析、数据迁移、数据清理等任务。...
"云原生"(Cloud Native)则是一种构建和运行应用程序的方法,它强调微服务、容器化、声明式API和持续交付,以实现快速、灵活和可靠的云环境部署。 考虑到minus80与Zookeeper的关联,这个库可能提供了与Zookeeper...
这个规则导致了典型的悬挂e l s e二义性,可以用一种标准的方法解决:e l s e部分通常作为当前i f的一个子结构立即分析(“最近嵌套”非二义性规则)。 16. iteration_stmt -> while ( expression ) statement w h i l...
在这个项目中,采用的是LL(1)解析技术,这是一种自左至右的预测解析方法,"1"代表使用当前输入符号和第一个文法项进行预测。LL(1)解析器生成的是一个从输入符号串到抽象语法树(AST)的映射。抽象语法树是源代码结构...
毫秒,可以使用`DateTime`结构的`ParseExact`或`TryParseExact`方法将其转换为`DateTime`对象。然后,通过减法操作就可以得到`TimeSpan`结果,表示两个时间点之间的时间差。例如: ```csharp string time1Str = "05...
### rownum用法详解 #### 一、rownum基本概念 `rownum` 是 Oracle 数据库中的一个特殊字段,主要用于给查询结果...掌握 `rownum` 的正确使用方法有助于更高效地进行数据库操作,尤其是在需要进行分页查询的情况下。
提供的源代码中,使用了C++的`fstream`库来处理文件输入输出,`iostream.h`、`string.h`和`fstream.h`头文件被包含。`main`函数中定义了保留字数组`word`和对应的符号名数组`wsym`。程序通过循环读取源文件中的字符...
在C++中,通常会定义一个词法分析器类,包含一个或多个方法来读取输入字符流,识别记号并生成相应的记号对象。 2. `WFtoNFA.cpp`:这个文件涉及到正则表达式到非确定有限状态自动机(NFA)的转换。词法分析通常会用...
在SQL查询中,`INTERSECT` 和 `MINUS` 是两种用于集合操作的运算符,它们在某些数据库系统如PostgreSQL、Oracle等中被广泛使用。然而,MySQL并不直接支持这两种运算符,但可以通过一些替代策略来实现类似的功能。...
对于C Minus这种简单的编程语言,使用表驱动方式进行词法分析是一种常见的方法。本文将深入探讨C Minus Compiler如何利用表驱动技术进行词法分析,并结合DFA(确定有限状态自动机)转换图和状态转换表来解释这个过程...
在MySQL数据库中,`NOT IN` 和 `MINUS` 是两种常用的子查询操作,用于从结果集中排除特定的行。然而,这些操作在某些情况下可能会导致性能问题,特别是在处理大量数据时。本篇文章将探讨如何对这两种操作进行优化,...
词法分析的设计思路是使用 Top-Down 解析方法,使用递归下降解析来实现语法分析。词法分析的主要步骤是: 1. 读取 Token 序列 2. 语法分析,使用 Top-Down 解析方法 3. 输出语法树 词法分析的设计思想是基于 Top-...
在实现C_minus的词法分析器时,可以使用正则表达式来定义各种标记的模式,然后使用诸如 Lex 或 Flex 这样的工具自动生成词法分析器代码。另一种方法是手动编写词法分析器,这需要更深入地理解字符处理和状态机的概念...
MySQL数据库在标准SQL语法中并未直接提供`...总的来说,虽然MySQL本身不支持`MINUS`和`INTERSECT`,但通过使用其他SQL构造,我们可以实现相同的功能。这展示了SQL的灵活性,以及开发者如何适应不同的数据库系统特性。
用法 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 " ) ...
语法分析通常使用上下文无关文法(CFG)进行,可以采用自底向上或自顶向下的方法,如LL解析或LR解析。 在这个课程设计中,你可能会使用类似Flex和Bison的工具来实现词法分析器和语法分析器。Flex是一个用于生成词法...