Masalah:
Anda ingin menggabungkan tabel pada beberapa kolom dengan menggunakan kunci majemuk utama di satu tabel dan kunci majemuk asing di tabel lain.
Contoh:
Basis data kami memiliki tiga tabel bernama student
, enrollment
, dan payment
. student
tabel memiliki data di kolom berikut:id
(kunci utama), first_name
, dan last_name
.
id | nama_depan | nama_belakang |
---|---|---|
1 | Ellie | Willson |
2 | Tom | Coklat |
3 | Sandra | Miller |
enrollment
tabel memiliki data dalam kolom berikut:kunci utama (student_id
dan course_code
), is_active
, dan start_date
.
id_siswa | kode_kursus | is_aktif | tanggal_mulai |
---|---|---|---|
1 | GD03 | benar | 2020-01-20 |
1 | AP01 | salah | 10-03-2020 |
2 | SL01 | benar | 05-05-2020 |
3 | SL01 | benar | 01-06-2020 |
payment
tabel memiliki data di kolom berikut:kunci asing (student_id
dan course_code
, kunci utama enrollment
tabel), status
, dan amount
.
id_siswa | kode_kursus | status | jumlah |
---|---|---|---|
1 | GD03 | dibayar | 230 |
1 | AP01 | tertunda | 100 |
2 | SL01 | tertunda | 80 |
3 | SL01 | tertunda | 110 |
Mari kita tunjukkan setiap nama siswa, kode kursus, dan status pembayaran serta jumlah.
Solusi:
SELECT s.last_name, s.first_name, p.course_code, p.status, p.amount FROM enrollment e JOIN student s ON s.id=e.student_id JOIN payment p ON p.course_code=e.course_code AND p.student_id=e.student_id;
nama_belakang | nama_depan | kode_kursus | status | jumlah |
---|---|---|---|---|
Willson | Ellie | GD03 | dibayar | 230 |
Willson | Ellie | AP01 | tertunda | 100 |
Coklat | Tom | SL01 | tertunda | 80 |
Miller | Sandra | SL01 | tertunda | 110 |
Diskusi:
Jika Anda ingin mendapatkan data yang disimpan dalam tabel yang digabungkan dengan kunci majemuk yang merupakan kunci utama di satu tabel dan kunci asing di tabel lain, cukup gunakan kondisi gabung di beberapa kolom.
Dalam satu tabel gabungan (dalam contoh kita, enrollment
), kami memiliki kunci utama yang dibuat dari dua kolom (student_id
dan course_code
). Di tabel kedua (payment
), kami memiliki kolom yang merupakan kunci majemuk asing (student_id
dan course_code
). Bagaimana kita bisa menggabungkan tabel dengan kunci majemuk ini?
Mudah! Kita hanya perlu menggunakan JOIN
klausa dengan lebih dari satu kondisi dengan menggunakan operator AND setelah kondisi pertama. Dalam contoh kami, kami menggunakan kondisi ini:
p.course_code=e.course_code AND p.student_id=e.student_id
Pada bagian pertama, kita menggunakan student_id
kolom dari enrollment
tabel dan student_id
dari payment
meja. Pada kondisi selanjutnya, kita mendapatkan course_code
kolom dari enrollment
tabel dan course_code
dari payment
tabel.
Perhatikan bahwa student_id
dan course_code
kolom membentuk kunci utama dalam enrollment
meja. Oleh karena itu, mereka digunakan dalam payment
tabel sebagai kunci asing.