結合をできるだけ簡単に説明するようにしています。
いくつかの関係情報を保存する必要があるとしましょう: 個人 (名前、姓) と個人に割り当てられたいくつかの電子メール。
まず、person 情報を table person に保存します。一意の行識別子が必要ですpersonId
。これにより、人物データベース内の正確な人物を指すことができます。
table persons
personId, name, surname
1, John, Foo
2, Mike, Bar
このようなテーブルがある場合、他のテーブルに個人のメールを保存できます。この場合、一意の行識別子を作成する必要はありませんが、これらの行識別子をすべてのテーブルに格納することをお勧めします。PersonId フィールドは、その電子メールの所有者を示しています。
table emails
emailId, personId, address
1, 1, john.foo@company.com
2, 1, john.foo@goomail.com
3, 2, mike.bar@company.com
4, 2, mike.bar@yaaho.com
これで、join を使用してデータを選択できます。
SELECT persons.Name, persons.Surname, emails.address
FROM
persons
join
emails
ON
persons.personId = emails.personId
そのクエリはデータ (住所が割り当てられた人物) を返します。
John, Foo, john.foo@company.com
John, Foo, john.foo@goomail.com
Mike, Bar, mike.bar@company.com
Mike, Bar, mike.bar@yaaho.com
それは明らかですか?
ジョインがよくわからない場合は、phpcademy.org または thenewboston.org にアクセスしてください。SQL を含む多くの言語と技術に関する非常に優れたチュートリアルがあります。
後で追加:
次のように、複数のテーブルを結合することもできます。
SELECT primarykey, key1,key2, other, fields, detail_t_1.something
FROM
master_t
JOIN
detail_t_1 on detail_t_1
ON master_t.key1 = detail_t_1.key1,
detail_t_2 on detail_t_2
ON master_t.key2 = detail_t_2.key2
後で追加:
複数の「詳細」行がある場合 (私の例では 2 つの電子メールのように)、返されるデータには、各電子メール アドレスを持つ 1 人の人物が複数回含まれます。
SQL では、返されるデータは常にツリーではなくテーブルの形式です。