left join,right join, cross join mysql | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: left join,right join, cross join mysql

Wednesday, April 8, 2026

left join,right join, cross join mysql

Beranda Tutorial MySQL Artikel 21
๐Ÿ”ด Lanjutan ๐Ÿ”— JOIN Operations ⏱ 12 menit baca ๐Ÿ“˜ Artikel 21/28

Jenis-jenis JOIN:
LEFT JOIN, RIGHT JOIN,
dan CROSS JOIN

Gabungkan tabel seperti pro! Pelajari tiga jenis JOIN yang sering bikin mahasiswa bingung — dijelaskan dengan analogi sederhana dan contoh nyata.

3
Jenis JOIN
8+
Contoh Query
12
Menit Baca
5
Langkah Praktik

Bayangkan kamu punya dua buku daftar hadir: satu untuk kelas pagi, satu untuk kelas siang. Sekarang kamu diminta bikin laporan gabungan — siapa yang hadir di pagi, siang, atau keduanya. Masalahnya, ada nama yang cuma ada di satu buku. Kamu mau tampilin semua? Atau cuma yang ada di keduanya? Nah, itulah persis yang diselesaikan oleh LEFT JOIN RIGHT JOIN MySQL!

Di artikel ke-21 dari seri 28 artikel Belajar Query SQL MySQL ini, kita akan bedah tuntas tiga jenis JOIN yang sering bikin mahasiswa TI semester awal garuk-garuk kepala: LEFT JOIN, RIGHT JOIN, dan CROSS JOIN. Ketiganya punya karakter beda, kegunaan beda, dan kalau salah pakai — hasilnya bisa mengejutkan (dalam artian yang buruk ๐Ÿ˜…).

Kita akan pakai studi kasus toko online — dengan tabel produk, pelanggan, dan pesanan yang realistis — supaya setiap konsep langsung kebayang dan bisa kamu praktikkan sendiri. Yuk mulai!

๐Ÿ’ก
Fakta Menarik

Menurut survei Stack Overflow Developer Survey, JOIN adalah salah satu operasi SQL yang paling sering digunakan oleh database developer profesional — tapi juga salah satu yang paling sering menyebabkan query lambat kalau tidak dioptimasi! Makanya penting banget paham konsepnya dari dasar dulu.

๐Ÿ—ƒ️ Setup Data: Toko Online Kita

Sebelum masuk ke JOIN, kita siapkan dulu tiga tabel yang akan jadi playground kita sepanjang artikel ini.

-- Tabel Pelanggan
CREATE TABLE pelanggan (
  id_pelanggan INT PRIMARY KEY,
  nama         VARCHAR(100),
  kota         VARCHAR(50)
);

INSERT INTO pelanggan VALUES
  (1, 'Andi',    'Jakarta'),
  (2, 'Budi',    'Bandung'),
  (3, 'Citra',   'Surabaya'),
  (4, 'Dewi',    'Yogyakarta'); -- Dewi belum pernah pesan

-- Tabel Pesanan
CREATE TABLE pesanan (
  id_pesanan   INT PRIMARY KEY,
  id_pelanggan INT,
  produk       VARCHAR(100),
  total        INT
);

INSERT INTO pesanan VALUES
  (101, 1, 'Laptop',     15000000),
  (102, 2, 'Mouse',      250000),
  (103, 1, 'Keyboard',   750000),
  (104, 5, 'Headset',    500000); -- id_pelanggan 5 tidak ada di tabel pelanggan!

-- Tabel Produk
CREATE TABLE produk (
  id_produk    INT PRIMARY KEY,
  nama_produk  VARCHAR(100),
  kategori     VARCHAR(50),
  harga        INT
);

INSERT INTO produk VALUES
  (1, 'Laptop Gaming',   'Elektronik', 15000000),
  (2, 'Mouse Wireless',  'Aksesoris',  250000),
  (3, 'Mechanical KB',   'Aksesoris',  750000),
  (4, 'Monitor 4K',      'Elektronik', 5000000); -- Monitor belum ada yang pesan
✅ Tip Praktis

Perhatikan data yang sengaja "tidak cocok" — Dewi belum pernah pesan, Monitor belum ada yang beli, dan ada pesanan dari id_pelanggan 5 yang tidak ada di tabel pelanggan. Data seperti ini yang akan membedakan hasil dari tiap jenis JOIN!

01. LEFT JOIN — "Semua dari Kiri, Cocok atau Tidak"

Analogi: Bayangkan kamu punya daftar semua anggota klub (tabel kiri), dan buku catatan kehadiran rapat (tabel kanan). LEFT JOIN akan menampilkan semua anggota, mau dia hadir di rapat atau enggak. Yang tidak hadir? Datanya tetap muncul, tapi kolom kehadirannya diisi NULL.

Dalam konteks LEFT JOIN RIGHT JOIN MySQL, LEFT JOIN mengambil semua baris dari tabel kiri, dan hanya baris yang cocok dari tabel kanan. Kalau tidak ada kecocokan, kolom dari tabel kanan akan bernilai NULL.

Sintaks LEFT JOIN
SELECT   kolom1, kolom2, ...
FROM     tabel_kiri              -- semua baris dari sini diambil
LEFT JOIN tabel_kanan            -- hanya yang cocok dari sini
ON       tabel_kiri.kolom_id = tabel_kanan.kolom_id;

Contoh: Tampilkan semua pelanggan beserta pesanannya (termasuk yang belum pernah pesan):

SELECT
  p.id_pelanggan,
  p.nama,
  p.kota,
  ps.id_pesanan,
  ps.produk,
  ps.total
FROM       pelanggan p
LEFT JOIN  pesanan ps
  ON       p.id_pelanggan = ps.id_pelanggan;
๐Ÿ“Š Hasil Query:
id_pelanggan nama kota id_pesanan produk total
1 Andi Jakarta 101 Laptop 15.000.000
1 Andi Jakarta 103 Keyboard 750.000
2 Budi Bandung 102 Mouse 250.000
3 Citra Surabaya NULL NULL NULL
4 Dewi Yogyakarta NULL NULL NULL

⬆️ Baris berwarna kuning = Dewi yang belum pernah pesan tetap muncul, dengan kolom pesanan berisi NULL. Citra juga muncul meski tidak punya pesanan.

๐ŸŽฏ Kapan Pakai LEFT JOIN?

Gunakan LEFT JOIN ketika kamu ingin memastikan semua data dari tabel utama tampil, meski tidak ada pasangannya di tabel lain. Contoh kasus nyata: laporan pelanggan yang belum pernah belanja, produk yang belum pernah dipesan, guru yang belum mengampu kelas.

02. RIGHT JOIN — "Kebalikan LEFT JOIN, Tapi Sama Konsepnya"

RIGHT JOIN adalah cermin dari LEFT JOIN. Sekarang yang dijamin tampil semua adalah tabel kanan, dan tabel kiri hanya muncul kalau ada data yang cocok. Dalam konfigurasi LEFT JOIN RIGHT JOIN MySQL, keduanya sebenarnya bisa saling menggantikan — tinggal ubah urutan tabelnya saja.

Sintaks RIGHT JOIN
SELECT   kolom1, kolom2, ...
FROM     tabel_kiri
RIGHT JOIN tabel_kanan            -- semua baris dari sini diambil
ON       tabel_kiri.kolom_id = tabel_kanan.kolom_id;

Contoh: Tampilkan semua pesanan beserta data pelanggannya (termasuk pesanan dari pelanggan yang tidak terdaftar):

SELECT
  p.nama,
  p.kota,
  ps.id_pesanan,
  ps.produk,
  ps.total
FROM        pelanggan p
RIGHT JOIN  pesanan ps
  ON        p.id_pelanggan = ps.id_pelanggan;
๐Ÿ“Š Hasil Query:
nama kota id_pesanan produk total
Andi Jakarta 101 Laptop 15.000.000
Budi Bandung 102 Mouse 250.000
Andi Jakarta 103 Keyboard 750.000
NULL NULL 104 Headset 500.000

⬆️ Baris merah = pesanan id 104 dari pelanggan tidak terdaftar (id 5) tetap muncul, tapi nama dan kota NULL karena tidak ada di tabel pelanggan.

⚠️ Peringatan

Di industri, RIGHT JOIN jarang digunakan karena apapun yang bisa dilakukan RIGHT JOIN, bisa juga dilakukan LEFT JOIN dengan menukar posisi tabel. Banyak developer lebih prefer LEFT JOIN supaya arah joinnya konsisten dan query lebih mudah dibaca.

03. CROSS JOIN — "Semua Kemungkinan Kombinasi"

Analogi: Kamu punya 3 warna kaos (merah, biru, hijau) dan 2 ukuran (S, L). Berapa total kombinasi yang mungkin? 3 × 2 = 6 kombinasi. Itulah CROSS JOIN — dia menghasilkan cartesian product, yaitu setiap baris dari tabel kiri dipasangkan dengan setiap baris dari tabel kanan.

Tidak ada kondisi ON di sini. CROSS JOIN tidak peduli relasi — dia cuma pasangkan semua ke semua. Kalau tabel A punya 4 baris dan tabel B punya 4 baris, hasilnya: 4 × 4 = 16 baris.

Sintaks CROSS JOIN
SELECT   kolom1, kolom2, ...
FROM     tabel_a
CROSS JOIN tabel_b;   -- tidak ada kondisi ON!

-- Atau cara lama (implicit CROSS JOIN):
SELECT   kolom1, kolom2
FROM     tabel_a, tabel_b;  -- hasilnya sama

Contoh: Buat semua kombinasi pelanggan dan produk (untuk keperluan marketing/promo):

SELECT
  p.nama          AS pelanggan,
  pr.nama_produk  AS produk,
  pr.harga
FROM        pelanggan p
CROSS JOIN  produk pr
ORDER BY    p.nama, pr.nama_produk
LIMIT 8; -- tampilkan 8 baris pertama saja dari 16 total
๐Ÿ“Š Hasil Query (8 dari 16 baris — 4 pelanggan × 4 produk):
pelanggan produk harga
AndiLaptop Gaming15.000.000
AndiMechanical KB750.000
AndiMonitor 4K5.000.000
AndiMouse Wireless250.000
BudiLaptop Gaming15.000.000
BudiMechanical KB750.000
BudiMonitor 4K5.000.000
BudiMouse Wireless250.000
⚠️ Hati-hati!

CROSS JOIN bisa sangat berbahaya di tabel besar! Tabel A dengan 1.000 baris di-CROSS JOIN tabel B yang 1.000 baris = 1.000.000 baris hasil. Server kamu bisa kelelahan kalau tidak hati-hati. Selalu gunakan LIMIT atau pastikan tabelnya kecil!

✅ Kapan Pakai CROSS JOIN?

Berguna untuk membuat data uji coba (test data), kombinasi produk-variasi untuk toko (ukuran × warna × bahan), membuat jadwal round-robin (tim A vs B, A vs C, dst), atau keperluan analitik komparasi semua kombinasi.

๐Ÿงช Panduan Praktikum: Coba Sendiri Dari Nol

1
Buat Database dan Tabel

Buka MySQL Workbench atau phpMyAdmin, buat database baru dan jalankan script setup di atas.

CREATE DATABASE toko_online;
USE toko_online;
2
Insert Data Sampel

Salin dan jalankan semua perintah CREATE TABLE dan INSERT INTO dari bagian setup di atas. Pastikan tidak ada error.

SELECT * FROM pelanggan; -- cek: harus ada 4 baris
SELECT * FROM pesanan; -- cek: harus ada 4 baris
3
Jalankan LEFT JOIN

Coba query LEFT JOIN dari contoh di atas. Perhatikan baris dengan NULL — itu pelanggan yang belum pernah pesan.

4
Filter Hanya yang NULL (Kasus Khusus LEFT JOIN)

Ini trik keren! Kamu bisa gunakan LEFT JOIN + WHERE IS NULL untuk cari pelanggan yang belum pernah pesan:

SELECT p.nama, p.kota
FROM pelanggan p
LEFT JOIN pesanan ps ON p.id_pelanggan = ps.id_pelanggan
WHERE ps.id_pesanan IS NULL; -- hanya yang belum pesan
5
Eksperimen CROSS JOIN dengan LIMIT

Coba CROSS JOIN antara pelanggan dan produk, lalu hitung totalnya. Tambahkan LIMIT untuk keamanan.

SELECT COUNT(*) AS total_kombinasi
FROM pelanggan
CROSS JOIN produk; -- harusnya: 16

๐Ÿ“‹ Tabel Perbandingan: LEFT vs RIGHT vs CROSS JOIN

Aspek LEFT JOIN RIGHT JOIN CROSS JOIN
Yang dijamin tampil Semua baris tabel kiri Semua baris tabel kanan Semua kombinasi semua baris
Kondisi ON Wajib ada Wajib ada Tidak ada
Jumlah hasil ≥ jumlah baris tabel kiri ≥ jumlah baris tabel kanan Baris A × Baris B
Nilai NULL muncul di Kolom tabel kanan Kolom tabel kiri Tidak ada NULL
Use case utama Cari data tanpa pasangan Kebalikan LEFT JOIN Generate kombinasi
Risiko performa Rendah (ada filter ON) Rendah (ada filter ON) Tinggi di tabel besar!
Popularitas di industri ⭐⭐⭐⭐⭐ Sangat umum ⭐⭐ Jarang dipakai ⭐⭐⭐ Use case spesifik
๐ŸŽ“ Insight Trainer

Di dunia kerja, LEFT JOIN adalah yang paling sering kamu temui. Kalau kamu bisa menguasai LEFT JOIN dengan WHERE IS NULL, kamu sudah bisa menyelesaikan 80% masalah "cari data yang hilang" di database.

๐Ÿ’ก Tip Praktis

Selalu beri alias pada tabel (contoh: FROM pelanggan p) supaya query JOIN-mu lebih pendek dan mudah dibaca, terutama saat join lebih dari 2 tabel.

✅ Kesimpulan

  • LEFT JOIN mengambil semua baris tabel kiri + baris yang cocok dari tabel kanan (NULL jika tidak cocok). Paling populer!
  • RIGHT JOIN adalah kebalikan LEFT JOIN — semua dari tabel kanan dijamin muncul. Bisa diganti LEFT JOIN dengan tukar posisi tabel.
  • CROSS JOIN menghasilkan cartesian product (semua kombinasi). Powerful tapi berbahaya di tabel besar — selalu pakai LIMIT.
  • Trik LEFT JOIN + WHERE IS NULL = cara elegan menemukan data yang "tidak punya pasangan" di tabel lain.
  • Selalu gunakan alias tabel dan pastikan ada kondisi ON yang tepat untuk menghindari hasil yang tidak terduga.
  • LEFT JOIN RIGHT JOIN MySQL adalah fondasi penting untuk query multi-tabel — kuasai ini sebelum lanjut ke subquery dan optimasi!

"JOIN bukan sihir — itu logika sederhana yang kamu pun sudah pakai di kehidupan sehari-hari. Setiap kali kamu mencocokkan dua daftar, itulah JOIN. Sekarang kamu tinggal tulis dalam bahasa SQL. ๐Ÿš€"

๐Ÿ’ฌ Punya pertanyaan atau pengalaman menarik pakai JOIN?

Tulis di kolom komentar di bawah — kita diskusi bareng! Kalau artikel ini membantu, jangan lupa share ke teman-teman sekelas dan bookmark halaman ini biar gampang dibuka lagi saat lagi ngerjain tugas database. ⭐

๐Ÿ“– Artikel Berikutnya (22/28)
Subquery & Nested Query di MySQL

Pelajari cara menyarangkan query di dalam query lain — teknik powerful untuk analisis data yang lebih kompleks!

Baca Sekarang →
MySQL SQL Database Query Tutorial LEFT JOIN RIGHT JOIN MySQL CROSS JOIN Belajar MySQL

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux