• oracle中的join方式汇总


    概述:  平常用的左连接、右连接,都是外连接中的一种

    • 所有的join连接,都可以加上类似where a.id='1'的条件,达到同样的效果。
    • 除了cross join不可以加on外,其它join连接都必须加上on关键字,后都可加where条件
    • 虽然都可以加where条件,但是他们只在标准连接的结果集上查找where条件

     不加任何条件,原始的 TableA 和 TableB 在表中的数据记录如下: 

     

    • 自连接示例:join ,inner join,如下3个sql的执行结果都一样

    select * from TableA a inner join TableB b on a.classid=b.classid;
    select * from TableA a join TableB b on a.classid=b.classid;
    select * from TableA a,TableB b where a.classid=b.classid;

    查询结果:

    • 左外连接示例:left join ,如下2个sql的执行结果都一样

    select * from TableA a left join TableB b on a.classid=b.classid;
    select * from TableA a,TableB b where a.classid=b.classid(+);

    1 --左连接 :列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。
    2 --在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。

    • 右外连接示例:right join ,如下2个sql的执行结果都一样

    select * from TableA a right join TableB b on a.classid=b.classid;
    select * from TableA a,TableB b where a.classid(+)=b.classid;

    • 右外连接示例:full join 
    --全连接 :产生M+N的结果集,列出两表全部的,不符合条件的,以空值代替
    select * from TableA a full join TableB b on a.classid=b.classid;

    • 笛卡尔连接,cross join
    • 1 --笛卡儿乘积连接 :即不加任何条件,达到 M*N 的结果集。
      2 --以下两种查询结果一样。

    select * from TableA a cross join TableB b;

    select * from TableA a,TableB b;

    注意:如果cross join加上where a.classid=b.classid条件,会产生跟自连接一样的结果:

    select * from TableA a cross join TableB b on a.classid=b.classid;

    create table TABLEA
    (
    STUID NUMBER(10) not null,
    CLASSID VARCHAR2(20) not null,
    STUNAME VARCHAR2(20)
    )

    create table TABLEB
    (
    CLASSID VARCHAR2(20) not null,
    CLASSNAME VARCHAR2(20)
    )

  • 相关阅读:
    宇宙纪录片
    IIC总线协议和时序
    使用MATLAB设计FIR滤波器
    rcosfir函数的用法
    ov5640介绍
    FPGA学习之路——PLL的使用
    输入信号与时钟变化一致时,非阻塞方式内部信号变化分析
    使用ChipScope Pro调试硬件
    FPGA烧完程序之后,检测不到网口的
    怎样才能使用ChipScope 加入被优化掉的信号
  • 原文地址:https://www.cnblogs.com/xiaofeng91/p/15687868.html
Copyright © 2020-2023  润新知