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.