当前位置:  数据库>oracle

Oracle 左外连接的一些测试

    来源: 互联网  发布时间:2017-06-09

    本文导语: 为了更加深入左外连接,我们做一些测试,外连接的写法有几种形式,我们可以通过10053跟踪到最终SQL转换的形式。 --初始化数据 create table A (  id number,  age number);create table b(  id number,  age number);insert into A values(1,10);insert into A v...

为了更加深入左外连接,我们做一些测试,外连接的写法有几种形式,我们可以通过10053跟踪到最终SQL转换的形式。

--初始化数据

create table A

(
  id number,
  age number
);
create table b
(
  id number,
  age number
);
insert into A values(1,10);
insert into A values(2,20);
insert into A values(3,30);
insert into B values(1,10);
insert into B values(2,20);
commit;

 

--用10053找到最终转换后的SQL

alter session set session_cached_cursors =0;
alter session set events '10053 trace name context forever, level  1';
explain plan for select * from A left join B on A.id = B.id and A.age > 5;
explain plan for select * from A left join B on A.id = B.id WHERE A.age > 5;
explain plan for select * from A left join B on A.id = B.id and b.age > 5;
explain plan for select * from A left join B on A.id = B.id where b.age > 5;
alter session set events '10053 trace name context off' ;


select * from A left join B on A.id = B.id and A.age > 5;
        ID        AGE         ID        AGE
---------- ---------- ---------- ----------
         1         10          1         10
         2         20          2         20
         3         30
--Final query after transformations:
SELECT "A"."ID" "ID", "A"."AGE" "AGE", "B"."ID" "ID", "B"."AGE" "AGE"
  FROM "GG_TEST"."A" "A", "GG_TEST"."B" "B"
 WHERE "A"."ID" = "B"."ID"(+)
   AND "A"."AGE" > CASE WHEN("B"."ID"(+) IS NOT NULL) THEN 5 ELSE 5 END


select * from A left join B on A.id = B.id WHERE A.age > 5;
        ID        AGE         ID        AGE
---------- ---------- ---------- ----------
         1         10          1         10
         2         20          2         20
         3         30
--Final query after transformations:
SELECT "A"."ID" "ID", "A"."AGE" "AGE", "B"."ID" "ID", "B"."AGE" "AGE"
  FROM "GG_TEST"."A" "A", "GG_TEST"."B" "B"
 WHERE "A"."AGE" > 5
   AND "A"."ID" = "B"."ID"(+);


select * from A left join B on A.id = B.id and b.age > 5; 
        ID        AGE         ID        AGE
---------- ---------- ---------- ----------
         1         10          1         10
         2         20          2         20
         3         30  
--Final query after transformations:
SELECT "A"."ID" "ID", "A"."AGE" "AGE", "B"."ID" "ID", "B"."AGE" "AGE"
  FROM "GG_TEST"."A" "A", "GG_TEST"."B" "B"
 WHERE "A"."ID" = "B"."ID"(+)
   AND "B"."AGE"(+) > 5

--这种形式你可以看到外连接失效,CBO还是非常聪明的
select * from A left join B on A.id = B.id where b.age > 5;
        ID        AGE         ID        AGE
---------- ---------- ---------- ----------
         1         10          1         10
         2         20          2         20
--Final query after transformations:
SELECT "A"."ID" "ID", "A"."AGE" "AGE", "B"."ID" "ID", "B"."AGE" "AGE"
  FROM "GG_TEST"."A" "A", "GG_TEST"."B" "B"
 WHERE "B"."AGE" > 5
   AND "A"."ID" = "B"."ID";


    
 
 

您可能感兴趣的文章:

  • 网间Oracle的连接,远程连接Oracle服务器??
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • 不想装oracle却还要在redhat8.0下用jdbc连接oracle如何实现?
  • 我用JBuilder 7连接局域网内一ORACLE 9( 在本机可以连接)的问题?
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • oracle 数据库连接分析
  • Linux系统下利用java连接Oracle 10G
  • Jbuilder 7.0 连接 Oracle 数据库
  • 怎么直接通过JDBC连接oracle?
  • 请教: Javaswing 和 Oracle JDBC thin 连接的问题
  • opendbx 为什么连接不上oracle?
  • 100分寻求最优化的连接oracle的java程序,请给我讲出理由,我是初学者,在做项目时不想让连接oracle影响我的程序性能
  • 如何在JBuilder中连接Oracle数据库?
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • 请教JSP与ORACLE连接问题。
  • jdbc连接oracle
  • 关于Jbuilder7连接oracle9??
  • 再问java 连接oracle 问题,急!
  • jsp文件连接oracle失败
  • 讨论:jdbc连接oracle数据库
  • 测试添加Oracle中Blob数据类型对象
  • Oracle融合中间件在Dell服务器上测试创世界纪录
  • oracle group by语句实例测试
  • 三招助你做好Oracle数据库备份测试
  • Oracle Dataguard备库失败与主库响应测试
  • oracle 使用递归的性能提示测试对比
  • oracle 11g 设置用户密码大小写敏感测试
  • oracle—SQL技巧之(一)连续记录查询sql案例测试
  • Oracle数据库异步调用基本原理及测试
  • oracle存储过程中return和exit区别概述及测试
  • 知识进阶 完全了解 Oracle 标签安全测试
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 请教:.profile中:if [ -d /opt/oracle/db01/app/oracle/product/9.2.0 ]是什么意思?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,