zoukankan      html  css  js  c++  java
  • ORACLE 各种连接

    数据说明:

    select * from dave;
    ID  NAME
    8 安庆 1 dave 2 bl 1 bl 2 dave 3 dba 4 sf-express 5 dmm
    select * from b1;
    ID  NAME
    1 dave 2 bl 3 big bird 4 exc 9 怀宁

    1. inner join(join)

       join默认为inner join.

    以下3种写法的效果是一致的:

    select * from dave a inner join b1 b on a.id = b.id;
    select * from dave a join b1 b on a.id = b.id;
    select * from dave a, b1 b where a.id = b.id;
    ID  NAME      ID  NAME
    1 dave 1 dave 2 bl 2 b1 1 bl 1 dave 2 dave 2 b1 3 dba 3 big bird 4 sf-express 4
    exc

    自然连接natural join

    寻找数据类型和列名相同的字段,自动将他们连接起来,并返回所有符合条件的结果。

    下面两种写法的效果是一致的:

    select * from dave a natural join b1 b;
    select a.id, b.name from dave a join b1 b on a.id = b.id and a.name = b.name;
    
    ID  NAME
    1 dave 2 bl

    注意:1. 如果自然连接的两个表有多个字段满足相同名称和类型,则会作为自然链接的条件

       2. 如果数据类型不同,则会报错。

    2. Outer join

    LEFT JOIN /RIGHT JOIN/FULL JOIN. 通常省略OUTER。

    (+)也可以用来表示外连接。

     (一)+操作符只能在where子句中,不能与outer join同时使用。

     (二)+操作符只能执行外连接,如果在where中包含多个条件,则所有条件都包含+操作符。

     (三)+操作符只适用于列,而不能用在表达式上。

     (四)+操作符不能与or in操作符一起使用。

     (五)操作符只能用于实现左外连接和右外连接,不能用于全外连接。

    2.1 左外连接left join +

    + 表示补充,哪个个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。

    以下三种写法的效果是一致的:

    select * from dave a left join b1 b on a.id = b.id;
    select * from dave a left outer join b1 b on a.id = b.id;
    select * from dave a ,b1 b where a.id = b.id(+);
    
    ID  NAME     ID  NAME
    1    bl         1    dave
    1    dave         1    dave
    3    dba        3    big bird
    4    sf-express   4    exc
    2    dave        2    bl
    2    bl         2    bl
    5    dmm          --没有匹配到,为null
    8    安庆         --没有匹配到,为null
    
    

    2.2 右外连接right join +

    以下三种写法的效果是一致的:

    select * from dave a right join b1 b on a.id = b.id;
    select * from dave a right outer join b1 b on a.id = b.id;
    select * from dave a ,b1 b where a.id(+) = b.id;
    
    ID   NAME      ID   NAME
    1    dave        1    dave
    2    bl          2    bl
    1    bl          1    dave
    2    dave        2      bl
    3    dba         3    big bird
    4    sf-express     4    exc
    9    怀宁        --没有匹配到,为null

    2.3 全外连接(full outer join/full join)

    左表和右表都不做限制,所有的记录都显示,两表不足的地方用null填充。全外连接不支持(+)这种写法。

    select * from dave a full join b1 b on a.id = b.id;
    
    ID   NAME    ID  NAME
    8    安庆          --NULL
    1    dave        1    dave
    2    bl         2    bl
    1    bl         1    dave
    2    dave        2    bl
    3    dba          3    big bird
    4    sf-express      4    exc
    5    dmm             --NULL
    --NULL            9    怀宁

     ---------20161125补充内容:

    insert into b1 values('1','test');
    
    insert into b1 values('1','test02');
    
    select * from dave left join b1 on dave.id = b1.id;
       ID    NAME          ID   NAME
        1    bl           1    dave
        1    dave          1   dave
        2    dave            2    b1
        2    bl             2    b1
        3    dba            3    big bird
        4    sf-express        4    exc
        1    bl             1    test
        1    dave           1    test
        1    bl             1    test02
        1    dave           1    test02
        5    dmm                null  
        8    安庆              null
  • 相关阅读:
    WCF系列教程之WCF服务配置工具
    WCF系列教程之WCF服务配置
    C# 多线程系列之异步回调(委托)
    WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
    C# ref与out关键字解析
    WCF系列教程之WCF消息交换模式之单项模式
    WCF系列教程之初识WCF
    C# 装箱和拆箱
    C# checked和unchecked运算符
    Specified key was too long; max key length is 1000 bytes问题解决
  • 原文地址:https://www.cnblogs.com/lyy-totoro/p/5927754.html
Copyright © 2011-2022 走看看