Tabel Gabungan SQLite: Dalam, Alami, Kiri Luar, Salib (Contoh)

Daftar Isi:

Anonim

SQLite mendukung berbagai jenis SQL Joins, 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.

Dalam tutorial ini, Anda akan belajar-

  • Pengantar SQLite JOIN Clause
  • GABUNG DALAM
  • GABUNG… MENGGUNAKAN
  • GABUNG ALAMI
  • LEFT OUTER GABUNG
  • CROSS GABUNG

Pengantar SQLite JOIN Clause

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

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

Klausa JOIN apa pun harus memiliki sintaks berikut:

Setiap klausa gabungan berisi:

  • Tabel atau subkueri yang merupakan tabel kiri; tabel atau subkueri sebelum klausa gabungan (di sebelah kiri).
  • Operator JOIN - tentukan jenis gabungan (baik INNER JOIN, LEFT OUTER JOIN, atau CROSS JOIN).
  • JOIN-constraint - setelah Anda menentukan tabel atau subkueri untuk digabungkan, Anda perlu menentukan batasan gabungan, yang akan menjadi kondisi di mana baris yang cocok yang cocok dengan kondisi itu akan dipilih tergantung pada jenis gabungan.

Perhatikan bahwa, untuk semua contoh berikut, Anda harus menjalankan sqlite3.exe dan membuka koneksi ke database sampel sebagai mengalir:

Langkah 1) Pada langkah ini,

  1. Buka My Computer dan arahkan ke direktori berikut " C: \ sqlite " dan
  2. Kemudian buka " sqlite3.exe ":

Langkah 2) Buka database " TutorialsSampleDB.db " dengan perintah berikut:

Sekarang Anda siap menjalankan semua jenis kueri di database.

SQLite INNER GABUNG

INNER JOIN hanya mengembalikan baris yang cocok dengan kondisi gabungan dan menghilangkan semua baris lain yang tidak cocok dengan kondisi gabungan.

Contoh

Dalam contoh berikut, kita akan menggabungkan dua tabel " Mahasiswa " dan " Departemen " dengan DepartmentId untuk mendapatkan nama departemen untuk setiap siswa, sebagai berikut:

PILIHStudents.StudentName,Departments.DepartmentNameDARI SiswaINNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Penjelasan kode:

INNER JOIN bekerja sebagai berikut:

  • Di klausa Select, 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 "From".
  • Kemudian kondisi gabungan ditentukan dengan ON.
  • Alias ​​dapat ditentukan untuk tabel yang direferensikan.
  • Kata INNER bersifat opsional, Anda tinggal menulis GABUNG.

Keluaran:

  • INNER JOIN menghasilkan catatan dari kedua - tabel siswa dan departemen yang sesuai dengan kondisi yaitu " S tudents.DepartmentId = Departments.DepartmentId ". Baris yang tidak cocok akan diabaikan dan tidak disertakan dalam hasil.
  • Itulah mengapa hanya 8 siswa dari 10 siswa yang dikembalikan dari kueri ini dengan departemen TI, matematika, dan fisika. Sedangkan mahasiswa "Jena" dan "George" tidak disertakan, karena mereka memiliki Id departemen nol, yang tidak cocok dengan kolom departmentId dari tabel departemen. Sebagai berikut:

SQLite BERGABUNG… 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 gabungan memiliki nama yang sama. Dalam kasus seperti itu, tidak perlu mengulanginya menggunakan kondisi on dan cukup sebutkan nama kolom dan SQLite akan mendeteksinya.

Perbedaan antara INNER JOIN dan JOIN… MENGGUNAKAN:

Dengan "GABUNG

… MENGGUNAKAN "Anda tidak menulis kondisi penggabungan, Anda cukup menulis kolom gabungan yang sama antara dua tabel yang digabungkan, alih-alih menulis tabel1" INNER JOIN table2 ON table1.cola = table2.cola "kita tulis seperti" tabel1 GABUNG tabel2 MENGGUNAKAN (cola) ".

Contoh

Dalam contoh berikut, kita akan menggabungkan dua tabel " Mahasiswa " dan " Departemen " dengan DepartmentId untuk mendapatkan nama departemen untuk setiap siswa, sebagai berikut:

PILIHStudents.StudentName,Departments.DepartmentNameDARI SiswaINNER JOIN Departments USING (DepartmentId);

Penjelasan

  • Berbeda dengan contoh sebelumnya, kami tidak menulis " ON Students.DepartmentId = Departments.DepartmentId ". Kami baru saja menulis " MENGGUNAKAN (DepartmentId) ".
  • SQLite menyimpulkan kondisi penggabungan 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 persis sama seperti contoh sebelumnya:

GABUNG ALAMI SQLite

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:

  • I n INNER JOIN, Anda harus menentukan kondisi join yang digunakan inner join untuk menggabungkan dua tabel. Sedangkan pada natural join, Anda tidak menulis syarat join. Anda tinggal menuliskan nama kedua tabel tersebut tanpa syarat apapun. Kemudian gabungan alami akan secara otomatis menguji kesetaraan antara nilai untuk setiap kolom yang ada di kedua tabel. Gabungan alami menyimpulkan kondisi sambungan secara otomatis.
  • Dalam 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 (dua kolom ada dengan nama yang sama di dua tabel), maka natural join akan menggabungkan dua tabel dengan membandingkan nilai kedua kolom dan tidak hanya dari satu. kolom.

Contoh

PILIHStudents.StudentName,Departments.DepartmentNameDARI SiswaDepartemen GABUNG Alami;

Penjelasan

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

Keluaran

  • Natural JOIN akan memberi Anda output yang sama persis dengan output yang kami dapatkan dari contoh INNER JOIN dan JOIN USING. Karena dalam contoh kami, ketiga kueri tersebut setara. Tetapi dalam beberapa kasus, output akan berbeda dari gabungan dalam kemudian gabungan alami. Misalnya, jika ada lebih banyak tabel dengan nama yang sama, gabungan natural akan mencocokkan semua kolom satu sama lain. Namun, gabungan dalam hanya akan cocok dengan kolom dalam kondisi gabungan (detail selengkapnya di bagian selanjutnya; perbedaan antara gabungan dalam dan gabungan alami).

SQLite LEFT OUTER JOIN

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

Di LEFT OUTER JOIN, semua nilai kolom yang Anda pilih dari tabel kiri akan disertakan dalam hasil kueri, jadi terlepas dari nilainya cocok dengan kondisi gabungan atau tidak, itu akan disertakan dalam hasil.

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

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

Contoh

Dalam contoh berikut, kita akan mencoba "LEFT JOIN" untuk menggabungkan dua tabel "Mahasiswa" dan "Departemen":

PILIHStudents.StudentName,Departments.DepartmentNameDARI Siswa - ini adalah tabel kiriLEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Penjelasan

  • Sintaks LEFT JOIN sama dengan INNER JOIN; Anda menulis LEFT JOIN 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 left join adalah tabel kanan.
  • Klausa OUTER bersifat opsional; LEFT OUTER JOIN sama dengan LEFT JOIN.

Keluaran

  • Seperti yang Anda lihat, semua baris dari tabel siswa termasuk yang berjumlah 10 siswa. Bahkan jika siswa keempat dan terakhir, Jena, dan George departmentIds 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 query sebelumnya menggunakan left join penjelasan lebih dalam 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, kueri tidak akan memberi Anda hanya baris yang cocok sebagai INNER JOIN, tetapi akan memberi Anda bagian ekstra yang memiliki baris yang tidak cocok dari tabel kiri yang merupakan tabel siswa.

Perhatikan bahwa setiap nama siswa yang tidak memiliki departemen yang cocok akan memiliki nilai "null" untuk nama departemen, karena tidak ada nilai yang cocok untuk itu, dan nilai-nilai tersebut adalah nilai-nilai di baris yang tidak cocok.

SQLite CROSS GABUNG

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 di 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 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 akan menjadi empat baris:

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

Contoh

Dalam query berikut kita akan mencoba CROSS JOIN antara tabel Students and Departments:

PILIHStudents.StudentName,Departments.DepartmentNameDARI SiswaCROSS JOIN Departemen;

Penjelasan

  • Dalam klausa pemilihan, kami hanya memilih dua kolom "nama siswa" dari tabel siswa dan "nama departemen" dari tabel departemen.
  • Untuk gabungan silang, kami tidak menentukan kondisi penggabungan apa pun hanya dua tabel yang digabungkan dengan CROSS JOIN di tengahnya.

Keluaran:

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

  • Empat nilai untuk empat departemen dari tabel departemen cocok dengan siswa pertama Michel.
  • Empat nilai untuk Empat departemen dari tabel departemen cocok dengan mahasiswa kedua John.
  • Empat nilai untuk Empat departemen dari tabel departemen cocok dengan siswa ketiga Jack.

    … dan seterusnya.

Ringkasan

Menggunakan SQLite JOINs, Anda dapat menautkan satu atau beberapa tabel atau subkueri bersama-sama untuk memilih kolom dari kedua tabel atau subkueri.