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...