Mengambil Data · Pelajaran 6 dari 9

Menggabungkan tabel dengan JOIN

11 menit baca · BelajarCode

Data yang dirancang dengan baik tersebar di beberapa tabel. JOIN menggabungkannya kembali saat dibutuhkan.

SQL
1CREATE TABLE mahasiswa (nim TEXT PRIMARY KEY, nama TEXT);2CREATE TABLE mata_kuliah (kode TEXT PRIMARY KEY, nama TEXT, sks INTEGER);3CREATE TABLE krs (nim TEXT, kode TEXT, nilai TEXT);45INSERT INTO mahasiswa VALUES ('001', 'Rizky'), ('002', 'Sinta'), ('003', 'Bagas'), ('004', 'Dewi');6INSERT INTO mata_kuliah VALUES ('IF101', 'Algoritma', 4), ('IF102', 'Basis Data', 3), ('IF103', 'Jaringan', 3);7INSERT INTO krs VALUES8    ('001', 'IF101', 'A'), ('001', 'IF102', 'B'),9    ('002', 'IF101', 'A'), ('002', 'IF103', 'A'),10    ('003', 'IF102', 'C');1112SELECT m.nama, k.kode, k.nilai13FROM krs k14JOIN mahasiswa m ON m.nim = k.nim15ORDER BY m.nama, k.kode;
Hasil
nama | kode | nilai
Bagas | IF102 | C
Rizky | IF101 | A
Rizky | IF102 | B
Sinta | IF101 | A
Sinta | IF103 | A
  • JOIN ... ON (lengkapnya INNER JOIN) memasangkan baris dari dua tabel yang memenuhi syarat ON.
  • krs k dan mahasiswa m memberi alias pendek pada tabel, supaya penulisan kolom ringkas.

Menggabungkan tiga tabel

SQL
1SELECT m.nama AS mahasiswa, mk.nama AS mata_kuliah, mk.sks, k.nilai2FROM krs k3JOIN mahasiswa m ON m.nim = k.nim4JOIN mata_kuliah mk ON mk.kode = k.kode5WHERE m.nama = 'Rizky';
Hasil
mahasiswa | mata_kuliah | sks | nilai
Rizky | Algoritma | 4 | A
Rizky | Basis Data | 3 | B

LEFT JOIN

INNER JOIN hanya menampilkan baris yang punya pasangan. Dewi tidak muncul di hasil sebelumnya karena belum mengambil mata kuliah apa pun. LEFT JOIN mempertahankan semua baris dari tabel kiri, dan mengisi kolom tabel kanan dengan NULL jika tidak ada pasangannya.

SQL
1SELECT m.nama, COUNT(k.kode) AS jumlah_mk2FROM mahasiswa m3LEFT JOIN krs k ON k.nim = m.nim4GROUP BY m.nim, m.nama5ORDER BY jumlah_mk DESC, m.nama;
Hasil
nama | jumlah_mk
Rizky | 2
Sinta | 2
Bagas | 1
Dewi | 0

COUNT(k.kode) hanya menghitung nilai yang tidak NULL, sehingga Dewi mendapat 0.

Mencari yang tidak punya pasangan

SQL
1SELECT m.nama2FROM mahasiswa m3LEFT JOIN krs k ON k.nim = m.nim4WHERE k.nim IS NULL;
Hasil
nama
Dewi

Pola LEFT JOIN lalu IS NULL sangat sering dipakai, misalnya mencari pelanggan yang belum pernah bertransaksi.

Cek pemahaman

Kamu ingin daftar semua mata kuliah beserta banyak mahasiswa yang mengambilnya, termasuk mata kuliah yang belum diambil siapa pun. JOIN apa yang dipakai?

Latihan

Total SKS per mahasiswa

Tampilkan setiap mahasiswa beserta total SKS yang diambilnya, termasuk yang belum mengambil mata kuliah (tampilkan 0). Petunjuk: COALESCE(x, 0) mengganti NULL dengan 0.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi