• 数据库 连接(JOIN) LZU


    连接也称为θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

    连接运算中有两种最为重要的连接,一种是等值连接(Equijoin),另一种是自然连接(Nature Join)等值连接是从关系R和S中的笛卡尔积中选取A,B属性值相等的那些元组;自然连接它要求两个关系中进行比较的分量必须是相同的属性组,并且把结果中重复的属性列去掉。

    Example:  

    create table R (
       A varchar2(10),
       B varchar2(10),
       C varchar2(10)
    );
    
    insert into R(A,B,C) values ('a1','b1','5');
    insert into R(A,B,C) values ('a1','b2','6');
    insert into R(A,B,C) values ('a2','b3','8');
    insert into R(A,B,C) values ('a2','b4','12');
    
    create table S(
         B varchar2(10),
         D varchar2(10)
    );
    
    insert into S(B,D) values ('b1','3');
    insert into S(B,D) values ('b2','7');
    insert into S(B,D) values ('b3','10');
    insert into S(B,D) values ('b3','2');
    insert into S(B,D) values ('b5','2');
    commit;  
    

     

    R

    A

    B

    C

    a1

    b1

    5

    a1

    b2

    6

    a2

    b3

    8

    a2

    b4

    12

    S

    B

    D

    b1

    3

    b2

    7

    b3

    10

    b3

    2

    b5

    2

    关系R和关系S分别如上图所示。

    1、一般连接(C<D)

    R-S(C<E)

    A

    R.B

    C

    S.B

    D

    a1

    b1

    5

    b1

    3

    a1

    b1

    5

    b2

    10

    a1

    b2

    6

    b2

    7

    a1

    b2

    6

    b3

    10

    a2

    b3

    8

    b3

    10

    2、等值连接select * from (select * from R) R join (select * from S) S on R.B=S.B)

    A

    R.B

    C

    S.B

    D

    a1

    b1

    5

    b1

    3

    a1

    b2

    6

    b2

    7

    a2

    b3

    8

    b3

    10

    a2

    b3

    8

    b3

    2

    3、自然连接select A,S.B(R.B)as B,C,D from (select * from R) R join (select * from S) S on R.B=S.B)

    A

    B

    C

    D

    a1

    b1

    5

    3

    a1

    b2

    6

    7

    a2

    b3

    8

    10

    a2

    b3

    8

    2

    4、外连接(Outer JOIN)

    A

    B

    C

    D

    a1

    b1

    5

    3

    a1

    b2

    6

    7

    a2

    b3

    8

    10

    a2

    b3

    8

    2

    a2

    b4

    12

    NULL

    NULL

    b5

    NULL

    2

    4.1 左外连接(Left Join:select A,S.B(R.B) as B,C,D from (select * from R) R Left join (select * from S) S on R.B=S.B)

    只保留左边关系R中要舍弃的元组。

    A

    B

    C

    D

    a1

    b1

    5

    3

    a1

    b2

    6

    7

    a2

    b3

    8

    10

    a2

    b3

    8

    2

    a2

    b4

    12

    NULL

    4.2 右外连接(Right Join:select A,S.B(R.B) as B,C,D from (select * from R) R right join (select * from S) S on R.B=S.B)

    只保留右边关系S中要舍弃的元组。

    A

    B

    C

    D

    a1

    b1

    5

    3

    a1

    b2

    6

    7

    a2

    b3

    8

    10

    a2

    b3

    8

    2

    NULL

    b5

    NULL

    2

     


  • 相关阅读:
    SpringBoot启动报错 java.lang.NoClassDefFoundError: javax/validation/ValidationException
    Java String类创建对象问题
    Java代码执行顺序
    Java抽象类与接口(2) ------接口
    Java抽象类与接口(1) ------抽象类
    Manjaro kde2020 使用记录
    生活常用小插件
    技术汇总
    Vue中使用websocket的正确使用方法
    js封装一个websocket
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539935.html
Copyright © 2020-2023  润新知