Perbedaan INNER JOIN, LEFT JOIN, dan RIGHT JOIN di MySQL

Saat bekerja dengan database relasional, hampir tidak mungkin Anda hanya bekerja dengan satu tabel. Anda pasti perlu menggabungkan data dari dua tabel atau lebih. Di MySQL, operasi...

Perbedaan INNER JOIN, LEFT JOIN, dan RIGHT JOIN di MySQL

Saat bekerja dengan database relasional, hampir tidak mungkin Anda hanya bekerja dengan satu tabel. Anda pasti perlu menggabungkan data dari dua tabel atau lebih. Di MySQL, operasi penggabungan tabel ini dilakukan dengan JOIN. Ada beberapa jenis JOIN yang paling sering digunakan: INNER JOIN, LEFT JOIN, dan RIGHT JOIN. Artikel ini menjelaskan perbedaannya secara praktis dengan contoh nyata.

Persiapan Tabel Contoh

Sebelum membahas perbedaan JOIN, kita siapkan dua tabel sebagai contoh: tabel karyawan dan tabel departemen.

-- Buat tabel departemen
CREATE TABLE departemen (
    id_dept INT AUTO_INCREMENT PRIMARY KEY,
    nama_dept VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

-- Buat tabel karyawan
CREATE TABLE karyawan (
    id_karyawan INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    id_dept INT,
    gaji DECIMAL(10, 2)
) ENGINE=InnoDB;

-- Insert data departemen
INSERT INTO departemen (nama_dept) VALUES
('Engineering'),
('Marketing'),
('HR'),
('Finance');

-- Insert data karyawan (beberapa tidak punya departemen)
INSERT INTO karyawan (nama, id_dept, gaji) VALUES
('Andi',   1, 8000000),
('Budi',   1, 7500000),
('Citra',  2, 6000000),
('Deni',   NULL, 5500000),
('Eka',    5, 6500000);  -- id_dept 5 tidak ada di tabel departemen

Perhatikan bahwa Deni tidak memiliki departemen (NULL), dan Eka memiliki id_dept yang tidak ada di tabel departemen. Kondisi ini penting untuk memahami perbedaan setiap jenis JOIN.

INNER JOIN โ€“ Hanya Data yang Cocok

INNER JOIN mengembalikan baris-baris yang memiliki kecocokan di kedua tabel. Jika salah satu sisi tidak memiliki pasangan, baris tersebut tidak akan muncul di hasil.

-- INNER JOIN: hanya tampilkan karyawan yang punya departemen valid
SELECT
    k.nama AS nama_karyawan,
    d.nama_dept AS departemen,
    k.gaji
FROM karyawan k
INNER JOIN departemen d ON k.id_dept = d.id_dept
ORDER BY k.nama;

Hasil: Hanya Andi, Budi, dan Citra yang muncul. Deni (id_dept NULL) dan Eka (id_dept tidak valid) tidak muncul karena tidak ada kecocokan di tabel departemen.

LEFT JOIN โ€“ Semua Data dari Tabel Kiri

LEFT JOIN mengembalikan semua baris dari tabel kiri, ditambah baris yang cocok dari tabel kanan. Jika tidak ada kecocokan di tabel kanan, kolomnya diisi NULL.

-- LEFT JOIN: tampilkan semua karyawan, termasuk yang tidak punya departemen
SELECT
    k.nama AS nama_karyawan,
    d.nama_dept AS departemen,
    k.gaji
FROM karyawan k
LEFT JOIN departemen d ON k.id_dept = d.id_dept
ORDER BY k.nama;

Hasil: Semua 5 karyawan muncul. Deni dan Eka tetap tampil, namun kolom departemen mereka berisi NULL.

Menemukan Data Tanpa Pasangan dengan LEFT JOIN

LEFT JOIN sangat berguna untuk mencari data yang tidak memiliki pasangan di tabel lain.

-- Temukan karyawan yang belum memiliki departemen
SELECT
    k.nama AS nama_karyawan,
    k.id_dept
FROM karyawan k
LEFT JOIN departemen d ON k.id_dept = d.id_dept
WHERE d.id_dept IS NULL;

RIGHT JOIN โ€“ Semua Data dari Tabel Kanan

RIGHT JOIN adalah kebalikan dari LEFT JOIN. Ia mengembalikan semua baris dari tabel kanan, ditambah baris yang cocok dari tabel kiri. Kolom dari tabel kiri akan NULL jika tidak ada kecocokan.

-- RIGHT JOIN: tampilkan semua departemen, termasuk yang tidak punya karyawan
SELECT
    k.nama AS nama_karyawan,
    d.nama_dept AS departemen
FROM karyawan k
RIGHT JOIN departemen d ON k.id_dept = d.id_dept
ORDER BY d.nama_dept;

Hasil: Departemen Finance dan HR muncul meski tidak ada karyawan, dengan kolom nama_karyawan berisi NULL.

Menemukan Departemen Tanpa Karyawan dengan RIGHT JOIN

-- Temukan departemen yang belum memiliki karyawan
SELECT
    d.id_dept,
    d.nama_dept
FROM karyawan k
RIGHT JOIN departemen d ON k.id_dept = d.id_dept
WHERE k.id_karyawan IS NULL;

JOIN dengan Lebih dari Dua Tabel

Anda bisa menggabungkan lebih dari dua tabel dalam satu query. Misalnya, menambahkan tabel proyek:

-- Gabungkan tiga tabel sekaligus
SELECT
    k.nama AS karyawan,
    d.nama_dept AS departemen,
    p.nama_proyek AS proyek
FROM karyawan k
INNER JOIN departemen d ON k.id_dept = d.id_dept
LEFT JOIN proyek p ON k.id_karyawan = p.id_karyawan
ORDER BY k.nama;

Perbandingan Singkat

  • INNER JOIN: Hanya baris yang ada kecocokan di kedua tabel. Cocok untuk mengambil data yang pasti terhubung.
  • LEFT JOIN: Semua baris tabel kiri + kecocokan tabel kanan. Ideal untuk mencari data yang mungkin belum punya pasangan.
  • RIGHT JOIN: Semua baris tabel kanan + kecocokan tabel kiri. Jarang dipakai, bisa diganti dengan LEFT JOIN dengan urutan tabel ditukar.

Tips Praktis

  1. Gunakan alias tabel (seperti k untuk karyawan) agar query lebih ringkas dan mudah dibaca.
  2. RIGHT JOIN bisa selalu dikonversi menjadi LEFT JOIN dengan menukar posisi tabel, sehingga banyak developer hanya pakai LEFT JOIN untuk konsistensi.
  3. Selalu sertakan kondisi ON yang tepat untuk menghindari Cartesian Product (perkalian semua baris).
  4. Tambahkan index pada kolom yang digunakan sebagai kondisi JOIN untuk performa yang lebih baik.

Kesimpulan

INNER JOIN, LEFT JOIN, dan RIGHT JOIN adalah tiga jenis JOIN yang paling sering digunakan di MySQL. INNER JOIN hanya mengambil data yang cocok di kedua tabel, LEFT JOIN mengambil semua data dari tabel kiri, dan RIGHT JOIN mengambil semua data dari tabel kanan. Memahami kapan harus menggunakan masing-masing jenis JOIN adalah kunci untuk menulis query yang efisien dan menghasilkan data yang akurat sesuai kebutuhan aplikasi Anda.

inner join mysql left join mysql right join mysql perbedaan join mysql cara join tabel mysql mysql join query
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’