0

2 つのテーブル。最初のテーブルはすべての人を保持し、別のテーブルはどの人が家族の一員として子供であるかを指定するために使用されます。

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- だけを目指すべきですか?

4

1 に答える 1

1

あなたの場合、クエリの各バージョンは同じ基本的なクエリになります。

コンマ構文は、WHERE 句に基づいて結合を見つけようとします。where persons.personID = kids.personIDになりinner join kids on persons.personID = kids.personIDます。=内部結合が発生し*=、左結合が発生することに注意してください。

自然な結合は、同じ名前の列、つまりPersonID. 自然結合によって一般的な名前が検索されるため、特定の名前を指定する必要はありません。デフォルトは内部結合です。

名前付き結合は、両方が共有するusing (PersonID)列名で両方のテーブルを結合するための省略表現です。単独では、内部結合として解釈されます。PersonIDJOIN

そして最終版は、解釈の必要なく、あなたが望むものを正確に綴っています.

驚きがないので、私の好みは最終版です。

そうは言っても、JOIN using (personID)これも明確です。これは、最終バージョンの省略形です。

于 2016-06-15T10:52:22.427 に答える