//创建表1
create table test1
(
name varchar(10),
sex varchar(10),
age int
);
insert into test1 values('luxin','female',25);
insert into test1 values('tom','female',26);
insert into test1 values('mary1','male',27);
insert into test1 values('money','male',27);
insert into test1 values('tony','male',28);
insert into test1 values('tony1','male',19);
//创建表2
create table test2
(
name varchar(10),
sex varchar(10),
age int
);
insert into test2 values('luxin','female',25);
insert into test2 values('tom','female',26);
insert into test2 values('mary2','male',27);
insert into test2 values('money','male',27);
insert into test2 values('tony','male',28);
insert into test2 values('tony2','male',19);
-------------------------------------------
select * from test1 minus select * from test2;
结果:
NAME SEX AGE
---------- ---------- ----------
mary1 male 27
tony1 male 19
-----------------------------------------------------------
select * from test2 minus select * from test1;
结果:
NAME SEX AGE
---------- ---------- ----------
mary2 male 27
tony2 male 19
结论:Minus返回的总是左边表中的数据,它返回的是差集。
用表1-表2中的数据,如果相同,则去掉,否则返回表1中的数据。
==========================================================
今天在看数据集合时偶然看到了SQL 有MINUS,可以达到相同的目的
具体如下:
SQL中的MINUS关键字
SQL中有一个MINUS关键字,它运用在两个SQL语句上,它先找出第一条SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中。如果有的话,那这一笔记录就被去除,而不会在最后的结果中出现。如果第二个SQL语句所产生的结果并没有存在于第一个SQL语句所产生的结果内,那这笔资料就被抛弃,其语法如下:
[SQL Segment 1]
MINUS
[SQL Segment 2]
其实简单的一句话就是找出第一条SQL查询的不在第二条SQL语句查询结果中的那些记录,并且要注意最后返回的结果集中,不同的记录只会被列出一次!
下面是我做的实验,很明显能够看出MINUS的效率,made_order共23万笔记录,charge_detail共17万笔记录
性能比较:
SELECT order_id FROM made_order
MINUS
SELECT order_id FROM charge_detail
1.14 sec
SELECT a.order_id FROM made_order a
WHERE NOT exists (
SELECT 1
FROM charge_detail
WHERE order_id = a.order_id
)
18.19 sec
SELECT order_id FROM made_order
WHERE order_id NOT in (
SELECT order_id
FROM charge_detail
)
20.05 sec
还有其它一下关键字:
INTERSECT (交集)
UNION ALL 并集
分享到:
相关推荐
MINUS关键字用于在两个查询结果之间找到差异,返回的结果是只存在于第一个查询中的行。需要注意的是,MINUS操作也会自动去除重复行。 最后,游标(CURSOR)是Oracle处理结果集的一种方式,主要用于存储过程和函数。...
本文介绍了三种在Oracle中对比两张表数据一致性的方法:使用11g提供的`dbms_comparison`包、利用`EXCEPT`或`MINUS`关键字以及编写自定义脚本。每种方法都有其适用场景,可以根据实际需求选择合适的方法来确保数据的...
在Java开发中,我们经常需要对数据库进行分页查询,但是Oracle数据库不支持Limit关键字,那么如何在Oracle中实现分页查询呢?下面,我们将详细介绍Oracle中SQL不能用Limit的处理方法。 一、使用RowNum实现分页查询 ...
在Oracle 11g中,SQL语句不区分大小写,尽管如此,开发者习惯上会将关键字以大写形式书写,以便于代码的阅读与理解。字符串数组在Oracle中的小标是从1开始的,这不同于某些编程语言如C或Java,它们是从0开始计数。 ...
连接两字符串可以使用||,UNION、UNION ALL、INTERSECT和MINUS则用于合并或比较多个查询的结果集。 在SQL查询中,SELECT语句是最基础的部分,用于从表中提取数据。例如,`SELECT * FROM jobs`会显示jobs表的所有列...
3. **删除用户**:如果不再需要某个用户,可以使用`DROP USER username CASCADE`删除,`CASCADE`关键字确保与用户相关的对象一并被删除。 4. **使用profile管理用户口令**:Profile是Oracle中用于控制用户资源和...
3. **集合操作符**:UNION、INTERSECT和MINUS用于合并或对比多个查询的结果集。 4. **分组和聚合函数**:GROUP BY和HAVING子句用于按一个或多个列对结果进行分组,而聚合函数如COUNT、SUM、AVG、MAX和MIN则对分组后...
在Oracle SQL中,可以使用`JOIN`关键字进行多表查询,如内连接(INNER JOIN)、外连接(LEFT JOIN, RIGHT JOIN, FULL JOIN)等。 十、子查询和集合操作 子查询可以在查询中嵌套另一个查询,而集合操作如UNION、...
- Oracle和SQL Server都支持`JOIN`,但Oracle的`MINUS`和`INTERSECT`操作在SQL Server中可以用`NOT EXISTS`和`INNER JOIN`或`UNION ALL`替代。 通过了解这些差异,开发者可以在跨平台项目中更高效地编写SQL语句,...
- **数据操作**:可以使用`UNION`、`INTERSECT`、`MINUS`等关键字对查询结果进行合并或筛选。 ### 四、Oracle安装与配置 - **安装准备**: - 需要预留至少4.5GB的空间。 - 安装前需要检查操作系统版本是否兼容。 ...
本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...
- **集合操作符**:介绍UNION、INTERSECT、MINUS等集合操作符的使用。 - **窗口函数**:讲解OVER子句中的窗口函数,如ROW_NUMBER、RANK等。 #### 十、数据字典 - **视图**:介绍视图的概念、创建方法及其用途。 - *...
6. **SELECT高级查询**:教授多表连接查询,JOIN关键字的应用,集合操作,以及UNION, INTERSECT, MINUS等集合运算。 7. **PL/SQL编程基础**:介绍PL/SQL编程语言,用于编写存储过程、函数和触发器,实现数据库...
附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 第1部分 关键的数据库概念 第1章 OracleDatabase11g体系结构 1.1 数据库和实例 1.2 数据库技术 1.2.1 存储数据 1.2.2 数据保护 1.2.3...
3. 集合运算符如UNION、INTERSECT和MINUS等用于实现集合运算。 4. 子查询、连接和集合的总结涉及如何根据查询需求选择合适的查询方式。 十五、排名分页问题 1. Rownum是Oracle数据库中用于表示查询结果集中行号的一...
附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 第1部分 关键的数据库概念 第1章 OracleDatabase11g体系结构 1.1 数据库和实例 1.2 数据库技术 1.2.1 存储数据 1.2.2 数据保护 1.2.3...