Lompati ke konten utama
Modul 3 · Pelajaran 1 dari 49/57 dalam kursus~12 min
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

SQL
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.

SQL
-- 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):

SQL
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

Latihan#sql.m3.l1.e1
Upaya: 0Memuat…

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.

Memuat editor…
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

Latihan#sql.m3.l1.e2
Upaya: 0Memuat…

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.

Memuat editor…
Tunjukkan petunjuk

GABUNG sama seperti latihan sebelumnya, namun filter pada d.city = 'Milano' dan bukan pada nama departemen.

Solusi tersedia setelah 3 upaya