代码之家  ›  专栏  ›  技术社区  ›  gavenkoa

对于非空外键,左外连接等同于内连接吗?

  •  0
  • gavenkoa  · 技术社区  · 6 年前

    每个城市都有自己的国家:

    create table COUNTRY 
    (
         ID number not null,
         NAME varchar,
         primary key (ID)
    );
    
    create table CITY 
    (
         ID number not null,
         NAME varchar,
         COUNTRY_ID number not null,
         primary key (ID)
    );
    
    alter table CITY 
        add constraint CITY_COUNTRY_FK
            foreign key (COUNTRY_ID) references COUNTRY (ID);
    

    详情如下:

    select * 
    from CITY c
    left outer join COUNTRY ctr on ctr.ID = c.COUNTRY_ID
    where ...;
    

    相当于:

    select * 
    from CITY c
    inner join COUNTRY ctr on ctr.ID = c.COUNTRY_ID
    where ...;
    

    因为国家ID是 foreign key not null ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    在这种情况下 left join 基于数据模型是冗余的。这个 NOT NULL 约束意味着每个城市都有一个 country_id .外键约束意味着 国家id s是有效的,并且在 country 桌子

    这些约束结合在一起表示 city 中有匹配的行 .当所有键匹配时 左连接 相当于 inner join .

        2
  •  1
  •   Mouad    6 年前

    基本上是的,如果你确定所有条目都有一个等价项,那么在所有情况下,左边的条目都将等价于内部条目。

    正如你提到的,每个城市都有自己的国家,所以是的,结果是一样的