stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-13
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 13: INNER JOIN dan OUTER JOIN
Program Bisnis Digital · FEB UNDIP

Sistem Database

Pertemuan 13: INNER JOIN dan OUTER JOIN

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.

Tabel MAHASISWA
  • nim (primary key / PK — kolom penanda unik tiap baris)
  • nama
  • program_studi
Tabel PEMBAYARAN_UKT
  • id_bayar (PK)
  • nim (foreign key / FK — rujukan ke PK tabel lain)
  • jumlah, tanggal
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)
nimnama
3001Sarah
3002Budi
3003Citra
3004Dimas
3005Eka
PEMBAYARAN_UKT (4 baris)
id_bayarnimjumlah
PAY013001Rp2.500.000
PAY023002Rp2.500.000
PAY033004Rp2.500.000
PAY043001Rp500.000 (denda)

Dua Filosofi Besar JOIN

MAHASISWAPEMBAYARANcocokINNER JOIN = hanya irisan tengahOUTER JOIN = irisan + sisi yang dipilih
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

JenisBaris yang diambilKapan dipakai
INNER JOINHanya yang cocok di kedua tabelLaporan yang butuh data lengkap kedua sisi
LEFT JOINSemua baris tabel kiri + pasangannya (NULL bila tak ada)"Semua X, walau belum ada Y" — mis. semua mahasiswa termasuk yang belum bayar
RIGHT JOINSemua baris tabel kanan + pasangannya (NULL bila tak ada)Kebalikan LEFT JOIN — jarang dipakai, tinggal tukar urutan tabel
FULL OUTER JOINSemua baris kedua tabel, cocok atau tidakAudit 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.

LangkahPerhitunganNilai
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 JOIN0 baris
Cek nim 3004 (Dimas)Cocok 1x di Pembayaran (PAY03)1 baris
Cek nim 3005 (Eka)Tidak ada di Pembayaran → dibuang INNER JOIN0 baris
Total Baris Hasil INNER JOIN
2 + 1 + 0 + 1 + 0 = 4 baris

Tabel Hasil INNER JOIN

namajumlah
SarahRp2.500.000
SarahRp500.000 (denda)
BudiRp2.500.000
DimasRp2.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).

LangkahPerhitunganNilai
Cek nim 3001 (Sarah)Cocok 2x → tetap 2 baris (sama seperti INNER)2 baris
Cek nim 3002 (Budi)Cocok 1x → tetap 1 baris1 baris
Cek nim 3003 (Citra)Tidak cocok, tapi LEFT JOIN tetap tampilkan → 1 baris NULL1 baris
Cek nim 3004 (Dimas)Cocok 1x → tetap 1 baris1 baris
Cek nim 3005 (Eka)Tidak cocok, tapi LEFT JOIN tetap tampilkan → 1 baris NULL1 baris
Total Baris Hasil LEFT JOIN
2+1+1+1+1 = 6 baris (INNER hanya 4)

Tabel Hasil LEFT JOIN

namajumlah
SarahRp2.500.000
SarahRp500.000
BudiRp2.500.000
CitraNULL
DimasRp2.500.000
EkaNULL
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

INNER JOIN4barisLEFT / RIGHT JOIN6barisFULL OUTER>=6baris (+ nim asing)
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.

NoSoal
1Tampilkan nama mahasiswa beserta jumlah pembayarannya, HANYA yang sudah pernah membayar.
2Tampilkan SEMUA mahasiswa beserta status pembayaran — mahasiswa yang belum bayar tetap harus muncul (kolom jumlah boleh NULL).
3Dari 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

KonsepInti yang Wajib Diingat
JOINMenggabungkan tabel berdasarkan kecocokan kolom PK-FK via klausa ON
INNER JOINHanya baris yang cocok di KEDUA tabel — baris tanpa pasangan hilang total
LEFT JOINSemua baris tabel kiri tetap tampil; tanpa pasangan → NULL
RIGHT / FULL OUTERRIGHT = 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.