SQLite menyokong pelbagai jenis SQL Bergabung, seperti INNER JOIN, LEFT OUTER JOIN, dan CROSS JOIN. Setiap jenis JOIN digunakan untuk situasi yang berbeza seperti yang akan kita lihat dalam tutorial ini.
Dalam tutorial ini, anda akan belajar-
- Pengenalan kepada SQLite JOIN Clause
- GABUNGAN DALAM
- GABUNG… MENGGUNAKAN
- BERSAMA ALAM
- BERGABUNG KIRI
- BERSAMA BERSAMA
Pengenalan kepada SQLite JOIN Clause
Semasa anda menggunakan pangkalan data dengan beberapa jadual, anda sering perlu mendapatkan data dari pelbagai jadual ini.
Dengan klausa JOIN, anda boleh menghubungkan dua atau lebih jadual atau subkueri dengan menyertainya. Anda juga boleh menentukan lajur mana yang anda perlukan untuk memautkan jadual dan syaratnya.
Mana-mana klausa BERGABUNG mesti mempunyai sintaks berikut:
Setiap klausa bergabung mengandungi:
- Jadual atau subkueri yang merupakan jadual kiri; jadual atau subkueri sebelum klausa bergabung (di sebelah kiri).
- JOIN operator - tentukan jenis gabung (sama ada INNER JOIN, LEFT OUTER JOIN, atau CROSS JOIN).
- JOIN-constraint - setelah anda menentukan jadual atau subkueri untuk bergabung, anda perlu menentukan had bergabung, yang akan menjadi syarat di mana baris yang sesuai dengan keadaan itu akan dipilih bergantung pada jenis gabungan.
Perhatikan bahawa, untuk semua contoh berikut, anda harus menjalankan sqlite3.exe dan membuka sambungan ke pangkalan data sampel sebagai aliran:
Langkah 1) Dalam langkah ini,
- Buka Komputer Saya dan arahkan ke direktori berikut " C: \ sqlite " dan
- Kemudian buka " sqlite3.exe ":
Langkah 2) Buka pangkalan data " TutorialsampleDB.db " dengan arahan berikut:
Sekarang anda sudah bersedia untuk menjalankan sebarang jenis pertanyaan di pangkalan data.
SQLite INNER BERSAMA
INNER JOIN hanya mengembalikan baris yang sepadan dengan keadaan bergabung dan menghilangkan semua baris lain yang tidak sepadan dengan keadaan bergabung.
Contohnya
Dalam contoh berikut, kami akan menggabungkan dua jadual " Pelajar " dan " Jabatan " dengan DepartmentId untuk mendapatkan nama jabatan untuk setiap pelajar, seperti berikut:
PILIHPelajar. Nama Pelajar,Jabatan.Nama JabatanDARI PelajarINNER JOIN Department ON Students.DepartmentId = Departments.DepartmentId;
Penjelasan kod:
INNER JOIN berfungsi seperti berikut:
- Dalam klausa Pilih, anda boleh memilih lajur apa sahaja yang ingin anda pilih dari dua jadual yang dirujuk.
- Klausa INNER JOIN ditulis selepas jadual pertama yang dirujuk dengan klausa "Dari".
- Kemudian syarat bergabung ditentukan dengan ON.
- Alias boleh ditentukan untuk jadual yang dirujuk.
- Kata INNER adalah pilihan, anda boleh menulis BERGABUNG.
Pengeluaran:
- INNER JOIN menghasilkan rekod dari kedua - pelajar dan jadual jabatan yang sesuai dengan keadaan iaitu " S tudents.DepartmentId = Departments.DepartmentId ". Baris yang tidak dapat ditandingi akan diabaikan dan tidak termasuk dalam hasilnya.
- Itulah sebabnya hanya 8 pelajar dari 10 pelajar yang dikembalikan dari pertanyaan ini dengan jabatan IT, matematik, dan fizik. Manakala pelajar "Jena" dan "George" tidak termasuk, kerana mereka mempunyai Id jabatan kosong, yang tidak sesuai dengan ruangan departmentId dari jadual jabatan. Seperti berikut:
SQLite GABUNG… MENGGUNAKAN
INNER JOIN boleh ditulis menggunakan klausa "MENGGUNAKAN" untuk mengelakkan kelebihan, jadi daripada menulis "ON Students.DepartmentId = Departments.DepartmentId", anda hanya boleh menulis "USING (DepartmentID)".
Anda boleh menggunakan "GABUNG… MENGGUNAKAN" setiap kali lajur yang akan anda bandingkan dalam keadaan bergabung adalah nama yang sama. Dalam kes sedemikian, tidak perlu mengulanginya dengan menggunakan syarat dan nyatakan nama lajur dan SQLite akan mengesannya.
Perbezaan antara INNER JOIN dan GABUNG… MENGGUNAKAN:
Dengan "SERTAI
… MENGGUNAKAN "anda tidak menulis syarat bergabung, anda hanya menulis lajur bergabung yang sama antara kedua-dua jadual bergabung, dan bukannya menulis jadual1" INNER JOIN table2 ON table1.cola = table2.cola "kami menulisnya seperti" table1 SERTAI jadual2 MENGGUNAKAN (cola) ".Contohnya
Dalam contoh berikut, kami akan menggabungkan dua jadual " Pelajar " dan " Jabatan " dengan DepartmentId untuk mendapatkan nama jabatan untuk setiap pelajar, seperti berikut:
PILIHPelajar. Nama Pelajar,Jabatan.Nama JabatanDARI PelajarINNER JOIN Department DENGAN MENGGUNAKAN (DepartmentId);
Penjelasan
- Tidak seperti contoh sebelumnya, kami tidak menulis " ON Students.DepartmentId = Departments.DepartmentId ". Kami baru sahaja menulis " USING (DepartmentId) ".
- SQLite memasukkan syarat bergabung secara automatik dan membandingkan DepartmentId dari kedua-dua jadual - Pelajar dan Jabatan.
- Anda boleh menggunakan sintaks ini setiap kali dua lajur yang anda bandingkan dengan nama yang sama.
Pengeluaran
- Ini akan memberi anda hasil yang tepat seperti contoh sebelumnya:
GABUNGAN ALAM SQLite
GABUNGAN ALAM serupa dengan GABUNGAN… MENGGUNAKAN, perbezaannya ialah ia secara automatik menguji kesamaan antara nilai setiap lajur yang terdapat dalam kedua-dua jadual.
Perbezaan antara INNER JOIN dan NATURAL JOIN:
- Saya n INNER JOIN, anda perlu nyatakan yang menyertai keadaan yang dalaman menyertai kegunaan untuk menyertai dua jadual. Walaupun dalam gabungan semula jadi, anda tidak menulis syarat bergabung. Anda hanya menulis nama dua jadual tanpa syarat. Maka gabungan semula jadi secara automatik akan menguji kesamaan antara nilai untuk setiap lajur yang terdapat dalam kedua-dua jadual. Gabungan semula jadi menyatukan keadaan bergabung secara automatik.
- Dalam GABUNGAN ALAM, semua lajur dari kedua-dua jadual dengan nama yang sama akan dipadankan antara satu sama lain. Sebagai contoh, jika kita mempunyai dua jadual dengan dua nama lajur yang sama (dua lajur ada dengan nama yang sama dalam dua jadual), maka gabung semula jadi akan bergabung dengan dua jadual dengan membandingkan nilai kedua lajur dan bukan hanya dari satu ruangan.
Contohnya
PILIHPelajar. Nama Pelajar,Jabatan.Nama JabatanDARI PelajarJabatan BERSAMA semula jadi;
Penjelasan
- Kami tidak perlu menulis syarat bergabung dengan nama lajur (seperti yang kami lakukan di INNER JOIN). Kami bahkan tidak perlu menulis nama lajur sekali (seperti yang kami lakukan ketika BERGABUNG DENGAN PENGGUNAAN).
- Gabungan semula jadi akan mengimbas kedua lajur dari dua jadual. Ia akan mengesan bahawa keadaan harus terdiri daripada membandingkan DepartmentId dari kedua-dua jadual Pelajar dan Jabatan.
Pengeluaran
- Natural JOIN akan memberi anda output tepat yang sama seperti output yang kita dapat dari contoh INNER JOIN dan JOIN USING. Kerana dalam contoh kami, ketiga-tiga pertanyaan adalah setara. Tetapi dalam beberapa kes, keluarannya akan berbeza dari penyambungan dalaman kemudian dalam gabungan semula jadi. Contohnya, jika terdapat lebih banyak jadual dengan nama yang sama, maka gabungan semula jadi akan memadankan semua lajur antara satu sama lain. Walau bagaimanapun, gabung dalam hanya akan sesuai dengan lajur dalam keadaan bergabung (butiran lebih lanjut pada bahagian seterusnya; perbezaan antara gandingan dalaman dan gabung semula jadi).
SQLite LEFT OUTER GABUNGAN
Standard SQL mentakrifkan tiga jenis GABUNGAN LUAR: KIRI, KANAN, dan LENGKAP tetapi SQLite hanya menyokong GABUNGAN KIRI KIRI.
Dalam LEFT OUTER JOIN, semua nilai lajur yang anda pilih dari jadual kiri akan disertakan dalam hasil pertanyaan, jadi tanpa mengira nilainya sesuai dengan syarat bergabung atau tidak, ia akan dimasukkan dalam hasilnya.
Oleh itu, jika jadual kiri mempunyai baris 'n', hasil pertanyaan akan mempunyai baris 'n'. Namun, untuk nilai lajur yang berasal dari tabel kanan, jika ada nilai yang tidak sesuai dengan syarat bergabung, ia akan berisi nilai "null".
Jadi, anda akan mendapat sebilangan baris bersamaan dengan bilangan baris di gabung kiri. Oleh itu, anda akan mendapat baris yang sepadan dari kedua-dua jadual (seperti hasil INNER JOIN), ditambah dengan baris yang tidak sepadan dari jadual kiri.
Contohnya
Dalam contoh berikut, kami akan mencuba "KIRI BERGABUNG" untuk menggabungkan dua jadual "Pelajar" dan "Jabatan":
PILIHPelajar. Nama Pelajar,Jabatan.Nama JabatanDARI Pelajar - ini adalah jadual kiriLEFT GOIN Department ON Students.DepartmentId = Departments.DepartmentId;
Penjelasan
- Sintaks LEFT JOIN sama dengan INNER JOIN; anda menulis GABUNGAN KIRI antara dua jadual, dan kemudian syarat bergabung muncul selepas klausa ON.
- Jadual pertama selepas klausa dari ialah jadual kiri. Manakala jadual kedua yang dinyatakan selepas gabungan kiri adalah jadual kanan.
- Klausa OUTER adalah pilihan; LEFT OUTER JOIN sama dengan LEFT JOIN.
Pengeluaran
- Seperti yang anda lihat semua baris dari jadual pelajar disertakan yang terdiri daripada 10 pelajar keseluruhan. Walaupun pelajar keempat dan terakhir, Jena, dan George departmentIds tidak ada di jadual Jabatan, mereka juga disertakan.
- Dan dalam kes ini, nilai departmentName untuk Jena dan George akan menjadi "null" kerana jadual department tidak mempunyai departmentName yang sepadan dengan nilai departmentId mereka.
Mari berikan pertanyaan sebelumnya menggunakan sebelah kiri bergabung dengan penjelasan yang lebih mendalam menggunakan gambarajah Van:
GABUNG KIRI akan memberikan semua nama pelajar dari jadual pelajar walaupun pelajar tersebut mempunyai id jabatan yang tidak ada di jadual jabatan. Oleh itu, pertanyaan tidak akan memberi anda hanya baris yang sesuai sebagai INNER JOIN, tetapi akan memberi anda bahagian tambahan yang mempunyai baris yang tidak sesuai dari meja kiri yang merupakan jadual pelajar.
Perhatikan bahawa mana-mana nama pelajar yang tidak mempunyai jabatan yang sepadan akan mempunyai nilai "null" untuk nama jabatan, kerana tidak ada nilai yang sesuai untuknya, dan nilai tersebut adalah nilai dalam baris yang tidak sepadan.
GABUNGAN SQLite CROSS
A CROSS JOIN memberikan produk Cartesian untuk lajur terpilih dari dua jadual bergabung, dengan memadankan semua nilai dari jadual pertama dengan semua nilai dari jadual kedua.
Jadi, untuk setiap nilai dalam jadual pertama, anda akan mendapat padanan 'n' dari jadual kedua di mana n adalah bilangan baris jadual kedua.
Tidak seperti INNER JOIN dan LEFT OUTER JOIN, dengan CROSS JOIN, anda tidak perlu menentukan syarat join, kerana SQLite tidak memerlukannya untuk CROSS JOIN.
SQLite akan menghasilkan hasil logik yang ditetapkan dengan menggabungkan semua nilai dari jadual pertama dengan semua nilai dari jadual kedua.
Sebagai contoh, jika anda memilih lajur dari jadual pertama (colA) dan lajur lain dari jadual kedua (colB). ColA mengandungi dua nilai (1,2) dan colB juga mengandungi dua nilai (3,4).
Maka hasil CROSS JOIN akan menjadi empat baris:
- Dua baris dengan menggabungkan nilai pertama dari colA yang 1 dengan dua nilai colB (3,4) yang akan menjadi (1,3), (1,4).
- Begitu juga, dua baris dengan menggabungkan nilai kedua dari colA iaitu 2 dengan dua nilai colB (3,4) yang (2,3), (2,4).
Contohnya
Dalam pertanyaan berikut, kami akan mencuba CROSS JOIN antara jadual Pelajar dan Jabatan:
PILIHPelajar. Nama Pelajar,Jabatan.Nama JabatanDARI PelajarCROSS GABUNG Jabatan;
Penjelasan
- Dalam klausa pilih, kami hanya memilih dua lajur "nama pelajar" dari jadual pelajar dan "nama nama" dari jadual jabatan.
- Untuk penyertaan silang, kami tidak menyatakan syarat penyertaan hanya dua jadual yang digabungkan dengan CROSS JOIN di tengahnya.
Pengeluaran:
Seperti yang anda lihat, hasilnya adalah 40 baris; 10 nilai dari jadual pelajar dipadankan dengan 4 jabatan dari jadual jabatan. Seperti berikut:
- Empat nilai untuk empat jabatan dari jadual jabatan dipadankan dengan pelajar pertama Michel.
- Empat nilai untuk Empat jabatan dari jadual jabatan dipadankan dengan pelajar kedua John.
- Empat nilai untuk Empat jabatan dari jadual jabatan dipadankan dengan pelajar ketiga Jack.
… dan sebagainya.
Ringkasan
Dengan menggunakan SQLite JOIN, anda boleh menghubungkan satu atau lebih jadual atau subkueri untuk memilih lajur dari kedua-dua jadual atau subkueri.