SQLite Gabungan: Alami Kiri Luar, Dalam, Silang dengan Tabel

โšก Ringkasan Cerdas

SQLite Klausul JOIN menggabungkan baris dari dua tabel atau lebih menggunakan INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN, dan CROSS JOIN, memungkinkan Anda mencocokkan catatan terkait berdasarkan kolom yang sama dan membaca data di seluruh basis data yang dinormalisasi.

  • ๐Ÿ”— Klausul Gabungan: Klausul JOIN menghubungkan dua atau lebih tabel atau subkueri pada kolom yang sama, yang didefinisikan dengan kondisi ON atau USING.
  • ๐ŸŽฏ GABUNG DALAM: INNER JOIN hanya mengembalikan baris-baris yang kondisi penggabungannya cocok di kedua tabel, dan membuang baris-baris yang tidak cocok.
  • ๐Ÿงฉ PENGGUNAAN dan ALAMI: JOIN USING menyebutkan satu kolom yang sama, sedangkan NATURAL JOIN secara otomatis mencocokkan setiap kolom dengan nama yang identik.
  • ๏ธ GABUNG LUAR KIRI: LEFT OUTER JOIN mempertahankan setiap baris tabel sebelah kiri dan mengisi kolom tabel sebelah kanan yang tidak cocok dengan nilai NULL.
  • ๏ธ GABUNG SILANG: CROSS JOIN mengembalikan hasil perkalian Kartesius, memasangkan setiap baris tabel kiri dengan setiap baris tabel kanan.
  • ๐Ÿค– Bantuan AI: Alat AI text-to-SQL dan GitHub Copilot menghasilkan SQLite Menggabungkan kueri dari perintah berbahasa Inggris sederhana.

SQLite Ikuti seminar

SQLite mendukung berbagai jenis SQL Bergabung, seperti INNER JOIN, LEFT OUTER JOIN, dan CROSS JOIN. Setiap jenis JOIN digunakan untuk situasi yang berbeda seperti yang akan kita lihat di tutorial ini.

Pengantar SQLite Klausul GABUNG

Saat Anda mengerjakan database dengan beberapa tabel, Anda sering kali perlu mendapatkan data dari beberapa tabel tersebut.

Dengan klausa JOIN, Anda dapat menghubungkan dua atau lebih tabel atau subkueri dengan menggabungkannya. Selain itu, Anda dapat menentukan kolom mana yang Anda perlukan untuk menautkan tabel dan kondisinya.

Setiap klausa JOIN harus memiliki sintaksis berikut:

SQLite Sintaks Klausa GABUNG

Setiap klausa gabungan berisi:

  • Sebuah tabel atau subquery yang merupakan tabel kiri; tabel atau subquery sebelum klausa join (di sebelah kirinya).
  • Operator JOIN โ€“ tentukan jenis join (INNER JOIN, LEFT OUTER JOIN, atau CROSS JOIN).
  • Batasan GABUNG โ€“ setelah Anda menentukan tabel atau subkueri yang akan digabungkan, Anda perlu menentukan batasan gabungan, yang akan menjadi kondisi di mana baris yang cocok dengan kondisi tersebut akan dipilih tergantung pada jenis gabungan.

Perhatikan bahwa, untuk semua hal berikut ini SQLite Untuk contoh tabel JOIN, Anda harus menjalankan sqlite3.exe dan membuka koneksi ke database contoh seperti berikut:

Langkah 1) Pada langkah ini, buka Komputer Saya dan navigasikan ke direktori berikut โ€œC:\sqliteโ€ lalu jalankan โ€œsqlite3.exeโ€œ:

Buka sqlite3.exe dari direktori sqlite.

Langkah 2) Buka basis data โ€œTutorialsSampleDB.dbโ€ dengan perintah berikut:

Buka basis data TutorialsSampleDB

Sekarang Anda siap menjalankan semua jenis kueri pada database.

SQLite INNER JOIN

SQLite Diagram Venn INNER JOIN

INNER JOIN hanya mengembalikan baris yang sesuai dengan kondisi penggabungan dan menghilangkan semua baris lain yang tidak sesuai dengan kondisi penggabungan.

Example

Pada contoh berikut, kita akan menggabungkan dua tabel โ€œMahasiswaโ€ dan โ€œDepartemenโ€ dengan menggunakan DepartmentId untuk mendapatkan nama departemen untuk setiap mahasiswa, sebagai berikut:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Penjelasan kode

INNER JOIN bekerja sebagai berikut:

  • Dalam klausa Pilih, Anda dapat memilih kolom apa pun yang ingin Anda pilih dari dua tabel yang direferensikan.
  • Klausa INNER JOIN ditulis setelah tabel pertama yang direferensikan dengan klausa โ€œDariโ€.
  • Kemudian kondisi join ditentukan dengan ON.
  • Alias โ€‹โ€‹dapat ditentukan untuk tabel yang direferensikan.
  • Kata INNER bersifat opsional, Anda cukup menulis JOIN.

Keluaran

INNER JOIN menghasilkan data dari kedua tabel โ€“ tabel mahasiswa dan tabel departemen โ€“ yang sesuai dengan kondisi โ€œStudents.DepartmentId = Departments.DepartmentIdโ€. Baris yang tidak cocok akan diabaikan dan tidak disertakan dalam hasilnya.

SQLite Contoh hasil INNER JOIN

Itulah mengapa hanya 8 dari 10 siswa yang ditemukan dari kueri ini dengan jurusan IT, matematika, dan fisika. Sedangkan siswa โ€œJenaโ€ dan โ€œGeorgeโ€ tidak disertakan, karena mereka memiliki ID jurusan null, yang tidak sesuai dengan kolom departmentId dari tabel departemen. Seperti berikut:

SQLite INNER JOIN baris yang cocok

SQLite GABUNGโ€ฆ MENGGUNAKAN

INNER JOIN dapat ditulis menggunakan klausa โ€œUSINGโ€ untuk menghindari redundansi, jadi daripada menulis โ€œON Students.DepartmentId = Departments.DepartmentIdโ€, Anda cukup menulis โ€œUSING(DepartmentID)โ€.

Anda dapat menggunakan โ€œJOIN.. USINGโ€ setiap kali kolom yang akan Anda bandingkan dalam kondisi join memiliki nama yang sama. Dalam kasus seperti ini, tidak perlu mengulanginya menggunakan kondisi on dan cukup sebutkan nama kolom dan SQLite akan mendeteksi itu.

Perbedaan antara INNER JOIN dan JOIN .. USING:

Dengan โ€œJOIN โ€ฆ USINGโ€, Anda tidak menulis kondisi gabungan, Anda hanya menulis kolom gabungan yang sama antara kedua tabel yang digabungkan. Alih-alih menulis table1 โ€œINNER JOIN table2 ON table1.cola = table2.colaโ€, kita menuliskannya seperti โ€œtable1 JOIN table2 USING(cola)โ€.

Example

Pada contoh berikut, kita akan menggabungkan dua tabel โ€œMahasiswaโ€ dan โ€œDepartemenโ€ dengan menggunakan DepartmentId untuk mendapatkan nama departemen untuk setiap mahasiswa, sebagai berikut:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

Penjelasan

  • Berbeda dengan contoh sebelumnya, kami tidak menulis โ€œON Students.DepartmentId = Departments.DepartmentIdโ€œ. Kami hanya menulis โ€œUSING(DepartmentId)โ€œ.
  • SQLite menyimpulkan kondisi gabungan secara otomatis dan membandingkan DepartmentId dari kedua tabel โ€“ Mahasiswa dan Departemen.
  • Anda dapat menggunakan sintaks ini setiap kali dua kolom yang Anda bandingkan memiliki nama yang sama.

Keluaran

Ini akan memberi Anda hasil yang sama persis seperti contoh sebelumnya:

SQLite JOIN MENGGUNAKAN contoh hasil

SQLite GABUNG ALAMI

NATURAL JOIN mirip dengan JOINโ€ฆUSING, perbedaannya adalah ia secara otomatis menguji kesetaraan antara nilai setiap kolom yang ada di kedua tabel.

Perbedaan antara INNER JOIN dan NATURAL JOIN:

  • Pada INNER JOIN, Anda harus menentukan kondisi gabungan yang akan digunakan inner join untuk menggabungkan kedua tabel. Sedangkan pada natural join, Anda tidak perlu menulis kondisi gabungan. Anda hanya perlu menulis nama kedua tabel tanpa syarat apa pun. Kemudian natural join akan secara otomatis menguji kesamaan nilai untuk setiap kolom yang ada di kedua tabel. Natural join secara otomatis menentukan kondisi gabungan.
  • Di NATURAL JOIN, semua kolom dari kedua tabel dengan nama yang sama akan dicocokkan satu sama lain. Misalnya, jika kita memiliki dua tabel dengan dua nama kolom yang sama (kedua kolom tersebut ada dengan nama yang sama di kedua tabel), maka natural join akan menggabungkan kedua tabel dengan membandingkan nilai kedua kolom dan bukan hanya dari satu kolom.

Example

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

Penjelasan

  • Kita tidak perlu menulis kondisi gabungan dengan nama kolom (seperti yang kita lakukan di INNER JOIN). Kita bahkan tidak perlu menulis nama kolom sekali pun (seperti yang kita lakukan di JOIN USING).
  • Gabungan alami akan memindai kedua kolom dari dua tabel. Ini akan mendeteksi bahwa kondisi tersebut harus terdiri dari perbandingan DepartmentId dari dua tabel Siswa dan Departemen.

Keluaran

NATURAL JOIN akan memberikan hasil yang sama persis dengan hasil yang kita dapatkan dari contoh INNER JOIN dan JOIN USING, karena dalam contoh kita ketiga query tersebut setara. Namun dalam beberapa kasus, hasilnya akan berbeda antara inner join dan natural join. Misalnya, jika ada lebih dari satu tabel dengan nama yang sama, maka natural join akan mencocokkan semua kolom satu sama lain. Namun, inner join hanya akan mencocokkan kolom yang ada dalam kondisi join.

SQLite Contoh hasil NATURAL JOIN

SQLite KIRI LUAR GABUNG

Standar SQL mendefinisikan tiga jenis OUTER JOIN: LEFT, RIGHT, dan FULL, tetapi SQLite hanya mendukung LEFT OUTER JOIN alami.

Dalam LEFT OUTER JOIN, semua nilai kolom yang Anda pilih dari tabel sebelah kiri akan disertakan dalam hasil kueri, jadi terlepas dari apakah nilainya sesuai dengan kondisi gabungan atau tidak, nilai tersebut akan disertakan dalam hasilnya.

Jadi, jika tabel kiri memiliki 'n' baris, hasil kueri juga akan memiliki 'n' baris. Namun, untuk nilai kolom yang berasal dari tabel kanan, jika ada nilai yang tidak sesuai dengan kondisi penggabungan, maka akan berisi nilai "null".

Jadi, Anda akan mendapatkan jumlah baris yang setara dengan jumlah baris pada gabung kiri. Sehingga Anda akan mendapatkan baris-baris yang cocok dari kedua tabel (seperti hasil INNER JOIN), ditambah baris-baris yang tidak cocok dari tabel sebelah kiri.

Example

Pada contoh berikut, kita akan mencoba โ€œLEFT JOINโ€ untuk menggabungkan dua tabel โ€œMahasiswaโ€ dan โ€œJurusanโ€:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Penjelasan

  • SQLite Sintaks LEFT JOIN sama dengan INNER JOIN; Anda menulis LEFT JOIN di antara dua tabel, dan kemudian kondisi join muncul setelah klausa ON.
  • Tabel pertama setelah klausa from adalah tabel kiri. Sedangkan tabel kedua yang ditentukan setelah natural LEFT JOIN adalah tabel kanan.
  • Klausa OUTER bersifat opsional; LEFT natural OUTER JOIN sama dengan LEFT JOIN.

Keluaran

Seperti yang Anda lihat, semua baris dari tabel siswa disertakan, yaitu total 10 siswa. Bahkan jika siswa keempat dan terakhir, Jena dan George, memiliki departmentId yang tidak ada di tabel Departemen, mereka juga disertakan.

Dalam kasus ini, nilai departmentName untuk Jena dan George akan bernilai โ€œnullโ€ karena tabel departemen tidak memiliki departmentName yang cocok dengan nilai departmentId mereka.

SQLite Contoh hasil LEFT OUTER JOIN

Mari kita berikan penjelasan lebih mendalam mengenai kueri sebelumnya yang menggunakan left join dengan menggunakan diagram Venn:

SQLite Diagram Venn LEFT OUTER JOIN

LEFT JOIN akan mengambil semua nama siswa dari tabel students meskipun siswa tersebut memiliki ID departemen yang tidak ada di tabel departments. Jadi, query tersebut tidak hanya akan memberikan baris yang cocok seperti INNER JOIN, tetapi juga akan memberikan bagian tambahan yang berisi baris yang tidak cocok dari tabel sebelah kiri, yaitu tabel students.

Perhatikan bahwa nama siswa mana pun yang tidak memiliki departemen yang cocok akan memiliki nilai โ€œnullโ€ untuk nama departemen, karena tidak ada nilai yang cocok untuk nama departemen tersebut, dan nilai tersebut adalah nilai di baris yang tidak cocok.

SQLite LINTAS BERGABUNG

CROSS JOIN memberikan produk Cartesian untuk kolom yang dipilih dari dua tabel yang digabungkan, dengan mencocokkan semua nilai dari tabel pertama dengan semua nilai dari tabel kedua.

Jadi, untuk setiap nilai pada tabel pertama, Anda akan mendapatkan kecocokan 'n' dari tabel kedua di mana n adalah jumlah baris tabel kedua.

Tidak seperti INNER JOIN dan LEFT OUTER JOIN, dengan CROSS JOIN, Anda tidak perlu menentukan kondisi gabungan, karena SQLite tidak membutuhkannya untuk CROSS JOIN.

The SQLite akan menghasilkan himpunan hasil logis dengan menggabungkan semua nilai dari tabel pertama dengan semua nilai dari tabel kedua.

Misalnya, jika Anda memilih kolom dari tabel pertama (colA) dan kolom lain dari tabel kedua (colB). ColA berisi dua nilai (1,2) dan colB juga berisi dua nilai (3,4).

Maka hasil CROSS JOIN menjadi empat baris:

  • Dua baris dengan menggabungkan nilai pertama dari colA yaitu 1 dengan dua nilai colB (3,4) yaitu (1,3), (1,4).
  • Demikian pula, dua baris dengan menggabungkan nilai kedua dari colA yaitu 2 dengan dua nilai colB (3,4) yaitu (2,3), (2,4).

Example

Pada query berikut ini kita akan mencoba CROSS JOIN antara tabel Mahasiswa dan tabel Departemen:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

Penjelasan

  • Dalam majalah SQLite pilih dari beberapa tabel, kita baru saja memilih dua kolom โ€œnama siswaโ€ dari tabel siswa dan โ€œNama departemenโ€ dari tabel departemen.
  • Untuk cross join, kami tidak menentukan kondisi join apa pun, hanya menggabungkan kedua tabel dengan CROSS JOIN di tengahnya.

Keluaran

Seperti yang dapat Anda lihat, hasilnya adalah 40 baris; 10 nilai dari tabel mahasiswa dicocokkan dengan 4 departemen dari tabel departemen. Seperti berikut:

  • Empat nilai untuk empat departemen dari tabel departemen cocok dengan siswa pertama Michel.
  • Empat nilai untuk empat departemen dari tabel departemen cocok dengan siswa kedua, John.
  • Empat nilai untuk empat departemen dari tabel departemen dicocokkan dengan siswa ketiga, Jackโ€ฆ dan seterusnya.

SQLite Contoh hasil CROSS JOIN

Pertanyaan Umum Demo Slot

SQLite Menambahkan dukungan RIGHT JOIN dan FULL OUTER JOIN pada versi 3.39.0, yang dirilis pada tahun 2022. Pada versi yang lebih lama, Anda meniru RIGHT JOIN dengan cara swap.ping Tabel-tabel tersebut digabungkan dalam LEFT JOIN, dan FULL OUTER JOIN dengan menggabungkan dua LEFT JOIN menggunakan UNION.

Penggabungan mandiri (self join) menggabungkan sebuah tabel dengan dirinya sendiri menggunakan alias tabel, sehingga satu salinan bertindak sebagai tabel kiri dan salinan lainnya sebagai tabel kanan. Ini berguna untuk membandingkan baris dalam tabel yang sama, seperti mencocokkan karyawan dengan manajernya.

Ya. Anda menggabungkan beberapa klausa JOIN dalam satu pernyataan SELECT, masing-masing dengan kondisi ON atau USING-nya sendiri, misalnya FROM A JOIN B ON โ€ฆ JOIN C ON โ€ฆ. SQLite Menggabungkan tabel dari kiri ke kanan menjadi satu set hasil gabungan.

Menulis JOIN saja sama dengan INNER JOIN. SQLiteKeduanya hanya menyimpan baris yang memenuhi kondisi ON atau USING, sehingga baris yang tidak cocok akan dihilangkan. Kata kunci INNER bersifat opsional, sehingga JOIN dan INNER JOIN dapat saling menggantikan.

Membuat indeks pada kolom yang digunakan dalam kondisi penggabungan memungkinkan SQLite Mencocokkan baris tanpa memindai seluruh tabel, yang mempercepat operasi join pada dataset besar. Pengindeksan kolom foreign key dan menjalankan ANALYZE untuk memperbarui statistik lebih lanjut meningkatkan kinerja query join.

INNER JOIN hanya mengembalikan baris yang cocok di kedua tabel. LEFT OUTER JOIN mengembalikan setiap baris dari tabel kiri ditambah baris yang cocok dari tabel kanan, mengisi kolom kanan yang tidak cocok dengan NULL. Jadi LEFT JOIN tidak pernah menghapus baris dari tabel kiri.

Ya. Asisten AI teks-ke-SQL mengubah permintaan bahasa Inggris biasa menjadi SQLite Pernyataan INNER, LEFT, NATURAL, dan CROSS JOIN. Memberikan nama tabel, nama kolom, dan relasi akan meningkatkan akurasi, dan setiap join yang dihasilkan harus ditinjau dan diuji sebelum dijalankan pada data sebenarnya.

Kopilot GitHub menyarankan SQLite JOIN queries inline in editors like VS Code, melengkapi klausa INNER JOIN, LEFT JOIN, dan ON atau USING. Fungsi ini membaca skema dan komentar di sekitarnya, sehingga saran yang diberikannya menggunakan kembali nama tabel dan kolom asli Anda.

Ringkaslah postingan ini dengan: