• 数据库内连接与外连接


    数据库内连接与外连接

    http://blog.csdn.net/tianhuadihuo/article/details/6728485

    数据库中涉及两个表之间的数据查询通常使用连接的方法实现。连接分为内连接和外连接。

    内连接:把两个表中数据对应的数据查出来 
    外连接:以某个表为基础把对应数据查出来(全连接是以多个表为基础) 

    内连接:

    指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

    外连接:

    连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

    左外连接:

    左边表数据行全部保留,右边表保留符合连接条件的行

    右外连接:

    右边表数据行全部保留,左边表保留符合连接条件的行

    全外连接:

    左外连接 union 右外连接

    例子:

    数据库版本:Oracle 9i

    TESTA,TESTB,TESTC,各有A, B两列

    A

    B

    001     

         10A 

    002

         20A

     

    A

    B

    001     

         10B

    003

         30B

     

    A

    B

    001     

    10C

    004

    40C

     

    连接分为两种:内连接与外连接。

     

    A.内连接

    内连接,即最常见的等值连接,例:

     

    SELECT * 
    FROM TESTA,TESTB
    WHERE TESTA.A=TESTB.A


    结果

    A

    B

    A

    B

    001    

    10A    

    001   

    10B   

     

    B.外连接

    外连接分为左外连接,右外连接和全外连接。

    1.  左外连接 left outer join 或者 left join

    左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

     

    SELECT *
    FROM TESTA 
    LEFT OUTER JOIN TESTB 
    ON TESTA.A=TESTB.A

    Oracle 支持另一种写法

     

    SELECT * 
    FROM TESTA,TESTB
    WHERE TESTA.A=TESTB.A(+)

    结果:

    A

    B

    A

    B

    001    

    10A    

    001    

    10B  

    002

    10B

     

     

     

    三个表做左外连接

    SELECT *
    FROM TESTA 
    LEFT OUTER JOIN TESTB 
    ON TESTA.A=TESTB.A
    LEFT OUTER JOIN TESTC
    ON TESTA.A=TESTC.A

    Oracle 支持的另外一种写法

     

    SELECT *
    FROM TESTA,TESTB,TESTC
    WHERE TESTA.A=TESTB.A(+)
    AND TESTA.A=TESTC.A(+)

     

    结果:

    A

    B

    A

    B

    A

    B

    001   

    10A    

    001   

    10B   

    001   

    10C

    002

    20A

     

     

     

     

     

    2. 右外连接 right outer join 或者 right join

    右外连接是在等值连接的基础上加上被连接表的不匹配数据

     

    SELECT *
    FROM TESTA 
    RIGHT OUTER JOIN TESTB 
    ON TESTA.A=TESTB.A

    Oracle支持的另一种写法

    SELECT *
    FROM TESTA,TESTB
    WHERE TESTA.A(+)=TESTB.A

     

    结果:

    A

    B

    A

    B

    001   

    10A   

    001   

    10B

     

     

    003

    30B

     

    3.全外连接 full outer join 或者 full join

    全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上

     

    SELECT * 
    FROM TESTA 
    FULL OUTER JOIN TESTB
    ON TESTA.A=TESTB.A

    全外连接的等价写法,对同一表先做左连接,然后右连接

     

    SELECT  TESTA.*,TESTB.*
    FROM TESTA
    LEFT OUTER JOIN TESTB
    ON TESTA.A=TESTB.A
    UNION
    SELECT
     TESTA.*,TESTB.*
    FROM TESTB
    LEFT OUTER JOIN TESTA
    ON TESTA.A=TESTB.A

    结果:

    A

    B

    A

    B

    001   

    10A   

    001   

    10B

    002

    20A

     

     

     

     

    003

    30B

     
  • 相关阅读:
    Codeforces Round #555 (Div. 3) A B C1(很水的题目)
    蓝桥杯国赛之阶乘位数
    POJ-1258 Agri-Net(最小生成树)
    昂贵的聘礼(枚举区间+最短路)
    地斗主(矩阵快速幂)
    救救兔子(二分)
    shell编程之sed编辑器&gawk程序
    typedef struct与struct的区别
    iOS内存管理编程指南
    Object c 基础知识
  • 原文地址:https://www.cnblogs.com/cheng07045406/p/3655984.html
Copyright © 2020-2023  润新知