join table mysql | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: join table mysql

Wednesday, April 8, 2026

join table mysql

Beranda Tutorial MySQL Artikel 20
๐Ÿ”ด Lanjutan ๐Ÿ”— JOIN & Relasi Tabel ⏱️ 13 Menit Baca ๐Ÿ“˜ Artikel 20 / 28

Menggabungkan Dua Tabel:
Dasar-dasar JOIN (INNER JOIN)

Kuasai cara menghubungkan data dari dua tabel berbeda menggunakan INNER JOIN — skill wajib yang membedakan pemula dari developer SQL yang sesungguhnya.

๐Ÿ”—
4
Jenis JOIN
๐Ÿ’ป
8
Contoh Query
๐Ÿ“–
13
Menit Baca

Bayangkan kamu punya dua buku catatan: satu berisi daftar nama pelanggan, satu lagi berisi daftar pesanan. Masalahnya, di buku pesanan cuma ada nomor ID pelanggan, bukan nama lengkapnya. Kalau mau tahu "pesanan ini milik siapa", kamu harus buka kedua buku sekaligus dan mencocokkan ID-nya satu per satu. Lelah? Di sinilah INNER JOIN MySQL hadir menyelamatkan harimu!

INNER JOIN adalah perintah SQL yang memungkinkan kamu menggabungkan baris-baris dari dua tabel berbeda berdasarkan kolom yang nilainya cocok — seperti kunci dan gembok yang pas. Ini adalah artikel ke-20 dari seri 28 artikel Belajar Query SQL MySQL, dan topik ini adalah salah satu yang paling game-changing dalam perjalanan belajar database kamu.

Di artikel ini kita akan bahas: apa itu JOIN dan mengapa database perlu lebih dari satu tabel, cara kerja INNER JOIN secara visual, studi kasus nyata dari toko online, hingga latihan langsung yang bisa kamu coba sendiri. Yuk mulai! ๐Ÿ”—

๐Ÿ’ก

Fakta Menarik

Menurut survei Stack Overflow Developer Survey, SQL adalah bahasa yang paling banyak digunakan oleh data engineer dan backend developer. Dan dari semua perintah SQL, JOIN adalah yang paling sering muncul di soal interview kerja. Artinya, menguasai INNER JOIN bukan cuma soal lulus kuliah — tapi soal dapat kerja! ๐ŸŽฏ

๐Ÿ“ Sintaks INNER JOIN MySQL

Sebelum masuk ke contoh, pahami dulu kerangka dasar sintaksnya agar nggak kebingungan saat membaca query yang lebih kompleks:

SELECT
  tabel_a.kolom1,          -- kolom dari tabel pertama
  tabel_a.kolom2,
  tabel_b.kolom1,          -- kolom dari tabel kedua
  tabel_b.kolom2

FROM tabel_a              -- tabel utama (kiri)

INNER JOIN tabel_b        -- tabel yang digabungkan (kanan)
  ON tabel_a.kolom_kunci = tabel_b.kolom_kunci
                           -- kondisi pencocokan (harus bernilai sama)

WHERE kondisi_tambahan     -- opsional: filter tambahan
ORDER BY kolom_urut;       -- opsional: urutan hasil

Kunci memahami INNER JOIN: Klausa ON adalah jantungnya. Di sinilah kamu memberitahu MySQL: "Cocokkan baris dari tabel_a dengan tabel_b kalau nilai kolom ini sama." Baris yang tidak punya pasangan di kedua tabel akan otomatis dibuang.

1. Kenapa Database Butuh Lebih dari Satu Tabel?

Coba bayangkan toko online kamu menyimpan semua data dalam satu tabel raksasa: nama pelanggan, alamat, nomor HP, nama produk, harga, stok, tanggal pesanan... semuanya jadi satu baris. Kalau pelanggan yang sama pesan 100 kali, data nama dan alamatnya tersalin 100 kali. Boros, rawan salah, dan susah diupdate!

Solusinya adalah normalisasi — memecah data ke tabel-tabel terpisah yang saling berhubungan via foreign key. Tabel pelanggan menyimpan data pelanggan, tabel pesanan menyimpan transaksi. Nah, saat butuh laporan lengkap, INNER JOIN MySQL-lah yang menyatukan mereka kembali.

๐Ÿ“‹ Tabel: pelanggan

๐Ÿ”‘ id_pelanggan (PK)
nama_pelanggan
email
kota

๐Ÿ“‹ Tabel: pesanan

๐Ÿ”‘ id_pesanan (PK)
๐Ÿ”— id_pelanggan (FK)
total_harga
tanggal_pesan
status
SQL — Setup Tabel Latihan
-- Tabel pelanggan
CREATE TABLE pelanggan (
  id_pelanggan INT PRIMARY KEY,
  nama         VARCHAR(50),
  kota         VARCHAR(30)
);

-- Tabel pesanan (id_pelanggan = foreign key)
CREATE TABLE pesanan (
  id_pesanan   VARCHAR(10) PRIMARY KEY,
  id_pelanggan INT,
  total_harga  DECIMAL(12,2),
  status       VARCHAR(20),
  FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan)
);

✅ Tip Praktis

Kolom yang dijadikan penghubung antara dua tabel disebut Foreign Key (FK). Nilainya harus sama persis — baik tipe data maupun isinya — agar INNER JOIN berhasil mencocokkan baris-barisnya. Pastikan tipe data FK di kedua tabel identik (misalnya: keduanya INT)!

2. Cara Kerja INNER JOIN MySQL — Hanya Baris yang "Cocok" yang Lolos

Analogi paling pas untuk INNER JOIN adalah acara blind date yang ketat: hanya pasangan yang saling setuju (ID cocok di kedua tabel) yang bisa duduk bersama. Kalau di tabel kiri ada pelanggan yang belum pernah pesan apapun, dia tidak akan muncul di hasil. Begitu pula sebaliknya — pesanan dengan ID pelanggan yang tidak ada di tabel pelanggan juga ikut tersingkir.

pelanggan
(tidak cocok)
INNER
JOIN
pesanan
(tidak cocok)

Hanya irisan tengah yang dikembalikan oleh INNER JOIN

SQL Query — INNER JOIN Dasar
-- Gabungkan tabel pesanan dengan data pelanggan
SELECT
  pe.id_pesanan,
  pl.nama          AS nama_pelanggan,
  pl.kota,
  pe.total_harga,
  pe.status
FROM pesanan pe
INNER JOIN pelanggan pl
  ON pe.id_pelanggan = pl.id_pelanggan
ORDER BY pe.total_harga DESC;

๐Ÿ“Š Hasil Query:

id_pesanan nama_pelanggan kota total_harga status
P-0086 Rini Susanti Surabaya 620.000 dikirim
P-0091 Budi Santoso Jakarta 250.000 selesai
P-0082 Dewi Lestari Bandung 185.000 dikirim
P-0078 Budi Santoso Jakarta 130.000 selesai

⚠️ Peringatan

Perhatikan penggunaan alias tabel seperti pe untuk pesanan dan pl untuk pelanggan. Alias wajib digunakan saat dua tabel punya nama kolom yang sama (misalnya keduanya punya kolom id), agar MySQL tidak bingung kolom milik tabel mana yang kamu maksud.

3. INNER JOIN MySQL dengan Tiga Tabel — Level Up!

Di dunia nyata, toko online punya setidaknya tiga tabel utama: pelanggan, pesanan, dan produk. Untuk menampilkan laporan lengkap seperti "Siapa beli apa dan bayar berapa", kita perlu menggabungkan ketiganya dengan cara menjahit INNER JOIN lebih dari sekali — seperti merangkai rantai.

Biasanya ada tabel perantara detail_pesanan yang menghubungkan pesanan dengan produknya, karena satu pesanan bisa berisi banyak produk.

SQL Query — JOIN 3 Tabel
-- Laporan: siapa beli produk apa, berapa qty, total bayar
SELECT
  pl.nama            AS pelanggan,
  pr.nama_produk,
  dp.qty,
  dp.harga_satuan,
  (dp.qty * dp.harga_satuan) AS subtotal,
  pe.tanggal_pesan
FROM pesanan pe
INNER JOIN pelanggan pl
  ON pe.id_pelanggan = pl.id_pelanggan
INNER JOIN detail_pesanan dp
  ON pe.id_pesanan = dp.id_pesanan
INNER JOIN produk pr
  ON dp.id_produk = pr.id_produk
ORDER BY pe.tanggal_pesan DESC;

๐Ÿ“Š Hasil Query:

pelanggan nama_produk qty harga_satuan subtotal tanggal_pesan
Rini Susanti Sepatu Lari X200 1 450.000 450.000 2025-08-11
Rini Susanti Kaus Olahraga Pro 2 85.000 170.000 2025-08-11
Budi Santoso Tas Ransel Casual 1 250.000 250.000 2025-08-15
Dewi Lestari Topi Baseball Unisex 3 60.000 180.000 2025-08-10

✅ Tip Praktis

Saat JOIN lebih dari 2 tabel, buat sketsa relasinya dulu di kertas: tabel mana yang jadi "jembatan"? Alurnya seperti: pesanan → detail_pesanan → produk. Dengan peta relasi yang jelas, urutan INNER JOIN-mu tidak akan salah!

4. Kombinasi INNER JOIN + WHERE + GROUP BY — Laporan Siap Pakai

JOIN sendiri sudah powerful. Tapi JOIN yang dikombinasikan dengan WHERE dan GROUP BY? Itu baru namanya senjata sesungguhnya. Di sinilah kamu bisa bikin laporan seperti "Total belanja per pelanggan bulan ini" — persis seperti fitur di dashboard admin e-commerce sungguhan.

SQL Query — Total Belanja per Pelanggan
-- Rekap total belanja per pelanggan, bulan Agustus 2025
SELECT
  pl.nama          AS pelanggan,
  pl.kota,
  COUNT(pe.id_pesanan)   AS jumlah_transaksi,
  SUM(pe.total_harga)    AS total_belanja
FROM pelanggan pl
INNER JOIN pesanan pe
  ON pl.id_pelanggan = pe.id_pelanggan
WHERE
  MONTH(pe.tanggal_pesan) = 8
  AND YEAR(pe.tanggal_pesan) = 2025
GROUP BY pl.id_pelanggan, pl.nama, pl.kota
ORDER BY total_belanja DESC;

๐Ÿ“Š Hasil Query:

pelanggan kota jumlah_transaksi total_belanja
Rini Susanti Surabaya 1 620.000
Budi Santoso Jakarta 2 380.000
Dewi Lestari Bandung 1 185.000

⚠️ Peringatan

Saat menggunakan GROUP BY bersama JOIN, semua kolom di SELECT yang bukan agregat (bukan SUM, COUNT, dll) harus ikut di GROUP BY. Jika tidak, MySQL bisa mengembalikan hasil yang tidak terduga atau bahkan error di mode strict SQL.

๐Ÿงช Langkah Praktikum — Dari Nol Sampai Bisa!

1

Buat dan Isi Tabel Pelanggan

Mulai dengan membuat tabel induk terlebih dahulu sebelum membuat tabel yang punya foreign key.

USE db_toko;

INSERT INTO pelanggan VALUES
  (101, 'Budi Santoso',  'Jakarta'),
  (102, 'Dewi Lestari',  'Bandung'),
  (103, 'Rini Susanti',  'Surabaya'),
  (104, 'Ahmad Fauzi',   'Medan');
-- Ahmad belum pernah pesan → tidak akan muncul di INNER JOIN
2

Isi Tabel Pesanan

Perhatikan bahwa id_pelanggan 104 (Ahmad) tidak punya pesanan — ini sengaja untuk membuktikan perilaku INNER JOIN.

INSERT INTO pesanan VALUES
  ('P-0078', 101, 130000, 'selesai',  '2025-08-08'),
  ('P-0082', 102, 185000, 'dikirim', '2025-08-10'),
  ('P-0086', 103, 620000, 'dikirim', '2025-08-11'),
  ('P-0091', 101, 250000, 'selesai',  '2025-08-15');
3

Jalankan INNER JOIN Pertamamu

Jalankan query ini dan perhatikan hasilnya — Ahmad tidak muncul karena tidak punya pesanan!

SELECT
  pl.nama, pl.kota,
  pe.id_pesanan, pe.total_harga, pe.status
FROM pesanan pe
INNER JOIN pelanggan pl
  ON pe.id_pelanggan = pl.id_pelanggan;
4

Tantangan Mini — Buktikan Sendiri!

Coba tambahkan filter WHERE pl.kota = 'Jakarta' setelah INNER JOIN. Berapa pesanan yang muncul? Lalu ganti dengan GROUP BY pl.nama untuk menghitung total belanja per pelanggan Jakarta!

๐Ÿ“‹ Perbandingan Jenis-Jenis JOIN di MySQL

INNER JOIN adalah yang paling umum, tapi MySQL punya beberapa jenis JOIN lain yang akan kita pelajari di artikel-artikel berikutnya. Berikut gambaran singkatnya agar kamu tidak kaget:

Jenis JOIN Yang Dikembalikan Analogi Paling Sering?
INNER JOIN Baris yang cocok di kedua tabel Irisan dua lingkaran ⭐⭐⭐⭐⭐
LEFT JOIN Semua baris tabel kiri + yang cocok di kanan Semua pelanggan, pesanan jika ada ⭐⭐⭐⭐
RIGHT JOIN Semua baris tabel kanan + yang cocok di kiri Kebalikan LEFT JOIN ⭐⭐
CROSS JOIN Semua kombinasi baris kedua tabel Kartu remi dikali kartu remi
๐ŸŽฏ

Tips dari Lapangan #1

Selalu gunakan alias tabel pendek saat JOIN: FROM pesanan pe dan INNER JOIN pelanggan pl. Query jadi lebih pendek, mudah dibaca, dan nggak error karena nama kolom ambigu. Trainer lapangan selalu melihat ini sebagai tanda programmer yang rapi dan profesional.

๐Ÿš€

Tips dari Lapangan #2

Kalau hasil INNER JOIN kamu terlihat lebih banyak dari yang diharapkan (baris terduplikasi), kemungkinan ada relasi one-to-many yang tidak terkendali. Cek apakah kamu sudah GROUP BY dengan benar, atau tambahkan DISTINCT untuk membersihkan duplikat.

๐ŸŽ“ Kesimpulan — Kamu Sudah Bisa JOIN!

Artikel ke-20 ini membahas salah satu topik terpenting dalam SQL — INNER JOIN MySQL. Ini bukan sekadar perintah, ini adalah cara kamu mulai berpikir secara relasional tentang data. Berikut poin kunci yang sudah kita kuasai:

  • Normalisasi database adalah alasan kita perlu lebih dari satu tabel
  • INNER JOIN hanya mengembalikan baris yang cocok di kedua tabel (via klausa ON)
  • Alias tabel (pe, pl) wajib digunakan untuk kejelasan dan menghindari ambiguitas kolom
  • JOIN bisa dirantai lebih dari dua tabel — cukup tambahkan INNER JOIN berikutnya
  • Kombinasi INNER JOIN + WHERE + GROUP BY menghasilkan laporan bisnis yang powerful
  • MySQL memiliki 4 jenis JOIN — INNER, LEFT, RIGHT, dan CROSS — masing-masing untuk kasus berbeda

Kalau sebelumnya kamu cuma bisa query satu tabel, sekarang kamu sudah naik level! Dunia JOIN masih luas — LEFT JOIN menanti di artikel berikutnya. Keep going! ๐Ÿ’ช

Bagikan ke teman TI-mu yang lagi belajar SQL! ๐Ÿ™Œ

Ada pertanyaan soal JOIN? Atau punya kasus JOIN yang bikin kamu pusing? Tulis di kolom komentar — kita bedah bareng! Dan jangan lupa bookmark seri ini biar nggak kelewatan.


๐Ÿ“š
Navigasi Seri Artikel · MySQL Mastery
← Artikel Sebelumnya

Artikel 19/28: Fungsi Tanggal — NOW, DATE, YEAR, MONTH

Mengolah dan menghitung nilai tanggal/waktu menggunakan fungsi date bawaan MySQL secara lengkap.

Artikel Selanjutnya →

Artikel 21/28: LEFT JOIN, RIGHT JOIN, dan CROSS JOIN

Tiga jenis JOIN lanjutan: LEFT JOIN, RIGHT JOIN, dan CROSS JOIN beserta kapan menggunakannya.

Artikel 20 dari 28 dalam seri ini 71% selesai

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux