对于非空外键,左外部联接是否等效于内部联接?

时间:2018-11-26 22:02:18

标签: sql foreign-keys left-join

每个城市都有其所属国家:

CallbackQueryHandler

以下内容:

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 ...;

因为COUNTRY_ID是select * from CITY c inner join COUNTRY ctr on ctr.ID = c.COUNTRY_ID where ...; foreign key

2 个答案:

答案 0 :(得分:2)

在这种情况下,根据数据模型,left join是多余的。 NOT NULL约束意味着每个城市都有一个country_id。外键约束意味着country_id是有效的并且在country表中。

结合起来,这些约束表明city中的每一行在country中具有匹配的行。当所有键都匹配时,left join等效于inner join

答案 1 :(得分:1)

是的,如果您确定所有条目都具有相同的含义,那么在所有情况下,左侧都将等于内部。

正如您所提到的,每个城市都有自己的国家,所以会得到相同的结果

相关问题