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.