Masalah:
Anda ingin menggabungkan data dari lebih dari dua tabel hanya menggunakan satu pernyataan SELECT.
Contoh:
Ada empat tabel di database kami:student , teacher , subject , dan learning .
student tabel berisi data dalam kolom berikut:id , first_name , dan last_name .
| id | nama_depan | nama_belakang |
|---|---|---|
| 1 | Tom | Miller |
| 2 | John | Musim semi |
| 3 | Lisa | Williams |
| 4 | Ellie | Barker |
| 5 | James | Moore |
teacher tabel berisi data dalam kolom berikut:id , first_name , last_name , dan subject .
| id | nama_depan | nama_belakang |
|---|---|---|
| 1 | Milan | Smith |
| 2 | Charles | Davis |
| 3 | Tandai | Moore |
subject tabel berisi data dalam kolom berikut:id dan name .
| id | nama |
|---|---|
| 1 | Bahasa Inggris |
| 2 | Seni |
| 3 | Musik |
Akhirnya, learning tabel berisi data dalam kolom berikut:id , mark , subject_id , student_id , dan teacher_id .
| id | tanda | subjek_id | id_siswa | id_guru |
|---|---|---|---|---|
| 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 |
Kami ingin tahu siswa mana yang belajar bahasa Inggris, musik, dan seni, serta guru mana yang mengajar kelas-kelas ini. Pilih mata pelajaran kursus, nama belakang siswa yang mengambil kursus itu, dan nama belakang guru yang memberikan kursus itu.
Solusi:
Gunakan beberapa JOIN s dalam kueri Anda:
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;
Kueri ini mengembalikan catatan dengan nama mata pelajaran dan nama belakang siswa dan guru:
| nama_subjek | s_last_name | t_last_name |
|---|---|---|
| Musik | Moore | Miller |
| Seni | Davis | Miller |
| Bahasa Inggris | Smith | Musim semi |
| Seni | Davis | Williams |
| Musik | Davis | Barker |
| Musik | Moore | Moore |
Data ini berasal dari tiga tabel, jadi kita harus menggabungkan semua tabel tersebut untuk mendapatkan informasi yang kita cari.
Diskusi:
Jika Anda ingin menggabungkan data yang disimpan dalam beberapa tabel (lebih dari dua), Anda harus menggunakan JOIN operator beberapa kali. Pertama, Anda menggabungkan dua tabel seperti biasa (menggunakan JOIN , LEFT JOIN , RIGHT JOIN , atau FULL JOIN , sewajarnya). JOIN operasi membuat "tabel virtual" yang menyimpan data gabungan dari dua tabel. Dalam contoh kita, tabel hasil adalah kombinasi dari learning dan subject tabel.
Langkah selanjutnya adalah menggabungkan tabel hasil ini ke tabel ketiga (dalam contoh kita, student ). Ini seperti JOIN biasa :Anda bergabung dengan "tabel virtual" dan meja ketiga dengan kondisi yang sesuai. Kondisi ini umumnya harus mencakup satu atau lebih kolom dari tabel tambahan (student ) dan satu atau beberapa kolom dari "tabel virtual". Dalam contoh kami, kami mereferensikan student tabel dalam kondisi JOIN kedua.
Pada titik ini, kami memiliki tabel virtual baru dengan data dari tiga tabel. Langkah terakhir adalah menambahkan data dari tabel keempat (dalam contoh kita, teacher ). dan gabung menggunakan kunci dari tabel ini (dalam contoh kita, id dari teacher tabel dan teacher_id dari learning tabel).
Jika Anda harus bergabung dengan tabel lain, Anda dapat menggunakan JOIN yang lain operator dengan kondisi yang sesuai dalam klausa ON. Secara teori, Anda dapat bergabung dengan tabel sebanyak yang Anda inginkan.