Menggabungkan data dari banyak tabel menjadi satu jawaban utuh.
Sesi Hari Ini
RPS minggu 14 · 2x50 menit
Bagian 1 dari 3
Dari Tabel Terpisah ke Data Utuh
Mengapa satu tabel saja tidak pernah cukup untuk menjawab pertanyaan bisnis?
Kilas Balik: Kenapa Data Kita Terpisah?
Sejak Pertemuan 5-6 kita menormalisasi data agar tidak ada duplikasi (satu fakta, satu tempat). Konsekuensinya, data yang secara bisnis "satu cerita" kini tersebar di tabel berbeda.
Pertanyaan bisnis seperti "siapa saja yang belum membayar UKT?" butuh KEDUA tabel sekaligus — inilah alasan JOIN lahir.
Apa Itu JOIN?
JOIN adalah operasi SQL untuk menggabungkan baris dari dua tabel atau lebih berdasarkan kolom yang berelasi (biasanya PK dengan FK), menghasilkan satu tabel gabungan sementara.
SELECT ... FROM tabel_a JOIN tabel_b ON tabel_a.kolom = tabel_b.kolom
Klausa FROM
Tabel awal
Titik mula penggabungan
Jenis JOIN
INNER / OUTER
Aturan baris mana yang ikut
Klausa ON
Syarat cocok
Kolom PK = kolom FK
Peta Data Kita Hari Ini
Sepanjang pertemuan ini kita pakai dua tabel kecil yang sama — supaya Anda bisa membandingkan hasil tiap jenis JOIN secara langsung.
MAHASISWA (5 baris)
nim
nama
3001
Sarah
3002
Budi
3003
Citra
3004
Dimas
3005
Eka
PEMBAYARAN_UKT (4 baris)
id_bayar
nim
jumlah
PAY01
3001
Rp2.500.000
PAY02
3002
Rp2.500.000
PAY03
3004
Rp2.500.000
PAY04
3001
Rp500.000 (denda)
Dua Filosofi Besar JOIN
INNER JOIN
Hanya baris yang ADA PASANGANNYA di kedua tabel
OUTER JOIN
Tetap tampilkan baris tanpa pasangan, kolom kosong diisi NULL (penanda "tidak ada nilai")
Empat Jenis JOIN yang Perlu Anda Kenal
Jenis
Baris yang diambil
Kapan dipakai
INNER JOIN
Hanya yang cocok di kedua tabel
Laporan yang butuh data lengkap kedua sisi
LEFT JOIN
Semua baris tabel kiri + pasangannya (NULL bila tak ada)
"Semua X, walau belum ada Y" — mis. semua mahasiswa termasuk yang belum bayar
RIGHT JOIN
Semua baris tabel kanan + pasangannya (NULL bila tak ada)
Kebalikan LEFT JOIN — jarang dipakai, tinggal tukar urutan tabel
FULL OUTER JOIN
Semua baris kedua tabel, cocok atau tidak
Audit data — cari yang tak berpasangan di kedua sisi
Peta jalan hari ini: kita bedah INNER JOIN di Bagian 2, lalu LEFT/RIGHT/FULL OUTER JOIN di Bagian 3.
Bagian 2 dari 3
INNER JOIN: Hanya yang Cocok
Menggabungkan dua tabel dan membuang baris yang tidak berpasangan
Sintaks INNER JOIN
SELECT m.nama, p.jumlah FROM MAHASISWA m INNER JOIN PEMBAYARAN_UKT p ON m.nim = p.nim;
Cara Baca
m dan p adalah alias (nama pendek) tabel
INNER JOIN boleh ditulis JOIN saja — artinya sama
ON menyatakan syarat: nim di kedua tabel harus SAMA
Aturan Inti
Baris hanya ikut jika nim-nya ADA di kedua tabel
Satu nim bisa cocok >1 kali (mis. Sarah, 2 pembayaran)
nim yang tak punya pasangan → DIBUANG total
Hitung dari Nol: Baris Hasil INNER JOIN
Kita telusuri kelima baris tabel MAHASISWA satu per satu, cek kecocokan di tabel PEMBAYARAN_UKT.
Langkah
Perhitungan
Nilai
Cek nim 3001 (Sarah)
Cocok 2x di Pembayaran (PAY01 + PAY04)
2 baris
Cek nim 3002 (Budi)
Cocok 1x di Pembayaran (PAY02)
1 baris
Cek nim 3003 (Citra)
Tidak ada di Pembayaran → dibuang INNER JOIN
0 baris
Cek nim 3004 (Dimas)
Cocok 1x di Pembayaran (PAY03)
1 baris
Cek nim 3005 (Eka)
Tidak ada di Pembayaran → dibuang INNER JOIN
0 baris
Total Baris Hasil INNER JOIN
2 + 1 + 0 + 1 + 0 = 4 baris
Tabel Hasil INNER JOIN
nama
jumlah
Sarah
Rp2.500.000
Sarah
Rp500.000 (denda)
Budi
Rp2.500.000
Dimas
Rp2.500.000
Perhatikan: Citra dan Eka hilang sama sekali dari hasil — bukan ditampilkan dengan nilai kosong, tapi baris mereka tidak pernah ada. Inilah jebakan INNER JOIN yang paling sering bikin laporan bisnis "kehilangan" data.
Kasus Nyata: Laporan Transaksi E-Commerce
INNER JOIN sangat umum dipakai saat laporan HANYA butuh data yang sudah lengkap kedua sisi — misalnya laporan penjualan sukses di marketplace seperti Tokopedia.
SELECT pl.nama_produk, tr.total_bayar FROM PRODUK pl INNER JOIN TRANSAKSI tr ON pl.id_produk = tr.id_produk;
Produk yang belum pernah terjual otomatis TIDAK muncul di laporan ini — dan itu memang tujuannya: laporan ini hanya untuk transaksi yang benar-benar terjadi.
Bagian 3 dari 3
OUTER JOIN: Menjaga yang Tak Berpasangan
LEFT JOIN, RIGHT JOIN, dan FULL OUTER JOIN — kapan datamu tidak boleh hilang
Sintaks LEFT JOIN
SELECT m.nama, p.jumlah FROM MAHASISWA m LEFT JOIN PEMBAYARAN_UKT p ON m.nim = p.nim;
Aturan LEFT JOIN
Tabel di FROM (kiri) = MAHASISWA → SEMUA barisnya wajib tampil
Tabel di LEFT JOIN (kanan) = PEMBAYARAN_UKT → hanya diisi jika cocok
Tak ada pasangan → kolom kanan diisi NULL
Ingat Istilah
"Kiri" = tabel yang ditulis SEBELUM kata LEFT JOIN (posisi lebih dulu di query)
Hitung dari Nol: Baris Hasil LEFT JOIN
Sama seperti sebelumnya, kita telusuri lima baris MAHASISWA — tapi kali ini yang tak punya pasangan TETAP dihitung 1 baris (dengan NULL).
Langkah
Perhitungan
Nilai
Cek nim 3001 (Sarah)
Cocok 2x → tetap 2 baris (sama seperti INNER)
2 baris
Cek nim 3002 (Budi)
Cocok 1x → tetap 1 baris
1 baris
Cek nim 3003 (Citra)
Tidak cocok, tapi LEFT JOIN tetap tampilkan → 1 baris NULL
1 baris
Cek nim 3004 (Dimas)
Cocok 1x → tetap 1 baris
1 baris
Cek nim 3005 (Eka)
Tidak cocok, tapi LEFT JOIN tetap tampilkan → 1 baris NULL
1 baris
Total Baris Hasil LEFT JOIN
2+1+1+1+1 = 6 baris (INNER hanya 4)
Tabel Hasil LEFT JOIN
nama
jumlah
Sarah
Rp2.500.000
Sarah
Rp500.000
Budi
Rp2.500.000
Citra
NULL
Dimas
Rp2.500.000
Eka
NULL
Bandingkan dengan hasil INNER JOIN sebelumnya: Citra dan Eka kini MUNCUL kembali dengan kolom jumlah berisi NULL — bukan dihilangkan, bukan pula diisi angka 0.
RIGHT JOIN dan FULL OUTER JOIN Sekilas
RIGHT JOIN
Kebalikan LEFT JOIN: SEMUA baris tabel kanan wajib tampil
FROM PEMBAYARAN_UKT p RIGHT JOIN MAHASISWA m ON p.nim = m.nim
Hasilnya SAMA PERSIS dengan LEFT JOIN di slide sebelumnya, hanya urutan tabel ditukar
FULL OUTER JOIN
Gabungan LEFT + RIGHT — semua baris KEDUA tabel ikut tampil
Cocok atau tidak, tidak ada baris yang dibuang
Berguna untuk AUDIT: mencari nim pembayaran yang tak terdaftar di Mahasiswa
Praktik industri: RIGHT JOIN jarang ditulis eksplisit — kebanyakan tim memilih selalu LEFT JOIN dan menukar urutan tabel FROM agar query lebih konsisten dibaca.
Coba Sendiri: Bandingkan Keempat Jenis JOIN Sekaligus
Klik tiap jenis JOIN dan amati baris mana yang match, mana yang tidak match, dan mana yang tetap tampil dengan NULL.
Peta Perbandingan Jumlah Baris
Aturan cepat: INNER <= LEFT/RIGHT <= FULL OUTER — OUTER JOIN tidak pernah menghasilkan baris lebih sedikit dari INNER JOIN pada data yang sama.
Latihan Kelas: Tulis Query Anda Sendiri
Gunakan tabel MAHASISWA dan PEMBAYARAN_UKT dari sepanjang pertemuan ini untuk menjawab tiga soal berikut. Tulis di kertas/laptop, kita bahas bersama setelah 10 menit.
No
Soal
1
Tampilkan nama mahasiswa beserta jumlah pembayarannya, HANYA yang sudah pernah membayar.
2
Tampilkan SEMUA mahasiswa beserta status pembayaran — mahasiswa yang belum bayar tetap harus muncul (kolom jumlah boleh NULL).
3
Dari hasil soal no. 2, berapa baris yang jumlahnya bernilai NULL? Sebutkan namanya.
Petunjuk: soal 1 = INNER JOIN, soal 2 = LEFT JOIN, soal 3 = tinggal baca hasil soal 2.
Rangkuman Pertemuan 13
Konsep
Inti yang Wajib Diingat
JOIN
Menggabungkan tabel berdasarkan kecocokan kolom PK-FK via klausa ON
INNER JOIN
Hanya baris yang cocok di KEDUA tabel — baris tanpa pasangan hilang total
LEFT JOIN
Semua baris tabel kiri tetap tampil; tanpa pasangan → NULL
RIGHT / FULL OUTER
RIGHT = LEFT tabel ditukar; FULL = gabungan keduanya, semua baris tampil
Minggu Depan (P14)
Subquery bersarang — memakai hasil satu query SELECT di dalam query lain, untuk analisis data yang lebih kompleks daripada JOIN sendirian.
Tugas
Kerjakan 3 soal latihan hari ini + kumpulkan query lengkapnya (SELECT, FROM, JOIN, ON) sebelum pertemuan berikutnya.