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:

SQLite Sintaks Klausa GABUNG
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,

  1. Buka Komputer Saya dan navigasikan ke direktori berikut “Bahasa Indonesia: C:\sqlite"Dan
  2. Lalu buka “sqlite3.exe"

SQLite Klausul GABUNG

Langkah 2) Buka basis data “TutorialSampleDB.db” dengan perintah berikut:

SQLite Klausul GABUNG

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.

SQLite INNER JOIN
SQLite INNER 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

SQLite Contoh GABUNG DALAM

  • 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 Contoh GABUNG DALAM

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 Contoh

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

SQLite Contoh GABUNG ALAMI

  • 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

SQLite Contoh GABUNG LUAR KIRI

  • 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:

SQLite KIRI LUAR GABUNG

SQLite KIRI LUAR GABUNG

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

SQLite Contoh LINTAS GABUNG

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.