`
wayJava
  • 浏览: 29244 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
社区版块
存档分类
最新评论

oracle 求差集

阅读更多

目前知道有4种方法

1,minus

2, not in  (保证返回的值不会出现NULL值)

3,not exists

4,left join where is null

 ----

IN 和EXISTS在逻辑上是相同的。IN语句比较由子查询返回的值,并在输出查询中过滤某些行。EXISTS语句比较行的值,并在子查询中过滤某些行。对于NULL值的情况,行的结果是想同的。然而当逻辑被逆向使用,即NOT IN 及NOT EXISTS时,问题就会产生:NOT IN 语句实质上等同于使用!=(<>)比较每一值,假如测试为FALSE或者NULL,结果为失败。

一个基本通用的结论:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

EXISTS的执行流程
select * from t1 where exists ( select null from t2 where y = x )
可以理解为:
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then
OUTPUT THE RECORD
end if
end loop
对于in 和 exists的性能区别:
如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了

NOT EXISTS的执行流程
select .....
from rollup R
where not exists ( select 'Found' from title T
where R.source_id = T.Title_ID);
可以理解为:
for x in ( select * from rollup )
loop
if ( not exists ( that query ) ) then
OUTPUT
end if;
end;

分享到:
评论

相关推荐

    Oracle 两个逗号分割的字符串,获取交集、差集(sql实现过程解析)

    在Oracle数据库中,有时我们需要处理以逗号分隔的字符串,并从中提取特定的信息,比如找出交集和差集。在本篇文章中,我们将探讨如何利用SQL实现这一目标,特别是针对两个字段都包含逗号分隔的字符串的情况。 首先...

    Oracle_Database_11g_SQL_-_Master_SQL_and_PLSQL_in_the_Oracle_Database

    此外,新加入了集合操作,如并集、差集和交集,便于对多个结果集进行操作。 3. **PL/SQL增强**:PL/SQL支持了匿名块、存储过程、函数、触发器等,11g版本中增加了异常处理的灵活性,以及对游标的改进,使得处理大量...

    oracle oca 试题.

    熟悉子查询、连接查询、集合操作(并集、交集、差集)等高级SQL技巧。 3. **数据库创建与管理**:学习如何创建和配置新的Oracle数据库,包括数据库实例的启动、关闭,以及数据文件、表空间的管理。 4. **性能监控...

    oracleOcp课程大纲

    6. 探索高级SQL查询技术,如合并查询(MERGE)、并集(UNION ALL)、交集(INTERSECT)、差集(MINUS),以及GROUP BY、ROLLUP、CUBE等聚合函数,提升数据提取效率。 7. 学习编写SQL脚本,生成报表样式的输出结果,...

    oracle笔记set运算符及练习

    oracle笔记set运算符及练习,求并集,交集,差集,有具体的代码案例!

    Oracle教程,java调用oracle

    7. **集合运算**:集合运算包括UNION(合并结果集)、INTERSECT(交集)和EXCEPT(差集),它们允许从多个查询结果中组合或筛选数据。 8. **创建和管理表**:这涉及CREATE TABLE语句来定义新表,ALTER TABLE用于...

    ORACLE经典学习笔记

    - MINUS操作符返回两个查询结果的差集,即第一个查询结果中存在而第二个查询结果中不存在的记录。 19. **事务处理** - 事务是指一系列数据库操作的集合,通常由INSERT、UPDATE或DELETE语句组成。事务开始于第一...

    Oracle高级sql学习与练习

    INTERSECT用来返回两个查询结果集的交集,而MINUS则返回第一个查询结果集相对于第二个查询结果集的差集。 2. EXISTS和NOT EXISTS子句通常用于子查询中,用以判断子查询返回的结果集是否为空。EXISTS子句在找到至少...

    oracle常用查询语句示例

    此外,Oracle还支持集合操作,如并集(UNION),交集(INTERSECT)和差集(MINUS): ```sql -- 并集:返回两个查询结果的唯一行 SELECT column FROM table1 UNION SELECT column FROM table2; -- 交集:返回两个...

    oracle4的表查询和基本函数.docx

    INTERSECT用于取交集,MINUS用于取差集。 创建新表从查询结果中是一个方便的功能。如下所示,我们可以创建一个名为t_test的新表,其中包含与EMP表中相同的empno和ename数据: ```sql CREATE TABLE t_test (empno, ...

    Oracle函数文档

    - **高级查询**:子查询,UNION/UNION ALL合并查询结果,INTERSECT找出交集,MINUS找出差集。 5. **事务和并发控制**: - **事务管理**:COMMIT提交,ROLLBACK回滚,SAVEPOINT设置保存点。 - **锁定机制**:ROW...

    Oracle教程.docx

    * MINUS:从一个结果集中减去另一个结果(也就是求差集) 8. 修改数据 * INSERT:在表中插入一行 * INSERT INTO SELECT:从查询结果中将数据插入到表中 * INSERT ALL:多重插入语句,将多行插入到一个或多个表...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    Oracle 10g SQL操作和PLSQL所有命令集合

    集合操作包括并集(UNION)、交集(INTERSECT)和差集(MINUS)。 5. **连接查询**:用于合并多个表的数据,依据表之间的关联关系,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接...

    Oracle高级操作函数学习笔记

    集合操作可以将多个SELECT查询结果集进行合并、求交集和差集等。具体操作包括: 1. **UNION和UNION ALL** - UNION操作用于合并两个或多个SELECT语句的结果集,并自动去除重复的行。 - UNION ALL操作也会合并结果...

    oracle 学习笔记

    2. 集合运算包括并集、交集、差集等。 3. 集合运算符如UNION、INTERSECT和MINUS等用于实现集合运算。 4. 子查询、连接和集合的总结涉及如何根据查询需求选择合适的查询方式。 十五、排名分页问题 1. Rownum是Oracle...

    1Z0-051-Oracle.Database 11g SQL Fundamentals I Exam Guide Exam(OCA)

    8. 组合查询:学会使用UNION、INTERSECT和EXCEPT操作来组合多个查询的结果集,实现数据的合并、交集和差集。 9. 存储过程与函数:Oracle 11g允许创建自定义的存储过程和函数,它们可以封装复杂的业务逻辑,提高代码...

Global site tag (gtag.js) - Google Analytics