問題:
1つのSELECTステートメントのみを使用して3つ以上のテーブルのデータを結合したい。
例:
データベースには4つのテーブルがあります:student 、teacher 、subject 、およびlearning 。
student テーブルには、次の列のデータが含まれています:id 、first_name 、およびlast_name 。
| id | first_name | last_name |
|---|---|---|
| 1 | トム | ミラー |
| 2 | ジョン | 春 |
| 3 | リサ | ウィリアムズ |
| 4 | エリー | バーカー |
| 5 | ジェームズ | ムーア |
teacher テーブルには、次の列のデータが含まれています:id 、first_name 、last_name 、およびsubject 。
| id | first_name | last_name |
|---|---|---|
| 1 | ミラノ | スミス |
| 2 | チャールズ | デイビス |
| 3 | マーク | ムーア |
subject テーブルには、次の列のデータが含まれています:id およびname 。
| id | 名前 |
|---|---|
| 1 | 英語 |
| 2 | アート |
| 3 | 音楽 |
最後に、learning テーブルには、次の列のデータが含まれています:id 、mark 、subject_id 、student_id 、およびteacher_id 。
| id | マーク | subject_id | student_id | Teacher_id |
|---|---|---|---|---|
| 1 | 4 | 1 | 2 | 1 |
| 2 | 5 | 2 | 3 | 2 |
| 3 | 4 | 3 | 1 | 3 |
| 4 | 3 | 2 | 1 | 2 |
| 5 | 2 | 3 | 5 | 3 |
| 6 | 3 | 3 | 4 | 2 |
どの生徒が英語、音楽、芸術を勉強しているのか、そしてどの教師がこれらのクラスを指導しているのかを知りたいのです。コースの科目、そのコースを受講している学生の名前、およびそのコースを提供している教師の名前を選択します。
解決策:
複数のJOINを使用する sクエリ内:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
このクエリは、コースの科目の名前と、生徒と教師の名前を含むレコードを返します。
| subject_name | s_last_name | t_last_name |
|---|---|---|
| 音楽 | ムーア | ミラー |
| アート | デイビス | ミラー |
| 英語 | スミス | 春 |
| アート | デイビス | ウィリアムズ |
| 音楽 | デイビス | バーカー |
| 音楽 | ムーア | ムーア |
このデータは3つのテーブルから取得されるため、必要な情報を取得するには、これらすべてのテーブルを結合する必要があります。
ディスカッション:
複数(2つ以上)のテーブルに保存されているデータを組み合わせる場合は、JOINを使用する必要があります オペレーターを複数回。まず、通常どおりに2つのテーブルを結合します(JOINを使用) 、LEFT JOIN 、RIGHT JOIN 、またはFULL JOIN 、 適切に)。 JOIN 操作により、2つのテーブルから結合されたデータを格納する「仮想テーブル」が作成されます。この例では、結果テーブルはlearning およびsubject テーブル。
次のステップは、この結果テーブルを3番目のテーブル(この例では、student )。これは通常のJOINのようなものです :「仮想テーブル」と3番目のテーブルを適切な条件で結合します。この条件には通常、追加のテーブル(student )および「仮想テーブル」からの1つ以上の列。この例では、student 2番目のJOIN条件のテーブル。
この時点で、3つのテーブルからのデータを含む新しい仮想テーブルができました。最後のステップは、4番目のテーブル(この例では、teacher )。これらのテーブルのキー(この例では、id)を使用して結合します teacher テーブルとteacher_id learning 表)。
別のテーブルを結合する必要がある場合は、別のJOINを使用できます ON句に適切な条件を持つ演算子。理論的には、必要な数のテーブルを結合できます。