Learn
← Previous Next →

INNER JOIN, LEFT JOIN, dan Relasi Antar Tabel

60 min Last updated 24 Mar 2026

Mengapa JOIN?

Data di database disimpan di tabel-tabel terpisah untuk efisiensi. JOIN memungkinkan kita menggabungkan data dari beberapa tabel sekaligus.

3.1 INNER JOIN — Data yang Cocok di Kedua Tabel

-- Nama pelanggan + pesanan mereka
SELECT p.nama, ps.tanggal_pesan, ps.total_harga, ps.status_pesanan
FROM pelanggan p
INNER JOIN pesanan ps ON p.id = ps.pelanggan_id
ORDER BY ps.tanggal_pesan DESC;

3.2 LEFT JOIN — Semua Data Kiri + Cocok di Kanan

-- Semua pelanggan, termasuk yang belum pernah pesan
SELECT p.nama, COUNT(ps.id) AS jumlah_pesanan
FROM pelanggan p
LEFT JOIN pesanan ps ON p.id = ps.pelanggan_id
GROUP BY p.id, p.nama
ORDER BY jumlah_pesanan DESC;

3.3 Multi JOIN — Gabungkan Lebih dari 2 Tabel

-- Detail pesanan lengkap: nama pelanggan + nama produk
SELECT p.nama AS pelanggan, pr.nama_produk, dp.jumlah, dp.harga_satuan, dp.subtotal
FROM detail_pesanan dp
INNER JOIN pesanan ps ON dp.pesanan_id = ps.id
INNER JOIN pelanggan p ON ps.pelanggan_id = p.id
INNER JOIN produk pr ON dp.produk_id = pr.id
ORDER BY ps.tanggal_pesan DESC
LIMIT 10;

3.4 JOIN + Agregat

-- Produk terlaris (berdasarkan total quantity terjual)
SELECT pr.nama_produk, SUM(dp.jumlah) AS total_terjual, SUM(dp.subtotal) AS total_revenue
FROM detail_pesanan dp
INNER JOIN produk pr ON dp.produk_id = pr.id
GROUP BY pr.id, pr.nama_produk
ORDER BY total_terjual DESC;
💡Selalu gunakan alias (singkatan) untuk nama tabel saat JOIN agar query lebih mudah dibaca: FROM pelanggan p

💡 Notice: Gunakan JOIN untuk menggabungkan tabel pelanggan dan pesanan.

Assignment

Tampilkan nama pelanggan, kota, total pesanan (COUNT), dan total belanja (SUM total_harga) mereka. Urutkan dari total belanja terbesar. Hanya pelanggan yang pernah pesan.

Expected output:

-- Hasil: nama pelanggan + kota + jumlah_pesanan + total_belanja, diurutkan total belanja terbesar
SQL query.sql
Solution
Output
⏳ Loading DB...