[MySQL] Query JOIN
JOIN adalah keyword SQL untuk melakukan query pada dua tabel atau lebih. Dengan JOIN kita dapat menampilkan data dari beberapa tabel yang saling berelasi. JOIN ada beberapa variasi INNER JOIN (JOIN), LEFT JOIN, RIGHT JOIN, dan OUTER JOIN (FULL OUTER JOIN).
Struktur dan Relasi Tabel
Ada dua tabel yang digunakan untuk contoh yaitu tabel tbl_peserta dan tbl_kursus. Tabel tbl_peserta berelasi dengan tbl_kursus di mana id_kursus pada tbl_kursus menjadi foreign key (kunci tamu) pada tbl_peserta. Jadi jika dilakukan query akan ditampilkan si peserta mengambil judul kursus apa.
Tabel tbl_peserta
1 2 3 4 5 6 7 8 9 | +------------+--------------+-----------+ | id_peserta | nama_peserta | id_kursus | +------------+--------------+-----------+ | 1 | Aco | 1 | | 2 | Baco | 1 | | 3 | Ciko | 2 | | 4 | Didi | 5 | | 5 | Eko | NULL | +------------+--------------+-----------+ |
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE TABLE `tbl_peserta` ( `id_peserta` int(11) NOT NULL AUTO_INCREMENT, `nama_peserta` varchar(30) NOT NULL, `id_kursus` int(11) unsigned DEFAULT NULL, PRIMARY KEY (`id_peserta`) ) ENGINE=InnoDB; INSERT INTO `tbl_peserta` (`id_peserta`, `nama_peserta`, `id_kursus`) VALUES (1, 'Aco', 1), (2, 'Baco', 1), (3, 'Ciko', 2), (4, 'Didi', 5), (5, 'Eko', NULL); |
Tabel tbl_kursus
1 2 3 4 5 6 7 8 9 | +-----------+--------------+ | id_kursus | judul_kursus | +-----------+--------------+ | 1 | HTML5 | | 2 | CSS3 | | 3 | JavaScript | | 4 | PHP | | 5 | MySQL | +-----------+--------------+ |
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE TABLE `tbl_kursus` ( `id_kursus` int(11) NOT NULL AUTO_INCREMENT, `judul_kursus` varchar(30) NOT NULL, PRIMARY KEY (`id_kursus`) ) ENGINE=InnoDB; INSERT INTO `tbl_kursus` (`id_kursus`, `judul_kursus`) VALUES (1, 'HTML5'), (2, 'CSS3'), (3, 'JavaScript'), (4, 'PHP'), (5, 'MySQL'); |
INNER JOIN (JOIN)
JOIN menampilkan data yang sama dari kedua tabel yaitu nilai yang sama dari id_kursus pada tabel tbl_peserta dengan nilai pada id_kursus pada tbl_kursus. Atau dengan kata lain hanya menampilkan data peserta yang sudah mengambil judul kursus. Si Eko pada tbl_peserta tidak tampil karena nilai id_kursus = NULL dan JavaScript dan PHP pada tbl_kursus tidak tampil karena kedua judul kursus tersebut tidak ada yang mengambil (primary keynya tidak masuk pada tbl_peserta).
1 2 3 | SELECT tbl_peserta.nama_peserta, tbl_kursus.judul_kursus FROM tbl_peserta INNER JOIN tbl_kursus ON tbl_peserta.id_kursus = tbl_kursus.id_kursus; |
Hasilnya
1 2 3 4 5 6 7 8 | +--------------+--------------+ | nama_peserta | judul_kursus | +--------------+--------------+ | Aco | HTML5 | | Baco | HTML5 | | Ciko | CSS3 | | Didi | MySQL | +--------------+--------------+ |
LEFT JOIN
LEFT JOIN menampilkan semua data pada tabel sebelah kiri (tbl_peserta) meskipun data dari tabel sebelah kanan bernilai NULL.
1 2 3 | SELECT tbl_peserta.nama_peserta, tbl_kursus.judul_kursus FROM tbl_peserta LEFT JOIN tbl_kursus ON tbl_peserta.id_kursus = tbl_kursus.id_kursus; |
Hasilnya
1 2 3 4 5 6 7 8 9 | +--------------+--------------+ | nama_peserta | judul_kursus | +--------------+--------------+ | Aco | HTML5 | | Baco | HTML5 | | Ciko | CSS3 | | Didi | MySQL | | Eko | NULL | +--------------+--------------+ |
RIGHT JOIN
RIGHT JOIN menampilkan semua data pada tabel sebelah kanan (tbl_kursus) meskipun data dari tabel sebelah kiri bernilai NULL.
1 2 3 | SELECT tbl_peserta.nama_peserta, tbl_kursus.judul_kursus FROM tbl_peserta RIGHT JOIN tbl_kursus ON tbl_peserta.id_kursus = tbl_kursus.id_kursus; |
Hasilnya
1 2 3 4 5 6 7 8 9 10 | +--------------+--------------+ | nama_peserta | judul_kursus | +--------------+--------------+ | Aco | HTML5 | | Baco | HTML5 | | Ciko | CSS3 | | NULL | JavaScript | | NULL | PHP | | Didi | MySQL | +--------------+--------------+ |
OUTER JOIN (FULL OUTER JOIN)
OUTER JOIN menampilkan semua data dari kedua tabel baik itu data yang bernilai sama maupun data yang bernilai NULL.
1 2 3 4 5 6 7 8 9 | SELECT tbl_peserta.nama_peserta, tbl_kursus.judul_kursus FROM tbl_peserta LEFT JOIN tbl_kursus ON tbl_peserta.id_kursus = tbl_kursus.id_kursus UNION SELECT tbl_peserta.nama_peserta, tbl_kursus.judul_kursus FROM tbl_peserta RIGHT JOIN tbl_kursus ON tbl_peserta.id_kursus = tbl_kursus.id_kursus; |
Hasilnya
1 2 3 4 5 6 7 8 9 10 11 | +--------------+--------------+ | nama_peserta | judul_kursus | +--------------+--------------+ | Aco | HTML5 | | Baco | HTML5 | | Ciko | CSS3 | | Didi | MySQL | | Eko | NULL | | NULL | JavaScript | | NULL | PHP | +--------------+--------------+ |
via sitepoint.com
selamat mencoba 🙂