SQLite Gabung: Natural Kiri Luar, Dalam, Silang dengan Contoh Tabel
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:

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 “Bahasa Indonesia: C:\sqlite"Dan
- Lalu buka “sqlite3.exe"
Langkah 2) Buka basis data “TutorialSampleDB.db” dengan perintah berikut:
Sekarang Anda siap menjalankan semua jenis kueri pada database.
SQLite INNER JOIN
INNER JOIN hanya mengembalikan baris yang cocok dengan kondisi join dan menghilangkan semua baris lain yang tidak cocok dengan kondisi join.
Example
Pada contoh berikut, kita akan menggabungkan dua tabel “Siswa"Dan"Departemen” dengan DepartmentId untuk mendapatkan nama jurusan masing-masing 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 catatan dari tabel mahasiswa dan departemen yang sesuai dengan kondisi yaitu “Students.DepartmentId = Departemen.DepartmentId “. Baris yang tidak cocok akan diabaikan dan tidak disertakan dalam hasil.
- Itulah sebabnya hanya 8 siswa dari 10 siswa yang dikembalikan dari kueri ini dengan jurusan TI, matematika, dan fisika. Sedangkan siswa “Jena” dan “George” tidak disertakan, karena mereka memiliki ID departemen yang tidak valid, yang tidak cocok dengan kolom departmentId dari tabel departemen. Sebagai berikut:
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 INNER JOIN dan JOIN.. MENGGUNAKAN :
Dengan “JOIN…USING” tidak perlu menuliskan kondisi join, cukup tulis kolom join yang merupakan persamaan antara kedua tabel yang digabungkan, alih-alih menulis tabel1 “INNER JOIN table2 ON table1.cola = table2.cola” yang kita tulis itu seperti "tabel1 GABUNG tabel2 MENGGUNAKAN(cola)".
Example
Pada contoh berikut, kita akan menggabungkan dua tabel “Siswa"Dan"Departemen” dengan DepartmentId untuk mendapatkan nama jurusan masing-masing mahasiswa, sebagai berikut:
SELECT Students.StudentName, Departments.DepartmentName FROM Students INNER JOIN Departments USING(DepartmentId);
Penjelasan
- Berbeda dengan contoh sebelumnya, kami tidak menulis “PADA Siswa.DepartmentId = Departemen.DepartmentId“. Kami baru saja menulis “MENGGUNAKAN(Id Departemen)".
- 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 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:
- Di INNER JOIN, Anda harus menentukan kondisi gabungan yang digunakan oleh gabungan dalam untuk menggabungkan dua tabel. Sedangkan pada natural join tidak dituliskan kondisi join. Anda tinggal menuliskan nama kedua tabel tersebut tanpa syarat apapun. Kemudian natural join akan secara otomatis menguji kesetaraan antara nilai untuk setiap kolom yang ada di kedua tabel. Gabung alami menyimpulkan kondisi gabungan secara otomatis.
- 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 join dengan nama kolom (seperti yang kita lakukan di INNER JOIN). Kami bahkan tidak perlu menulis nama kolom satu kali pun (seperti yang kami 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 output yang sama persis dengan output yang kita dapatkan dari INNER JOIN dan JOIN MENGGUNAKAN contoh. Karena dalam contoh kita ketiga kueri tersebut setara. Namun dalam beberapa kasus, output akan berbeda dari inner join dibandingkan dengan natural join. Misalnya, jika ada lebih banyak tabel dengan nama yang sama, maka natural join akan mencocokkan semua kolom satu sama lain. Namun, inner join hanya akan mencocokkan kolom dalam kondisi join (detail lebih lanjut di bagian berikutnya; perbedaan antara inner join dan natural join).
SQLite KIRI LUAR GABUNG
Standar SQL mendefinisikan tiga jenis OUTER JOIN: LEFT, RIGHT, dan FULL but SQLite hanya mendukung LEFT OUTER JOIN alami.
Di LEFT OUTER JOIN, semua nilai kolom yang Anda pilih dari tabel kiri akan disertakan dalam hasil pertanyaan, jadi terlepas dari nilainya cocok dengan kondisi join atau tidak, itu akan dimasukkan dalam hasil.
Jadi jika tabel sebelah kiri memiliki baris 'n', hasil query akan memiliki baris 'n'. Namun, untuk nilai kolom yang berasal dari tabel kanan, jika ada nilai yang tidak sesuai dengan kondisi join 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. Meskipun departmentIds siswa keempat dan terakhir, Jena, dan George tidak ada di tabel Departemen, mereka juga disertakan.
- Dan dalam kasus ini, nilai departmentName untuk Jena dan George akan menjadi “null” karena tabel departments tidak memiliki departmentName yang cocok dengan nilai departmentId mereka.
Mari kita berikan penjelasan lebih dalam pada query sebelumnya menggunakan join kiri menggunakan diagram Van:
LEFT JOIN akan memberikan semua nama siswa dari tabel siswa meskipun siswa tersebut memiliki id departemen yang tidak ada di tabel departemen. Jadi, query tersebut tidak hanya akan memberi Anda baris-baris yang cocok sebagai INNER JOIN, tetapi akan memberi Anda bagian tambahan yang memiliki baris-baris yang tidak cocok dari tabel kiri yaitu tabel siswa.
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.
Berbeda dengan INNER JOIN dan LEFT OUTER JOIN, dengan CROSS JOIN, Anda tidak perlu menentukan kondisi join, karena SQLite tidak membutuhkannya untuk CROSS JOIN.
SQLite akan menghasilkan hasil logis yang ditetapkan 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 dua tabel yang digabungkan 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 cocok dengan siswa ketiga Jack… dan seterusnya.
Kesimpulan
Menggunakan SQLite GABUNG kueri, Anda bisa menautkan satu atau beberapa tabel atau subkueri bersama-sama untuk memilih kolom dari kedua tabel atau subkueri.