Ringkasan :dalam tutorial ini, Anda akan belajar tentang jenis join khusus yang disebut SQLite self-join yang memungkinkan Anda untuk menggabungkan tabel dengan dirinya sendiri.
Perhatikan bahwa Anda harus terbiasa dengan INNER JOIN
dan LEFT JOIN
klausa sebelum melanjutkan dengan tutorial ini.
Pengantar SQLite self-join
Penggabungan mandiri adalah jenis gabungan khusus yang memungkinkan Anda menggabungkan tabel ke tabel itu sendiri menggunakan LEFT JOIN
atau INNER JOIN
ayat. Anda menggunakan self-join untuk membuat kumpulan hasil yang menggabungkan baris dengan baris lain dalam tabel yang sama.
Karena Anda tidak dapat merujuk ke tabel yang sama lebih dari satu dalam kueri, Anda perlu menggunakan alias tabel untuk menetapkan nama yang berbeda pada tabel saat Anda menggunakan self-join.
Self-join membandingkan nilai kolom yang sama atau berbeda dalam tabel yang sama. Hanya satu tabel yang terlibat dalam self-join.
Anda sering menggunakan self-join untuk menanyakan hubungan orang tua/anak yang disimpan dalam tabel atau untuk mendapatkan total berjalan.
Contoh self-join SQLite
Kami akan menggunakan employees
tabel dalam database sampel untuk demonstrasi.
employees
tabel menyimpan tidak hanya data karyawan tetapi juga data organisasi. ReportsTo
kolom menentukan hubungan pelaporan antara karyawan.
Jika seorang karyawan melapor ke manajer, nilai ReportsTo
kolom baris karyawan sama dengan nilai EmployeeId
kolom baris manajer. Jika seorang karyawan tidak melapor kepada siapa pun, ReportsTo
kolomnya adalah NULL
.
Untuk mendapatkan informasi tentang siapa pelapor langsung dari siapa, Anda menggunakan pernyataan berikut:
SELECT m.firstname || ' ' || m.lastname AS 'Manager',
e.firstname || ' ' || e.lastname AS 'Direct report'
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)
Cobalah
Pernyataan tersebut menggunakan INNER JOIN
klausa untuk bergabung dengan employees
untuk dirinya sendiri. employees
tabel memiliki dua peran:karyawan dan manajer.
Karena kami menggunakan INNER JOIN
klausa untuk bergabung dengan employees
tabel untuk dirinya sendiri, kumpulan hasil tidak memiliki baris yang kolom pengelolanya berisi NULL
nilai.
Perhatikan bahwa operator gabungan ||
menggabungkan beberapa string menjadi satu string. Dalam contoh, kami menggunakan operator gabungan ke dari nama lengkap karyawan dengan menggabungkan nama depan, spasi, dan nama belakang.
Jika Anda ingin menanyakan CEO yang tidak melapor kepada siapa pun, Anda perlu mengubah INNER JOIN
klausa ke LEFT JOIN
klausa dalam kueri di atas.
Andrew Adams
adalah CEO karena dia tidak melaporkan siapa pun.
Anda dapat menggunakan teknik self-join untuk menemukan karyawan yang berlokasi di kota yang sama dengan kueri berikut:
SELECT DISTINCT
e1.city,
e1.firstName || ' ' || e1.lastname AS fullname
FROM
employees e1
INNER JOIN employees e2 ON e2.city = e1.city
AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
e1.city;
Code language: SQL (Structured Query Language) (sql)
Cobalah
Kondisi join memiliki dua ekspresi:
e1.city = e2.city
untuk memastikan bahwa kedua karyawan berada di kota yang samae.firstname <> e2.firstname AND e1.lastname <> e2.lastname
untuk memastikan bahwae1
dane2
bukan karyawan yang sama dengan asumsi tidak ada karyawan yang memiliki nama depan dan nama belakang yang sama.
Dalam tutorial ini, kami telah menunjukkan cara menggunakan teknik self-join SQLite untuk menggabungkan tabel ke tabel itu sendiri.