INNER JOIN — SQL

INNER JOIN menggabungkan baris dari dua tabel yang memiliki kecocokan. SELECT users.name, posts.title FROM users INNER JOIN posts ON users.id = posts.user_id…

JOIN menggabungkan baris dari dua tabel jadi satu hasil, dengan memasangkan baris yang nilainya cocok. INNER JOIN cuma menyimpan pasangan yang ketemu. Bayangkan kamu menempelkan setiap nota pesanan ke kartu member yang nomornya sama: nota tanpa nomor member gak bisa ditempel ke mana-mana, dan member yang belum pernah belanja gak punya nota. Dua-duanya gak masuk ke tumpukan hasil.

🧪 Tebakan cepat: customers punya 3 baris, orders punya 4 baris. INNER JOIN keduanya menghasilkan berapa baris: 3, 4, atau 12? Tebak dulu, jawabannya ada di bagian "Langkah demi langkah".

Data yang dipakai

Tabel yang sama dengan pelajaran Relasi Antar Tabel. orders.customer_id menunjuk customers.id.

customers

id name
1 Budi
2 Siti
3 Andi

orders

id customer_id product
1 1 Laptop
2 1 Mouse
3 2 Monitor
4 NULL Flashdisk

Menulis INNER JOIN

SELECT customers.name AS nama_pelanggan, orders.product AS produk
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

Langkah demi langkah

Bayangkan database mencoba setiap pasangan pelanggan dan pesanan (3 × 4 = 12 pasangan), lalu menyimpan yang syarat ON-nya benar. Database aslinya mencari dengan cara yang lebih cepat, tapi hasilnya sama.

Pelanggan Pesanan (customer_id) customers.id = orders.customer_id Ikut?
1 Budi Laptop (1) 1 = 1, benar ya
1 Budi Mouse (1) 1 = 1, benar ya
2 Siti Monitor (2) 2 = 2, benar ya
3 Andi gak ada pesanan dengan customer_id 3 tidak
siapa pun Flashdisk (NULL) 1 = NULL bukan benar tidak

Hasilnya:

nama_pelanggan produk
Budi Laptop
Budi Mouse
Siti Monitor

3 baris. Itu jawaban tebakannya. Budi muncul dua kali karena dia punya dua pesanan. Andi hilang karena gak punya pesanan, dan Flashdisk hilang karena customer_id-nya NULL: perbandingan apa pun dengan NULL gak pernah bernilai benar.

Alias tabel

Menulis customers. dan orders. berulang-ulang itu panjang. Kasih tabelnya nama pendek:

SELECT c.name AS nama_pelanggan, o.product AS produk
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id;

Kalau ON-nya salah

Di Lab kamu bisa mencoba semuanya di SQLite sungguhan:

📌 JOIN tiga tabel

JOIN bisa disambung. Kalau ada tabel reviews dengan kolom order_id, ulasan setiap pesanan bisa ikut diambil:

SELECT c.name, o.product, r.rating
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id
INNER JOIN reviews r ON o.id = r.order_id;

Setiap INNER JOIN punya ON-nya sendiri, dan setiap langkah bisa membuang baris yang gak punya pasangan.

⚠️ Jebakan yang sering ketemu

TL;DR: SELECT ... FROM customers INNER JOIN orders ON customers.id = orders.customer_id memasangkan setiap pelanggan dengan pesanannya dan cuma menyimpan pasangan yang ON-nya benar. 3 pelanggan dan 4 pesanan jadi 3 baris: Budi dua kali, Siti sekali, Andi (tanpa pesanan) dan Flashdisk (customer_id NULL) hilang. Pakai AS untuk nama kolom hasil, alias tabel (customers c) untuk menyingkat, dan nama tabel di depan kolom yang ada di dua tabel. ON yang salah kolom memberi hasil salah tanpa error, dan ON yang hilang memasangkan semuanya (12 baris).

Yang akan kamu pelajari