Soal 1Baris mana yang termasuk dalam hasil INNER JOIN?
Penggabungan Tabel (1) — INNER JOIN dan Alias
Pelajari INNER JOIN SQL dari dasar: alias tabel, ON dan USING, menggabungkan beberapa tabel — dengan praktik pada data karyawan dan departemen, langsung di browser kamu.
Data yang dipakai di artikel ini — department dan employee
Sejauh ini kamu sudah bekerja dengan satu tabel pada satu waktu, tetapi data di dunia nyata terbagi ke beberapa tabel. Nama dan gaji karyawan ada di tabel employee, nama dan lokasi departemen ada di tabel department — desain yang lazim membagi data berdasarkan peran dan menautkannya dengan employee.dept_id yang menunjuk ke department ("kolom yang menunjuk ke baris di tabel lain" ini disebut foreign key).
Di artikel ini kamu akan mempelajari INNER JOIN, bentuk paling dasar dari JOIN yang menggabungkan dua tabel terpisah menjadi satu hasil. Materinya adalah tabel department (6 departemen) dan tabel employee (30 karyawan). Lewat sebuah latihan yang membangun daftar yang menampilkan nama departemen tiap karyawan, kamu akan mencoba alias tabel, ON, dan USING secara berurutan.
INNER JOIN — menghubungkan dua tabel dengan kondisi penggabungan
Tabel employee hanya menyimpan dept_id (nomor departemen). Saat kamu ingin daftar karyawan juga menampilkan nama departemen, kamu mengambil baris-baris di mana employee.dept_id dan department.dept_id cocok, menjajarkannya bersisian, lalu menggabungkannya menjadi satu baris. Inilah JOIN, dan yang paling dasar adalah INNER JOIN (INNER = penggabungan dalam).
Bentuknya adalah SELECT kolom FROM tabel_kiri JOIN tabel_kanan ON kondisi_penggabungan. JOIN adalah singkatan dari INNER JOIN — keduanya berperilaku sama. Pada ON kamu menulis kondisi penggabungan, yang menyatakan "jika kolom mana cocok dengan kolom mana, perlakukan baris-baris ini sebagai baris yang sama". INNER JOIN hanya menyimpan baris yang cocok di kedua tabel; baris tanpa pasangan di salah satu sisi hilang dari hasil.
-- Tampilkan dept_name di samping setiap karyawan (INNER JOIN)
SELECT employee.name, employee.salary, department.dept_name
FROM employee
JOIN department
ON employee.dept_id = department.dept_id;
Alias tabel — menulis nama tabel yang panjang menjadi pendek
Menulis nama tabel setiap kali, seperti pada employee.name atau department.dept_name, membuat kueri menjadi panjang. Jika kamu menaruh alias setelah nama tabel, seperti pada FROM employee e, sejak itu kamu bisa merujuknya dengan nama pendek seperti e.name. Menulisnya dengan AS, seperti FROM employee AS e, artinya sama.
Alias juga menjadi perlu untuk self-join (memakai tabel yang sama dua kali, dibahas di artikel berikutnya) dan untuk memberi nama hasil dalam subkueri. Di artikel ini kita akan menulis employee sebagai e dan department sebagai d.
-- Beri alias employee sebagai e dan department sebagai d
SELECT e.name, e.city, d.dept_name, d.location
FROM employee e
JOIN department d
ON e.dept_id = d.dept_id;
USING — bentuk ringkas saat nama kolom penggabungan sama
employee dan department digabungkan pada nama kolom yang sama, `dept_id`, di kedua tabel. Saat nama kolom yang dipakai untuk penggabungan persis sama di kedua tabel seperti ini, kamu bisa menulis USING (dept_id) alih-alih ON e.dept_id = d.dept_id.
USING (nama_kolom) artinya sama dengan ON kiri.nama_kolom = kanan.nama_kolom, dan lebih pendek karena kamu hanya menulis kolom penggabungan sekali. Selain itu, kolom yang digabungkan dengan USING muncul hanya sekali di hasil, dan kamu bisa merujuknya langsung dengan SELECT dept_id (tanpa nama tabel). Saat nama kolom berbeda (misalnya e.dept_id dan d.id), kamu tidak bisa memakai USING — kamu memakai ON.
-- Tulis makna yang sama dengan ON e.dept_id = d.dept_id memakai USING
SELECT e.name, dept_id, d.dept_name
FROM employee e
JOIN department d
USING (dept_id);
INNER JOIN membuang baris yang hanya ada di satu sisi
INNER JOIN mengembalikan hanya baris di mana kondisi penggabungan cocok di kedua tabel. 4 orang yang dept_id-nya NULL (Ivan, Quinn, Xander, Brian) dan departemen Legal yang sama sekali tidak punya karyawan tidak punya pasangan penggabungan, jadi mereka tidak muncul di hasil. "Aku mau semua karyawan tapi hanya 26 baris yang kembali" dalam kebanyakan kasus disebabkan oleh perilaku ini. Saat kamu ingin menyimpan juga baris yang hanya ada di satu sisi, gunakan OUTER JOIN yang dibahas di artikel berikutnya.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Pada FROM employee e JOIN department d ON e.dept_id = d.dept_id, apa itu e dan d?
Soal 3Kapan kamu bisa menulis ulang ON e.dept_id = d.dept_id menjadi USING (dept_id)?