Rizki Pratama A former programmer • rizkipratama.com

SELECT dengan JOIN/LEFT JOIN di MySQL

2 min read

MySQL LEFT JOIN Illustration

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:

  1. Inner Join
  2. Self Join
  3. Outer Join, yang memiliki 3 klasifikasi:
    1. Left Outer Join
    2. Right Outer Join
    3. Full Outer Join
  4. 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.

Rizki Pratama A former programmer • rizkipratama.com