【发布时间】:2016-06-15 10:27:51
【问题描述】:
两张桌子。第一个表包含每个人,另一个表用于指定哪个人是家庭成员中的孩子:
create table persons(
personID bigint primary key auto_increment,
firstName varchar(30) not null,
lastName varchar(30) not null
);
create table kids(
personID bigint not null,
familyID bigint not null,
grade bigint,
constraint kidReference foreign key (personID) references persons (personID),
constraint familyReference foreign key (familyID) references families (familyID)
);
我想为每个孩子选择所有详细信息。使用以下查询,我得到相同的结果,相同的 相同 执行计划:
(1) 逗号分隔连接:
select persons.personID, persons.firstName, persons.lastName, kids.familyID, kids.grade from persons, kids where persons.personID = kids.personID;
(2)自然连接:
select * from persons natural join kids;
(3)命名连接:
select * from persons join kids using (personID);
(4)条件连接:
select * from persons inner join kids on persons.personID = kids.personID;
这仅仅是可读性的问题吗?在编写查询时,我应该只针对 -what-it-works-best-?
【问题讨论】:
-
您应该避免在
from子句中使用逗号(这是由更强大的join/on子句取代的古老语法)和natural join(等待发生的错误)。否则,请为手头的问题和您最熟悉的语法选择适当的连接。
标签: mysql sql join inner-join natural-join