MySQL dan SQL

Belajar SQL JOIN: Pengertian, Jenis-Jenis, dan Contoh Query MySQL

31 October 2026 Ditulis oleh Admin Artikel & Tutorial

Dalam pengembangan aplikasi berbasis database, data biasanya tidak disimpan dalam satu tabel saja. Sebagai contoh, aplikasi penjualan memiliki tabel pelanggan, produk, transaksi, dan detail transaksi. Setiap tabel menyimpan informasi yang berbeda, tetapi saling berhubungan.

Lalu, bagaimana jika kita ingin menampilkan nama pelanggan sekaligus informasi transaksi yang pernah dilakukan? Apakah kita harus mengambil data dari setiap tabel secara terpisah? Di sinilah SQL JOIN digunakan.

SQL JOIN adalah perintah SQL yang berfungsi untuk menggabungkan data dari dua tabel atau lebih berdasarkan hubungan antara kolom yang dimiliki tabel tersebut.

JOIN merupakan salah satu konsep penting dalam pengelolaan database MySQL. Dengan memahami JOIN, kita dapat membuat query untuk menampilkan laporan penjualan, data mahasiswa beserta nilai, informasi pelanggan, hingga berbagai kebutuhan aplikasi sistem informasi.

Pada artikel ini, kita akan mempelajari pengertian SQL JOIN, jenis-jenis JOIN, perbedaan setiap jenis JOIN, serta contoh query MySQL yang dapat langsung dicoba.

1. Apa Itu SQL JOIN?

SQL JOIN adalah operasi dalam SQL yang digunakan untuk menggabungkan baris data dari dua tabel atau lebih berdasarkan kondisi tertentu.

Umumnya, penggabungan dilakukan menggunakan kolom yang saling berhubungan, seperti primary key dan foreign key.

Sebagai contoh, sebuah aplikasi penjualan memiliki dua tabel berikut.

Tabel pelanggan

Geser tabel
id_pelanggan nama_pelanggan
1 Andi
2 Budi
3 Citra
4 Dedi

Tabel transaksi

Geser tabel
id_transaksi id_pelanggan total
101 1 200000
102 2 150000
103 1 300000
104 3 250000

Pada tabel pelanggan terdapat kolom id_pelanggan yang menjadi identitas setiap pelanggan. Sementara itu, tabel transaksi memiliki kolom id_pelanggan untuk menunjukkan pelanggan yang melakukan transaksi.

Jika ingin menampilkan nama pelanggan dan total transaksi dalam satu hasil query, kita dapat menggunakan JOIN.

Dengan demikian, JOIN membantu kita mengambil informasi dari beberapa tabel tanpa harus menyimpan seluruh informasi dalam satu tabel yang sama.

2. Mengapa SQL JOIN Penting?

Dalam perancangan database relasional, data biasanya dipisahkan ke dalam beberapa tabel untuk menjaga struktur dan mengurangi pengulangan data.

Misalnya, jika setiap transaksi menyimpan nama pelanggan secara langsung, nama pelanggan yang sama akan berulang berkali-kali.

Dengan memisahkan tabel pelanggan dan transaksi, informasi pelanggan cukup disimpan satu kali, sedangkan tabel transaksi hanya menyimpan ID pelanggan sebagai penghubung.

SQL JOIN memiliki beberapa manfaat, antara lain:

  1. Menggabungkan data dari beberapa tabel. Kita dapat mengambil informasi yang tersebar pada tabel berbeda.
  2. Membuat laporan lebih lengkap. Misalnya, laporan transaksi yang menampilkan nama pelanggan, tanggal, dan total pembelian.
  3. Mengurangi pengulangan data. Database dapat dirancang dengan tabel yang memiliki fungsi masing-masing.
  4. Mempermudah pengolahan informasi. Kita dapat membuat query yang menggabungkan data sesuai kebutuhan aplikasi.
  5. Mendukung pengembangan sistem informasi. JOIN banyak digunakan pada aplikasi akademik, penjualan, inventaris, keuangan, dan administrasi.

3. Jenis-Jenis SQL JOIN

Dalam SQL, terdapat beberapa jenis JOIN yang memiliki cara kerja berbeda. Jenis yang paling umum dipelajari adalah INNER JOIN, LEFT JOIN, RIGHT JOIN, dan CROSS JOIN.

Selain itu, terdapat juga SELF JOIN yang digunakan untuk menggabungkan sebuah tabel dengan dirinya sendiri. Berikut penjelasannya.

A. INNER JOIN

INNER JOIN digunakan untuk menampilkan data yang memiliki pasangan atau kecocokan pada kedua tabel berdasarkan kondisi JOIN.

Contoh query:

SELECT
    pelanggan.id_pelanggan,
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    transaksi.total
FROM pelanggan
INNER JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan;

Hasil query:

Geser tabel
id_pelanggan nama_pelanggan id_transaksi total
1 Andi 101 200000
2 Budi 102 150000
1 Andi 103 300000
3 Citra 104 250000

Penjelasan:

  • FROM pelanggan menentukan tabel utama yang digunakan.
  • INNER JOIN transaksi menggabungkan tabel pelanggan dengan tabel transaksi.
  • ON menentukan hubungan antara kedua tabel.
  • Hasilnya hanya menampilkan pelanggan yang mempunyai transaksi.

Pada contoh tersebut, Dedi tidak ditampilkan karena belum memiliki transaksi.

INNER JOIN cocok digunakan ketika kita hanya membutuhkan data yang memiliki hubungan pada kedua tabel.

B. LEFT JOIN

LEFT JOIN digunakan untuk menampilkan seluruh data dari tabel sebelah kiri, meskipun tidak memiliki pasangan pada tabel sebelah kanan. Jika tidak ditemukan pasangan, kolom dari tabel kanan akan berisi NULL.

Contoh query:

SELECT
    pelanggan.id_pelanggan,
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    transaksi.total
FROM pelanggan
LEFT JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan;

Hasil query:

Geser tabel
id_pelanggan nama_pelanggan id_transaksi total
1 Andi 101 200000
1 Andi 103 300000
2 Budi 102 150000
3 Citra 104 250000
4 Dedi NULL NULL

Penjelasan:

  • Seluruh pelanggan tetap ditampilkan.
  • Pelanggan yang memiliki beberapa transaksi akan muncul beberapa kali.
  • Pelanggan yang belum memiliki transaksi tetap muncul dengan nilai NULL pada kolom transaksi.

LEFT JOIN sangat berguna ketika kita ingin mengetahui seluruh data utama, termasuk data yang belum memiliki relasi. Contohnya, menampilkan seluruh mahasiswa beserta nilai ujian, termasuk mahasiswa yang belum memiliki nilai.

C. RIGHT JOIN

RIGHT JOIN merupakan kebalikan dari LEFT JOIN. Jenis JOIN ini menampilkan seluruh data dari tabel sebelah kanan, termasuk data yang tidak memiliki pasangan pada tabel sebelah kiri.

Contoh query:

SELECT
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    transaksi.total
FROM pelanggan
RIGHT JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan;

Hasil query:

Geser tabel
nama_pelanggan id_transaksi total
Andi 101 200000
Budi 102 150000
Andi 103 300000
Citra 104 250000

Penjelasan:

  • Seluruh baris dari tabel transaksi akan ditampilkan.
  • Jika transaksi tidak memiliki pasangan pelanggan, kolom pelanggan akan bernilai NULL.
  • Data pelanggan yang tidak mempunyai transaksi tidak akan ditampilkan.

RIGHT JOIN dapat digunakan ketika tabel sebelah kanan menjadi sumber data utama yang harus ditampilkan seluruhnya.

D. CROSS JOIN

CROSS JOIN digunakan untuk menghasilkan kombinasi setiap baris dari tabel pertama dengan setiap baris dari tabel kedua. Berbeda dengan INNER JOIN dan LEFT JOIN, CROSS JOIN tidak membutuhkan kondisi hubungan menggunakan ON. Contoh, kita memiliki tabel berikut.

Tabel warna

Geser tabel
id_warna nama_warna
1 Merah
2 Biru

Tabel ukuran

Geser tabel
id_ukuran nama_ukuran
1 S
2 M
3 L

Query CROSS JOIN:

SELECT
    warna.nama_warna,
    ukuran.nama_ukuran
FROM warna
CROSS JOIN ukuran;

Hasil query:

Geser tabel
nama_warna nama_ukuran
Merah S
Merah M
Merah L
Biru S
Biru M
Biru L

Hasilnya terdapat enam kombinasi karena tabel warna memiliki dua baris dan tabel ukuran memiliki tiga baris.

CROSS JOIN dapat digunakan untuk membuat kombinasi produk, ukuran, warna, atau kebutuhan pengolahan data lainnya. Namun, perlu diperhatikan bahwa jumlah hasilnya dapat menjadi sangat besar jika tabel memiliki banyak baris.

E. SELF JOIN

SELF JOIN adalah teknik menggabungkan sebuah tabel dengan dirinya sendiri. Teknik ini biasanya digunakan ketika terdapat hubungan antarbaris dalam tabel yang sama.

Contohnya, tabel karyawan memiliki kolom id_karyawan dan id_atasan. Kolom id_atasan menunjukkan karyawan yang menjadi atasan dari karyawan lainnya.

Contoh data:

Geser tabel
id_karyawan nama_karyawan id_atasan
1 Andi NULL
2 Budi 1
3 Citra 1
4 Dedi 2

Untuk menampilkan nama karyawan beserta nama atasannya, gunakan query berikut.

SELECT
    karyawan.nama_karyawan AS nama_karyawan,
    atasan.nama_karyawan AS nama_atasan
FROM karyawan
LEFT JOIN karyawan AS atasan
    ON karyawan.id_atasan = atasan.id_karyawan;

Hasil query:

Geser tabel
nama_karyawan nama_atasan
Andi NULL
Budi Andi
Citra Andi
Dedi Budi

Pada contoh tersebut, tabel karyawan digunakan dua kali dengan alias berbeda, yaitu karyawan dan atasan.

SELF JOIN berguna untuk mengelola data yang memiliki hubungan hierarki, seperti struktur organisasi, kategori bertingkat, dan hubungan antara atasan dengan bawahan.

4. Perbedaan INNER JOIN, LEFT JOIN, RIGHT JOIN, dan CROSS JOIN

Setelah memahami masing-masing jenis JOIN, penting untuk mengetahui perbedaannya agar tidak salah memilih query.

Geser tabel
Jenis JOIN Cara Kerja
INNER JOIN Menampilkan data yang memiliki pasangan pada kedua tabel.
LEFT JOIN Menampilkan seluruh data tabel kiri dan pasangan dari tabel kanan.
RIGHT JOIN Menampilkan seluruh data tabel kanan dan pasangan dari tabel kiri.
CROSS JOIN Menghasilkan seluruh kombinasi baris dari kedua tabel.
SELF JOIN Menggabungkan sebuah tabel dengan dirinya sendiri.

Sebagai contoh sederhana:

  • Gunakan INNER JOIN jika hanya ingin melihat pelanggan yang sudah melakukan transaksi.
  • Gunakan LEFT JOIN jika ingin melihat seluruh pelanggan, termasuk yang belum bertransaksi.
  • Gunakan RIGHT JOIN jika ingin melihat seluruh transaksi, termasuk yang tidak memiliki pasangan pelanggan.
  • Gunakan CROSS JOIN jika ingin membuat seluruh kombinasi dari dua kumpulan data.
  • Gunakan SELF JOIN jika ingin menghubungkan data yang berada dalam tabel yang sama.

Perlu diketahui, MySQL tidak menyediakan sintaks FULL OUTER JOIN secara langsung. Jika ingin mendapatkan seluruh data dari kedua tabel, termasuk baris yang tidak memiliki pasangan, salah satu pendekatannya adalah menggabungkan LEFT JOIN dan RIGHT JOIN menggunakan UNION dengan penanganan duplikasi yang tepat.

5. Contoh Praktik SQL JOIN Menggunakan Database MySQL

Agar lebih mudah dipahami, sekarang kita akan mencoba membuat database sederhana dan menjalankan beberapa query JOIN secara langsung.

Kita akan membuat aplikasi penjualan sederhana dengan dua tabel, yaitu pelanggan dan transaksi.

Langkah 1. Membuat Database

Pertama, buat database bernama db_join.

CREATE DATABASE db_join;

Pilih database tersebut.

USE db_join;

Langkah 2. Membuat Tabel Pelanggan

Buat tabel pelanggan dengan query berikut.

CREATE TABLE pelanggan (
    id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
    nama_pelanggan VARCHAR(100) NOT NULL
);

Langkah 3. Membuat Tabel Transaksi

Selanjutnya, buat tabel transaksi yang memiliki hubungan dengan tabel pelanggan.

CREATE TABLE transaksi (
    id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
    id_pelanggan INT NOT NULL,
    total DECIMAL(12,2) NOT NULL,
    tanggal_transaksi DATE,
    FOREIGN KEY (id_pelanggan)
        REFERENCES pelanggan(id_pelanggan)
);

Langkah 4. Memasukkan Data Pelanggan

Masukkan beberapa data pelanggan.

INSERT INTO pelanggan (nama_pelanggan)
VALUES
    ('Andi'),
    ('Budi'),
    ('Citra'),
    ('Dedi');

Langkah 5. Memasukkan Data Transaksi

Masukkan data transaksi berikut.

INSERT INTO transaksi
    (id_pelanggan, total, tanggal_transaksi)
VALUES
    (1, 200000, '2026-10-01'),
    (2, 150000, '2026-10-02'),
    (1, 300000, '2026-10-03'),
    (3, 250000, '2026-10-04');

Sekarang database sudah memiliki empat pelanggan dan empat transaksi. Perhatikan bahwa pelanggan Dedi belum memiliki transaksi.

Langkah 6. Menjalankan INNER JOIN

Untuk menampilkan pelanggan yang sudah melakukan transaksi, jalankan:

SELECT
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    transaksi.tanggal_transaksi,
    transaksi.total
FROM pelanggan
INNER JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan;

Hasilnya akan menampilkan empat transaksi yang dimiliki oleh Andi, Budi, dan Citra.

Langkah 7. Menjalankan LEFT JOIN

Untuk menampilkan seluruh pelanggan, termasuk yang belum melakukan transaksi, jalankan:

SELECT
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    transaksi.total
FROM pelanggan
LEFT JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan;

Hasilnya akan menampilkan seluruh pelanggan. Dedi tetap muncul meskipun belum memiliki transaksi.

Langkah 8. Mencari Pelanggan yang Belum Bertransaksi

Salah satu penerapan LEFT JOIN yang sering digunakan adalah mencari data yang belum memiliki pasangan pada tabel lain.

Contohnya, mencari pelanggan yang belum pernah melakukan transaksi.

SELECT
    pelanggan.id_pelanggan,
    pelanggan.nama_pelanggan
FROM pelanggan
LEFT JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan
WHERE transaksi.id_transaksi IS NULL;

Hasilnya:

Geser tabel
id_pelanggan nama_pelanggan
4 Dedi

Query tersebut bekerja dengan cara menampilkan seluruh pelanggan, kemudian hanya mengambil baris yang tidak memiliki pasangan transaksi.

Teknik ini sering disebut sebagai pola LEFT JOIN dengan pengecekan NULL.

6. Menggabungkan Lebih dari Dua Tabel dengan JOIN

Dalam aplikasi yang lebih kompleks, kita sering perlu menggabungkan tiga tabel atau lebih.

Sebagai contoh, aplikasi penjualan memiliki tiga tabel:

  1. pelanggan: menyimpan informasi pelanggan.
  2. transaksi: menyimpan informasi transaksi.
  3. detail_transaksi: menyimpan rincian produk yang dibeli dalam setiap transaksi.

Contoh struktur hubungan:

  • pelanggan.id_pelanggan berhubungan dengan transaksi.id_pelanggan.
  • transaksi.id_transaksi berhubungan dengan detail_transaksi.id_transaksi.

Untuk menampilkan nama pelanggan, nomor transaksi, nama produk, dan jumlah pembelian, kita dapat menggunakan query berikut.

SELECT
    pelanggan.nama_pelanggan,
    transaksi.id_transaksi,
    detail_transaksi.nama_produk,
    detail_transaksi.jumlah
FROM pelanggan
INNER JOIN transaksi
    ON pelanggan.id_pelanggan = transaksi.id_pelanggan
INNER JOIN detail_transaksi
    ON transaksi.id_transaksi = detail_transaksi.id_transaksi;

Pada query tersebut, terdapat dua operasi INNER JOIN yang menghubungkan tiga tabel sekaligus. Dengan cara ini, kita dapat mengambil informasi yang lebih lengkap tanpa harus menjalankan beberapa query secara terpisah.

7. Tips Menggunakan SQL JOIN agar Query Lebih Efisien

Meskipun JOIN sangat membantu dalam pengolahan data, penulisan query tetap perlu diperhatikan, terutama ketika database memiliki banyak tabel dan jumlah data yang besar.

Berikut beberapa tips yang dapat diterapkan.

  1. Gunakan kolom penghubung yang tepat. Pastikan kondisi ON menggunakan kolom yang memang memiliki hubungan, seperti primary key dan foreign key.
  2. Gunakan alias tabel. Alias seperti p untuk pelanggan dan t untuk transaksi dapat membuat query lebih ringkas.
  3. Hindari SELECT * jika tidak diperlukan. Pilih hanya kolom yang dibutuhkan agar hasil query lebih terarah.
  4. Gunakan indeks pada kolom yang sering digunakan untuk JOIN. Indeks yang tepat dapat membantu meningkatkan performa pencarian dan penggabungan data.
  5. Periksa hasil JOIN. Pastikan jumlah baris dan hubungan data sesuai dengan kebutuhan.
  6. Gunakan EXPLAIN untuk menganalisis query. Perintah ini membantu melihat bagaimana MySQL menjalankan query dan menggunakan indeks.
  7. Perhatikan kemungkinan duplikasi baris. Satu pelanggan dapat memiliki banyak transaksi sehingga hasil JOIN memang dapat menampilkan pelanggan yang sama lebih dari satu kali.

Contoh penggunaan alias tabel:

SELECT
    p.nama_pelanggan,
    t.id_transaksi,
    t.total
FROM pelanggan AS p
INNER JOIN transaksi AS t
    ON p.id_pelanggan = t.id_pelanggan;

Query tersebut menghasilkan informasi yang sama seperti contoh sebelumnya, tetapi penulisannya lebih ringkas.

8. Kesalahan yang Sering Terjadi Saat Menggunakan JOIN

Bagi pemula, terdapat beberapa kesalahan yang sering terjadi ketika pertama kali menggunakan SQL JOIN.

1. Salah menentukan kolom penghubung
Kesalahan dalam kondisi ON dapat menyebabkan hasil query tidak sesuai atau menghasilkan kombinasi data yang tidak benar.

2. Menggunakan INNER JOIN padahal membutuhkan LEFT JOIN
Jika ingin menampilkan seluruh data dari tabel utama, INNER JOIN mungkin tidak sesuai karena data yang tidak memiliki pasangan akan dihilangkan.

3. Menghasilkan data duplikat
Data yang terlihat berulang tidak selalu berarti query salah. Jika satu pelanggan memiliki banyak transaksi, nama pelanggan memang dapat muncul beberapa kali. Namun, periksa kembali hubungan tabel jika jumlah baris tidak sesuai harapan.

4. Tidak memahami nilai NULL
Pada LEFT JOIN dan RIGHT JOIN, kolom dari tabel yang tidak memiliki pasangan dapat menghasilkan NULL. Gunakan kondisi IS NULL atau IS NOT NULL untuk memeriksanya.

5. Tidak menggunakan alias ketika nama kolom sama
Jika beberapa tabel memiliki nama kolom yang sama, seperti id_pelanggan, sebaiknya tuliskan nama tabel atau aliasnya agar tidak terjadi ambiguitas.

Memahami kesalahan tersebut akan membantu kita membuat query JOIN yang lebih tepat dan mudah dipelihara.

Kesimpulan

SQL JOIN merupakan salah satu perintah penting dalam pengelolaan database relasional. Dengan JOIN, kita dapat menggabungkan data dari beberapa tabel berdasarkan hubungan antarkolom sehingga informasi yang dihasilkan menjadi lebih lengkap.

Terdapat beberapa jenis JOIN yang perlu dipahami, yaitu INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN, dan SELF JOIN. Setiap jenis memiliki fungsi berbeda dan dapat digunakan sesuai kebutuhan pengolahan data.

Bagi mahasiswa maupun developer yang sedang membangun aplikasi berbasis MySQL, memahami JOIN akan sangat membantu dalam membuat fitur laporan, menampilkan data yang saling berhubungan, serta mengembangkan sistem informasi yang lebih kompleks.

Jika kamu baru mempelajari SQL, sebaiknya pahami terlebih dahulu perintah dasar SQL sebelum melanjutkan ke penggunaan JOIN.

Artikel terkait:

Selamat belajar dan mencoba SQL JOIN!

Butuh Bantuan Skripsi atau Pembuatan Software?

Tim Anindyadev siap membantu bimbingan skripsi IT, pembuatan aplikasi kustom, dan implementasi metode algoritma.

Konsultasi Sekarang
Butuh Bantuan? Chat Kami