Penjelasan sederhana
Di database, data biasanya dipecah ke beberapa tabel. Tabel karyawan hanya menyimpan nomor departemen (dept_id), sedangkan nama departemennya ada di tabel departemen. JOIN menyatukan keduanya, mirip VLOOKUP di Excel.
INNER JOIN hanya menampilkan baris yang punya pasangan di kedua tabel. Bayangkan mencocokkan daftar tamu dengan daftar meja: yang muncul hanya tamu yang sudah dapat meja, dan meja yang ada tamunya.
Kolom penghubungnya ditulis setelah ON, misalnya k.dept_id = d.id yang artinya "nomor departemen di tabel karyawan sama dengan id di tabel departemen".
Sintaks
SELECT a.kolom, b.kolom
FROM tabel_a AS a
INNER JOIN tabel_b AS b
ON a.kunci = b.kunci;
| Bagian | Keterangan |
|---|---|
ON a.kunci = b.kunci | Syarat pasangan: kolom yang menghubungkan kedua tabel. |
INNER | Boleh ditulis JOIN saja; artinya sama. |
Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.
Contoh INNER JOIN
Data contoh: karyawan, departemen
Tabel karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_id |
|---|---|---|---|---|---|---|
| 1 | Andi Pratama | 3 | Bandung | 12500000 | 2019-03-11 | NULL |
| 2 | Bunga Lestari | 1 | Jakarta | 9800000 | 2020-07-01 | NULL |
| 3 | Candra Wijaya | 3 | Bandung | 8200000 | 2021-02-15 | 1 |
| 4 | Dewi Anggraini | 2 | Jakarta | 7500000 | 2022-05-09 | 6 |
| 5 | Eko Saputra | 1 | Jakarta | 6900000 | 2023-01-16 | 2 |
| 6 | Fajar Nugroho | 2 | Surabaya | 11000000 | 2018-09-03 | NULL |
| 7 | Gita Permata | 3 | Jakarta | 8200000 | 2023-08-21 | 1 |
| 8 | Hendra Gunawan | NULL | Medan | 5500000 | 2024-04-02 | NULL |
Tabel departemen
| id | nama_dept | lokasi |
|---|---|---|
| 1 | Keuangan | Jakarta |
| 2 | Marketing | Jakarta |
| 3 | IT | Bandung |
| 4 | Legal | Surabaya |
SELECT k.nama, d.nama_dept
FROM karyawan AS k
INNER JOIN departemen AS d
ON k.dept_id = d.id;
Hasil 7 baris
| nama | nama_dept |
|---|---|
| Andi Pratama | IT |
| Bunga Lestari | Keuangan |
| Candra Wijaya | IT |
| Dewi Anggraini | Marketing |
| Eko Saputra | Keuangan |
| Fajar Nugroho | Marketing |
| Gita Permata | IT |
Hendra (tanpa departemen) dan departemen Legal (tanpa karyawan) tidak muncul karena tidak punya pasangan.
Cara kerjanya, langkah demi langkah
FROM karyawan AS k: 8 baris karyawan diambil.INNER JOIN departemen AS d ON k.dept_id = d.id: untuk setiap karyawan, dicari departemen yang id-nya sama dengan dept_id karyawan itu.- Andi (dept_id 3) dipasangkan dengan IT, Bunga (dept_id 1) dengan Keuangan, dan seterusnya.
- Hendra dept_id-nya kosong, jadi tidak punya pasangan dan dibuang. Departemen Legal tidak punya karyawan, jadi juga tidak muncul.
- Hasilnya 7 baris.
Dipakai untuk apa di kantor?
- Menampilkan transaksi beserta nama pelanggan dan nama produknya.
- Menggabungkan data karyawan dengan data departemen atau cabang.
Kesalahan yang sering terjadi
- Lupa menulis
ON. Tanpa syarat pasangan, setiap baris dipasangkan dengan semua baris tabel lain, dan hasilnya membengkak. - Memakai
INNER JOINpadahal ingin semua data tetap tampil. Data tanpa pasangan hilang diam-diam. PakaiLEFT JOIN.
LEFT JOIN