SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

SQLite Self-Join

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 sama
  • e.firstname <> e2.firstname AND e1.lastname <> e2.lastname untuk memastikan bahwa e1 dan e2 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Baris yang Mengandung Karakter Alfanumerik di SQLite

  2. Pustaka ruang dapat menyalin db dari folder aset?

  3. mengapa saya gagal membuat tabel ini di Android SQLite?

  4. Menghapus item dari ListView dan Database dengan OnItemClickListener

  5. Menggunakan Room DB dalam proyek perpustakaan