Pelajaran modul (1/4)
Menggabungkan dua tabel: INNER JOIN
Hingga saat ini kita telah membaca satu tabel dalam satu waktu. Namun, di dunia nyata, data adalah hal yang penting
tersebar di beberapa tabel terkait: di kumpulan data kami, misalnya, masing-masing
karyawan memiliki department_id yang menunjuk ke tabel departments. Untuk melihat
nama departemen (dan bukan hanya id) kita harus bergabung dengan
dua meja. Operator yang melakukan ini disebut JOIN.
Sintaks dasar
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;Baca dalam bahasa Inggris: "ambil table_a, lampirkan table_b ke dalamnya dengan memasangkan setiap
baris di mana table_a.x sama dengan table_b.y". Hasilnya adalah virtual baru
tabel dengan kolom keduanya.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;Bagian setelah ON disebut kondisi gabungan: inilah yang memberitahukan
engine "kedua baris ini hampir sama, sejajarkan". Di
sebagian besar kasus merupakan kesetaraan antara kunci utama dan kunci asing
kunci (di sini departments.id dan employees.department_id).
GABUNG DALAM, secara detail
Kata kunci lengkapnya adalah INNER JOIN, tetapi JOIN sendiri adalah standarnya
sinonim. "Batin" berarti hanya baris yang memiliki kecocokan di keduanya
tabel dikembalikan:
- jika karyawan memiliki
department_id = NULL, mereka tidak akan muncul di hasil; - jika suatu departemen tidak memiliki karyawan, departemen tersebut tidak akan muncul di hasil.
Nama kolom yang memenuhi syarat
Ketika dua tabel memiliki kolom dengan nama yang sama (di sini keduanya memiliki id, dan
keduanya memiliki name jika dipikir-pikir), Anda perlu menentukan tabel mana
kolom berasal dengan tulisan table.column. Untuk menghindari pengulangan nama yang panjang,
alias yang sering digunakan (Anda melihatnya di Modul 2):
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS juga opsional di sini: FROM employees e berfungsi sama.
Cobalah
Untuk setiap karyawan di departemen Ingegneria, tampilkan nama depan (nama_depan), nama belakang (nama_belakang) dan kota departemen (departments.city). Tiga kolom, satu baris per karyawan.
Tunjukkan petunjuk
Lengkapi kondisi ON dengan persamaan antara e.department_id dan d.id, lalu pilih d.city sebagai kolom ketiga.
Solusi tersedia setelah 3 upaya
Tinjau latihan
Cantumkan nama depan (first_name) dan nama belakang (last_name) seluruh karyawan yang bekerja di departemen yang berbasis di Milano. Filter berdasarkan departments.city, bukan nama departemen.
Tunjukkan petunjuk
GABUNG sama seperti latihan sebelumnya, namun filter pada d.city = 'Milano' dan bukan pada nama departemen.
Solusi tersedia setelah 3 upaya