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

Wednesday, April 8, 2026

join multi table mysql

Beranda Tutorial MySQL Artikel 22
๐Ÿ”ด Lanjutan ๐Ÿ”— Multi-Table JOIN ⏱ 13 menit baca ๐Ÿ“˜ Artikel 22/28

JOIN Lebih dari Dua Tabel Sekaligus:
Multi-Table JOIN MySQL

Satu JOIN sudah bisa — sekarang waktunya naik level! Pelajari cara menyambungkan tiga tabel atau lebih dalam satu query yang rapi, efisien, dan mudah dibaca.

4
Pola JOIN
9+
Contoh Query
13
Menit Baca
5
Langkah Praktik

Pernah beli barang online, terus kamu bisa lihat nama kamu, nama produknya, kategori produk, nama kurir, hingga nama kota pengiriman — semua dalam satu halaman? Di balik tampilan itu, ada satu query SQL yang menyatukan empat atau lima tabel sekaligus. Itulah kekuatan multi table JOIN MySQL yang akan kita bahas di artikel ke-22 dari seri 28 artikel Belajar Query SQL MySQL ini!

Kalau di artikel sebelumnya kamu sudah paham LEFT JOIN, RIGHT JOIN, dan CROSS JOIN antara dua tabel — sekarang kita naik level. Dunia nyata jarang punya cuma dua tabel. Aplikasi toko online yang serius bisa punya belasan tabel yang saling terhubung, dan kamu perlu bisa menarik data dari semuanya dalam satu query yang bersih dan efisien.

Di artikel ini kita akan belajar: cara menyusun multi-table JOIN, urutan tabel yang benar, menghindari jebakan alias yang bikin error, dan contoh query nyata dari studi kasus toko online kita. Siap? Mari mulai!

๐Ÿคฏ
Fakta Menarik

Sistem ERP (Enterprise Resource Planning) seperti SAP atau Odoo yang digunakan perusahaan besar seringkali memiliki query dengan 10–20 tabel yang di-JOIN sekaligus. Seorang DBA (Database Administrator) senior wajib bisa membaca dan mengoptimasi query raksasa seperti itu. Fondasi dasarnya? Persis yang kamu pelajari sekarang!

01. Konsep Dasar: Rantai JOIN

Analogi: Bayangkan kamu mau trace sebuah paket pengiriman. Kamu mulai dari struk belanja (pesanan), lalu cocokkan dengan buku produk (tabel produk), kemudian cocokkan lagi dengan data pelanggan (tabel pelanggan), dan terakhir dengan catatan pengiriman (tabel pengiriman). Kamu berpindah dari satu buku ke buku lain secara berantai — itulah multi-table JOIN!

MySQL memproses JOIN dari kiri ke kanan secara berurutan. Setiap JOIN menambahkan tabel baru ke hasil sementara yang sudah ada. Jadi multi table JOIN MySQL pada dasarnya adalah tumpukan JOIN — satu di atas yang lain.

๐Ÿ“ Sintaks Lengkap Multi-Table JOIN
SELECT
  t1.kolom_a,          -- kolom dari tabel pertama
  t2.kolom_b,          -- kolom dari tabel kedua
  t3.kolom_c,          -- kolom dari tabel ketiga
  t4.kolom_d           -- kolom dari tabel keempat (dst)

FROM       tabel1 t1           -- tabel utama (anchor/basis)

INNER JOIN tabel2 t2           -- JOIN tabel kedua
  ON       t1.id = t2.fk_id   -- kondisi relasi tabel1 ↔ tabel2

INNER JOIN tabel3 t3           -- JOIN tabel ketiga ke hasil sebelumnya
  ON       t2.id = t3.fk_id   -- kondisi relasi tabel2 ↔ tabel3

LEFT JOIN  tabel4 t4           -- bisa campur jenis JOIN!
  ON       t3.id = t4.fk_id   -- kondisi relasi tabel3 ↔ tabel4

WHERE      t1.kolom = 'nilai'  -- filter opsional
ORDER BY   t1.kolom_a;         -- urutan opsional
๐Ÿ’ก Poin Kunci

Kamu tidak wajib pakai jenis JOIN yang sama untuk setiap JOIN. Dalam satu query, kamu bisa campur INNER JOIN dan LEFT JOIN sesuai kebutuhan. Tabel yang datanya wajib ada? Pakai INNER JOIN. Tabel yang opsional? Pakai LEFT JOIN.

Setup Data Toko Online (4 Tabel):

-- Tabel 1: pelanggan
CREATE TABLE pelanggan (
  id_pelanggan INT PRIMARY KEY,
  nama         VARCHAR(100),
  kota         VARCHAR(50)
);
INSERT INTO pelanggan VALUES
  (1,'Andi','Jakarta'),(2,'Budi','Bandung'),(3,'Citra','Surabaya');

-- Tabel 2: kategori
CREATE TABLE kategori (
  id_kategori  INT PRIMARY KEY,
  nama_kategori VARCHAR(50)
);
INSERT INTO kategori VALUES
  (1,'Elektronik'),(2,'Aksesoris'),(3,'Peripheral');

-- Tabel 3: produk (relasi ke kategori)
CREATE TABLE produk (
  id_produk    INT PRIMARY KEY,
  nama_produk  VARCHAR(100),
  id_kategori  INT,
  harga        INT
);
INSERT INTO produk VALUES
  (1,'Laptop Gaming',1,15000000),
  (2,'Mouse Wireless',2,250000),
  (3,'Mechanical Keyboard',3,750000),
  (4,'Monitor 4K',1,5000000);

-- Tabel 4: pesanan (relasi ke pelanggan & produk)
CREATE TABLE pesanan (
  id_pesanan   INT PRIMARY KEY,
  id_pelanggan INT,
  id_produk    INT,
  jumlah       INT,
  tanggal      DATE
);
INSERT INTO pesanan VALUES
  (101,1,1,1,'2024-01-15'),
  (102,2,2,2,'2024-01-16'),
  (103,1,3,1,'2024-01-17'),
  (104,3,4,1,'2024-01-18'),
  (105,2,1,1,'2024-01-19');

02. JOIN 3 Tabel: Pesanan + Pelanggan + Produk

Kasus paling umum dalam multi table JOIN MySQL adalah laporan yang butuh info dari tiga tabel: kita mau tahu siapa yang memesan (pelanggan), apa yang dipesan (produk), dan kapan dipesan (pesanan). Tabel pesanan menjadi jembatan — karena dia punya id_pelanggan dan id_produk sekaligus.

-- Laporan pesanan lengkap (3 tabel)
SELECT
  ps.id_pesanan,
  ps.tanggal,
  pl.nama            AS nama_pelanggan,
  pl.kota,
  pr.nama_produk,
  ps.jumlah,
  pr.harga,
  (ps.jumlah * pr.harga) AS total_bayar

FROM       pesanan ps               -- tabel anchor/utama

INNER JOIN pelanggan pl             -- JOIN tabel pelanggan
  ON       ps.id_pelanggan = pl.id_pelanggan

INNER JOIN produk pr               -- JOIN tabel produk
  ON       ps.id_produk = pr.id_produk

ORDER BY   ps.tanggal;
๐Ÿ“Š Hasil Query (JOIN 3 Tabel):
id_pesanan tanggal nama_pelanggan kota nama_produk jumlah total_bayar
1012024-01-15AndiJakartaLaptop Gaming115.000.000
1022024-01-16BudiBandungMouse Wireless2500.000
1032024-01-17AndiJakartaMechanical Keyboard1750.000
1042024-01-18CitraSurabayaMonitor 4K15.000.000
1052024-01-19BudiBandungLaptop Gaming115.000.000

⬆️ Kolom total_bayar dihitung langsung di SELECT — kamu bisa bikin kolom kalkulasi langsung dalam query tanpa perlu tabel baru!

✅ Tip Praktis

Jadikan tabel yang menjadi penghubung antar tabel lain (seperti tabel pesanan yang punya FK ke mana-mana) sebagai tabel utama di klausa FROM. Ini membuat alur join lebih logis dan mudah diikuti.

03. JOIN 4 Tabel: Tambahkan Kategori Produk

Sekarang kita tambah satu tabel lagi — kategori — agar di laporan muncul nama kategori produk, bukan cuma nama produknya. Ini adalah contoh klasik multi table JOIN MySQL empat tabel, yang sering muncul di tugas akhir dan proyek kampus.

Perhatikan urutannya: pesanan → pelanggan → produk → kategori. Setiap JOIN harus "masuk akal" — relasi antara tabel yang sedang di-JOIN dan hasil gabungan sebelumnya harus jelas.

-- Laporan lengkap dengan kategori (4 tabel)
SELECT
  ps.id_pesanan,
  ps.tanggal,
  pl.nama              AS pelanggan,
  pl.kota,
  k.nama_kategori      AS kategori,    -- dari tabel kategori
  pr.nama_produk,
  pr.harga,
  ps.jumlah,
  (ps.jumlah * pr.harga) AS subtotal

FROM       pesanan ps

INNER JOIN pelanggan pl
  ON       ps.id_pelanggan = pl.id_pelanggan

INNER JOIN produk pr
  ON       ps.id_produk = pr.id_produk

INNER JOIN kategori k             -- JOIN ke tabel kategori lewat produk
  ON       pr.id_kategori = k.id_kategori

ORDER BY   k.nama_kategori, ps.tanggal;
๐Ÿ“Š Hasil Query (JOIN 4 Tabel — diurutkan per kategori):
id tanggal pelanggan kota kategori nama_produk subtotal
1022024-01-16BudiBandungAksesorisMouse Wireless500.000
1012024-01-15AndiJakartaElektronikLaptop Gaming15.000.000
1042024-01-18CitraSurabayaElektronikMonitor 4K5.000.000
1052024-01-19BudiBandungElektronikLaptop Gaming15.000.000
1032024-01-17AndiJakartaPeripheralMechanical Keyboard750.000
⚠️ Jangan Lupa!

Kondisi ON di setiap JOIN harus merujuk ke tabel yang sudah ada di hasil JOIN sebelumnya atau tabel yang baru dimasukkan. Kamu tidak bisa merujuk tabel yang belum di-JOIN. Urutan JOIN menentukan tabel mana yang "tersedia" di kondisi ON berikutnya.

04. Jebakan Umum & Cara Menghindarinya

Semakin banyak tabel yang di-JOIN, semakin banyak peluang untuk error atau hasil yang tidak terduga. Ini tiga jebakan paling sering dialami mahasiswa saat pertama kali mencoba multi table JOIN MySQL:

❌ SALAH — Kolom Ambigu (Ambiguous Column)
SELECT nama, nama_produk, harga  -- "nama" ada di tabel pelanggan DAN produk!
FROM pesanan
INNER JOIN pelanggan ON pesanan.id_pelanggan = pelanggan.id_pelanggan
INNER JOIN produk ON pesanan.id_produk = produk.id_produk;
-- ERROR: Column 'nama' in field list is ambiguous
✅ BENAR — Selalu Prefix dengan Alias Tabel
SELECT
  pl.nama        AS nama_pelanggan,  -- eksplisit: dari tabel pelanggan
  pr.nama_produk,                     -- dari tabel produk
  pr.harga
FROM       pesanan ps
INNER JOIN pelanggan pl ON ps.id_pelanggan = pl.id_pelanggan
INNER JOIN produk pr    ON ps.id_produk = pr.id_produk;
-- ✓ Query berjalan dengan benar
๐Ÿ“Š Hasil Setelah Diperbaiki:
nama_pelanggan nama_produk harga
AndiLaptop Gaming15.000.000
BudiMouse Wireless250.000
AndiMechanical Keyboard750.000
CitraMonitor 4K5.000.000
BudiLaptop Gaming15.000.000
⚠️ Aturan Emas Multi-Table JOIN

Selalu gunakan alias tabel yang pendek dan konsisten. Jangan pernah sebutkan nama kolom tanpa prefix alias ketika JOIN lebih dari satu tabel — bahkan jika kamu "yakin" nama kolomnya unik. Kebiasaan ini menyelamatkan kamu dari berjam-jam debugging!

๐Ÿงช Panduan Praktikum Step-by-Step

1
Buat Database & Jalankan Script Setup

Buka MySQL Workbench, buat database baru, dan jalankan semua CREATE TABLE + INSERT INTO dari bagian setup di atas.

CREATE DATABASE toko_online_v2;
USE toko_online_v2;
-- Lalu jalankan semua script setup di atas
2
Verifikasi Semua Tabel

Cek setiap tabel sebelum mulai JOIN — pastikan data sudah masuk dengan benar.

SELECT * FROM pelanggan; -- 3 baris
SELECT * FROM kategori; -- 3 baris
SELECT * FROM produk; -- 4 baris
SELECT * FROM pesanan; -- 5 baris
3
Mulai dengan JOIN 2 Tabel Dulu

Jangan langsung JOIN 4 tabel. Mulai dari 2 tabel, pastikan hasilnya benar, baru tambah JOIN berikutnya satu per satu.

SELECT ps.id_pesanan, pl.nama
FROM pesanan ps
INNER JOIN pelanggan pl
ON ps.id_pelanggan = pl.id_pelanggan;
-- Cek: 5 baris? Bagus, lanjut tambah JOIN ketiga
4
Tambah JOIN Ketiga (Produk) & Cek Hasilnya

Setelah JOIN 2 tabel berhasil, tambahkan INNER JOIN produk. Jumlah baris seharusnya tetap 5 (karena semua pesanan punya produk yang valid).

5
Tambah JOIN Keempat (Kategori) & Buat Laporan Lengkap

Setelah 3 tabel sukses, sambungkan tabel kategori lewat produk. Tambahkan kolom kalkulasi dan ORDER BY untuk laporan profesional.

-- Filter hanya pembelian dari Jakarta
WHERE pl.kota = 'Jakarta'
-- Harusnya muncul 2 baris (pesanan Andi)

๐Ÿ“‹ Ringkasan: Pola Multi-Table JOIN

Skenario Pola JOIN Cocok Untuk Risiko
2 tabel wajib ada INNER JOIN INNER JOIN Laporan yang butuh data valid semua tabel Rendah
1 tabel opsional INNER JOIN LEFT JOIN Data utama wajib, data tambahan boleh kosong Rendah
Semua opsional LEFT JOIN LEFT JOIN Rekap komprehensif dengan banyak NULL Sedang
Self JOIN tabel JOIN tabel AS alias Hierarki dalam satu tabel (atasan-bawahan) Sedang
5+ tabel Campuran sesuai kebutuhan Sistem ERP, laporan kompleks Tinggi (perlu index!)
๐ŸŽ“ Insight Trainer

Di dunia kerja, developer sering membangun query multi-table JOIN secara incremental — tambahkan satu JOIN, cek hasilnya, baru tambah lagi. Jangan langsung tulis 5 JOIN sekaligus kalau belum yakin relasi antar tabelnya!

๐Ÿ’ก Tip Performa

Semakin banyak tabel yang di-JOIN, semakin penting untuk punya INDEX pada kolom yang dipakai di kondisi ON. Tanpa index, MySQL harus scan seluruh tabel untuk setiap baris — bisa sangat lambat di data besar!

✅ Kesimpulan

  • Multi table JOIN MySQL adalah kemampuan menggabungkan tiga tabel atau lebih dalam satu query menggunakan klausa JOIN yang dirantai secara berurutan.
  • Setiap JOIN ditambahkan setelah yang sebelumnya — MySQL memproses dari kiri ke kanan, membangun hasil sementara di setiap tahap.
  • Alias tabel bukan opsional — di multi-table JOIN, alias adalah wajib untuk menghindari ambiguitas kolom dan membuat query mudah dibaca.
  • Kamu bisa campur jenis JOIN (INNER dan LEFT) dalam satu query sesuai apakah tabel tersebut wajib ada datanya atau opsional.
  • Bangun query secara incremental — mulai dari 2 tabel, verifikasi, baru tambah JOIN berikutnya. Hindari menulis 5 JOIN sekaligus tanpa mengecek tiap tahapnya.
  • Untuk multi table JOIN MySQL di data besar, selalu pastikan ada INDEX pada kolom yang dipakai sebagai kondisi ON untuk performa optimal.

"Database yang baik adalah yang bisa bercerita. Dan multi-table JOIN adalah cara kamu membuat semua tabel bercerita bersama-sama dalam satu kalimat yang kohesif. Kuasai ini, dan kamu selangkah lebih dekat jadi database developer yang sesungguhnya. ๐Ÿš€"

๐Ÿ’ฌ Sudah coba JOIN lebih dari 3 tabel?

Ceritakan pengalaman kamu di kolom komentar — berhasil langsung atau ada yang bikin pusing dulu? Kalau artikel ini berguna, share ke teman satu kelas dan bookmark halaman ini untuk referensi tugas! ⭐

๐Ÿ“– Artikel Berikutnya (23/28)
Subquery & Nested Query di MySQL

Menyarangkan query di dalam query lain — teknik powerful untuk analisis data yang lebih kompleks dan fleksibel!

Baca Sekarang →
MySQL SQL Database Query Tutorial multi table JOIN MySQL JOIN 4 Tabel Belajar MySQL

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