首页 > 数据库 >Oracle外连接等价于反连接的情况

Oracle外连接等价于反连接的情况

时间:2023-06-15 20:23:44浏览次数:60  
标签:00 -----------------------------------------------------------------------------

 

Oracle外连接等价于反连接的情况

 

Oracle外连接等价于内连接的情况中提到了外连接中被驱动表的字段作为谓词条件出现在where中,并且不为is null的话,等价于内连接。

当外连接中被驱动表的连接列作为谓词条件出现在where中,且是做is null过滤,若select出现的列都属于驱动表的时候,这种情况下实际等价于反连接。

如下:

3条sql均等价,执行计划均相同,可以互相改写,但是需要特别注意改写为not in的SQL中无论是驱动表还是被驱动表需要加上连接列 is not null的限制,因为前2条t.col=tt.col已经排除了null值。

第一条sql执行计划中id=1出席那了ANTI关键字表示执行路径本质是反连接。

select t.* from t left join tt on t.col = tt.col where tt.col is null;                                              select t.* from t where not exists (select 1 from tt where t.col=tt.col);                                            select t.* from t where t.col not in (select tt.col from tt where tt.col is not null) and t.col is not null;
Plan hash value: 3667628246                                                                                         Plan hash value: 3667628246                                                                                          Plan hash value: 3667628246
                                                                                                                                                                                                                                         
------------------------------------------------------------------------------------------------------------------  ------------------------------------------------------------------------------------------------------------------   ------------------------------------------------------------------------------------------------------------------
| Id  | Operation            | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |  | Id  | Operation            | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |   | Id  | Operation            | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |
------------------------------------------------------------------------------------------------------------------  ------------------------------------------------------------------------------------------------------------------   ------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |      |      1 |        |      1 |00:00:00.02 |      52 |       |       |          |  |   0 | SELECT STATEMENT     |      |      1 |        |      1 |00:00:00.01 |      52 |       |       |          |   |   0 | SELECT STATEMENT     |      |      1 |        |      1 |00:00:00.01 |      52 |       |       |          |
|*  1 |  HASH JOIN RIGHT ANTI|      |      1 |   1000K|      1 |00:00:00.02 |      52 |  2616K|  2616K| 3107K (0)|  |*  1 |  HASH JOIN RIGHT ANTI|      |      1 |   1000K|      1 |00:00:00.01 |      52 |  2616K|  2616K|  902K (0)|   |*  1 |  HASH JOIN RIGHT ANTI|      |      1 |   1000K|      1 |00:00:00.01 |      52 |  2616K|  2616K| 3112K (0)|
|   2 |   TABLE ACCESS FULL  | TT   |      1 |   1000K|      2 |00:00:00.01 |       6 |       |       |          |  |   2 |   TABLE ACCESS FULL  | TT   |      1 |   1000K|      2 |00:00:00.01 |       6 |       |       |          |   |   2 |   TABLE ACCESS FULL  | TT   |      1 |   1000K|      2 |00:00:00.01 |       6 |       |       |          |
|   3 |   TABLE ACCESS FULL  | T    |      1 |   1000K|  24578 |00:00:00.01 |      46 |       |       |          |  |   3 |   TABLE ACCESS FULL  | T    |      1 |   1000K|  24578 |00:00:00.01 |      46 |       |       |          |   |   3 |   TABLE ACCESS FULL  | T    |      1 |   1000K|  24578 |00:00:00.01 |      46 |       |       |          |
------------------------------------------------------------------------------------------------------------------  ------------------------------------------------------------------------------------------------------------------   ------------------------------------------------------------------------------------------------------------------
                                                                                                                                                                                                                                         
Predicate Information (identified by operation id):                                                                 Predicate Information (identified by operation id):                                                                  Predicate Information (identified by operation id):
---------------------------------------------------                                                                 ---------------------------------------------------                                                                  ---------------------------------------------------
                                                                                                                                                                                                                                         
   1 - access("T"."COL"="TT"."COL")                                                                                    1 - access("T"."COL"="TT"."COL")                                                                                     1 - access("T"."COL"="TT"."COL")

防偷。

 

标签:00,-----------------------------------------------------------------------------
From: https://www.cnblogs.com/PiscesCanon/p/17484028.html

相关文章

  • 问题解决sql文件上传和蚁剑连接
    1.无法连接上自己的ip:发现问题是上传的木马不在127.0.0.1的文件下时,会导致解析不到木马,要将木马上传到127.0.0.1的文件下连接2.解决sql上传一句话木马问题要先在mysql的配置文件my.ini中添加导入导出数据库的地址:secure_file_priv=D:\phpstudy_pro\WWW然后重启数据库,可以进行sq......
  • Oracle外连接等价于内连接的情况
     Oracle外连接等价于内连接的情况 实际之前有过研究,Oracle外连接的执行计划中没有出现OUTER的例子,现在展开来讲。以左连接为例子,有SQL如下:左边的执行计划中id=2并带有OUTER,表示不是外连接。右边的执行计划和左边的执行计划一模一样,证明左边的SQL完全等价与右边的SQL。se......
  • 利用VMware安装centos7+docker部署Oracle数据库
    由于本机资源有限,docke容器能够利用最小资源实现目前需求准备:VMware、centos镜像文件VMware安装centos后,设置网络桥接模式,联通外网,为安装docker准备执行:首先,将docker部署再虚拟机内,(新机器直接安装,若安装过旧版本需要卸载,请参考https://www.runoob.com/docker/centos-docker-i......
  • oracledb处理游标中的对象类型数据
    如果Oracle定义了以下对象类型1CREATEORREPLACETYPE"TY_RESULT"2ASOBJECT3(4itemCHAR(8),5cntNUMBER(20),67--构造空对象8CONSTRUCTORFUNCTIONTY_RESULTRETURNSELFASRESULT,9);并用于存储过程的返回,放在refcursor中 用以......
  • BLE中GAP层中广播、扫描、连接等概念在LL层的具体实现
    BLE中GAP层中广播、扫描、连接等概念在LL层的具体实现在spec中GAP的章节里对广播、扫描、连接的概念进行了说明。但缺乏具体实现的解释。Vol3:CoreSystemPackage[Hostvolume]PartC:GenericAccessProfile而在LL层章节中则提供了相关GAP相关数据包交互的流程。Vol......
  • Windows Server 2022 安装配置 MYSQL 及远程连接
    官方下载地址:https://dev.mysql.com/downloads/mysql/解压后新建my.ini放在解压目录下。配置环境变量:此电脑->属性->高级系统设置->环境变量->系统变量。找到path,新建D:\ProgramFiles\mysql-8.0.33-winx64\bin[mysqld]#设置3306端口port=3306#设置mysql的安装目录based......
  • oracle常用函数(持续更新)
    1.table()把返回结果集合的函数返回的结果,以表的形式返回例:table(p_split('1,2,3'),',')2.to_char()按照指定格式输出字符串to_char(sysdate,'YYYYMMDD')//fm除去空格和0//9999999.0099:允许小数点左边最大正数为7位,小数点右边最少2位,最多4位,且在第5位进行四舍五入......
  • 外连接消除技术应用
    上回介绍了外连接消除技术。今天更进一步来聊聊这个话题。select*fromarightjoinbona.m1=b.m1leftjoinconc.c1=b.c1wherec.c1in(1,2,3);基于外连接消除技术,这个语句leftjoin可以改写成innerjoin:select*fromarightjoinbona.m1=b.m1......
  • 【SQL 优化器技术系列】 外连接消除
    Oracle2005年出了一个30多页的小册子,《QueryOptimizationinOracleDatabase10gRelease2》,介绍了常见的优化器技术。我是做SQL执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。外连接消除就是将一个outerjoin转换成innerjoin。......
  • 数据库连接池-Druid的使用
       packagedruid;/**druid数据连接池**/importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.io.FileInputStream;importjava.io.FileReader;importjava.sql.Connection;importjava.util.Properties;p......