Walau materi pada tulisan ini tergolong ke dalam bagian yang mudah, tetapi tidak ada salahnya untuk mencoba mengulas dengan penyampaian yang berbeda dari saya sendiri.
MySQL JOIN digunakan untuk mengambil data dari dua atau lebih tabel. Pada halaman resmi MySQL untuk JOIN, penjelasan berupa kata-kata yang dapat dipahami mengenai JOIN tidak ditemukan, hanya ada banyak baris-baris sintaks saja. Oleh karena itu, dengan terpaksa saya mengambil kutipan dari laman referensi yang lain.
Berikut penjelasan tentang JOIN yang saya kutip dari SQLCourse2:
To put it simply, the “join” makes relational database systems “relational”. Joins allow you to link data from two or more tables together into a single query result — from one single SELECT statement.
Penggunaan query MySQL SELECT dengan JOIN/LEFT JOIN dapat diimplementasikan pada kasus pengambilan data dari tabel turunan (yang memiliki foreign key) dengan mengatur nilai dari satu atau lebih field dari tabel referensi agar dicocokkan pada tabel tujuan, agar kemudian jika ditemukan data yang cocok, data tersebut akan digabungkan dengan data pada tabel referensi.
MySQL JOIN memiliki beberapa jenis yang masing-masingnya memiliki kegunaan tersendiri, yaitu:
- Inner Join
- Self Join
- Outer Join, yang memiliki 3 klasifikasi:
- Left Outer Join
- Right Outer Join
- Full Outer Join
- Cross Join
Yang akan dibahas lebih lanjut pada tulisan ini yaitu Left Outer Join atau pada MySQL sederhananya cukup disebut Left Join. Dikutip dari TechOnTheNet, Left Join mengandung makna seperti ini:
This type of join (LEFT OUTER JOIN) returns all rows from the LEFT-hand table specified in the ON condition and only those rows from the other table where the joined fields are equal (join condition is met).
Contoh kasus
Salah satu contoh kasus yang dapat kita ambil yaitu pada pengembangan online shopping web, yaitu saat kita ingin mengetahui nama_barang
dari sebuah id_barang
yang terdapat pada data di tabel detil_pemesanan
, sedangkan data barang yang mengandung id_barang
dan nama_barang
terdapat pada tabel barang
.
Untuk lebih jelasnya, perhatikan tabel detil_pemesanan
berikut:
-- -- Struktur dan data pada tabel `detil_pemesanan` -- id_pemesanan id_barang qty -------------------------------- PSN001 BRG001 2 PSN001 BRG003 1 PSN002 BRG001 2 PSN002 BRG004 2
Kita ingin menampilkan detil suatu id_pemesanan
dengan menampilkan id_barang
, nama_barang
, dan qty
. Namun di detil_pemesanan
tidak ada nama_barang
. Nah, untuk mendapatkan data nama_barang
, tentunya kita harus mengambil data dari tabel barang
.
Perhatikan struktur dan data dari tabel barang
ini:
-- -- Struktur dan data pada tabel `barang` -- id_barang nama_barang -------------------------- BRG001 Barang 1 BRG002 Barang 2 BRG003 Barang 3 BRG004 Barang 4
Solusi
Berdasarkan contoh kasus tersebut, query MySQL yang dibutuhkan untuk menampilkan detil suatu pemesanan dengan ID pemesanan PSN001
tersebut adalah dapat dilihat pada Kode 3.
-- -- Kode 3 -- LEFT JOIN tabel `barang` dengan `detil_pemesanan` -- SELECT dps.id_barang, brg.nama_barang, dps.qty FROM barang brg LEFT JOIN detil_pemesanan dps ON dps.id_barang = brg.id_barang WHERE dps.id_pemesanan = 'PSN001';
Ada query yang lebih sederhana namun strukturnya sama saja seperti LEFT JOIN untuk kasus ini. Hanya dengan menggunakan SELECT dari dua tabel dan WHERE yang mengaitkan kolom key tiap tabel, query yang dibutuhkan dapat dilihat pada Kode 4 berikut.
-- -- Kode 4 -- Cara lain selain LEFT JOIN -- SELECT dps.id_barang, brg.nama_barang, dps.qty FROM detil_pemesanan dps, barang brg WHERE brg.id_barang = dps.id_barang AND dps.id_pemesanan = 'PSN001';
Pengeksekusian kedua query di atas memiliki hasil yang sama, yaitu:
-- -- Contoh hasil eksekusi query yang telah disebutkan -- id_barang nama_barang qty ------------------------------ BRG001 Barang 1 2 BRG003 Barang 3 1
Dapat dilihat pada contoh hasil eksekusi di atas, bahwa data di field nama_barang
dari tabel tujuan telah digabungkan bersama dengan data pada tabel referensi.
Jika kamu merasa artikel ini telah menyelesaikan masalah kamu atau bermanfaat bagi kamu, silakan share.