Untuk menulis pertanyaan SQL dalam pangkalan data SQLite, anda harus tahu bagaimana klausa SELECT, FROM, WHERE, GROUP BY, ORDER BY, dan LIMIT berfungsi dan bagaimana menggunakannya.
Semasa tutorial ini, anda akan belajar bagaimana menggunakan klausa ini dan bagaimana menulis klausa SQLite.
Dalam tutorial ini, anda akan belajar-
- Membaca Data dengan Pilih
- Nama dan Alias
- DI MANA
- Mengehadkan dan Memesan
- Membuang pendua
- Agregat
- Kumpulan OLEH
- Pertanyaan & Pertanyaan
- Tetapkan Operasi -UNION, Bersilang
- Pengendalian NULL
- Hasil bersyarat
- Ungkapan jadual biasa
- Pertanyaan lanjutan
Membaca Data dengan Pilih
Klausa PILIH adalah pernyataan utama yang anda gunakan untuk meminta pangkalan data SQLite. Dalam klausa PILIH, anda menyatakan apa yang hendak dipilih. Tetapi sebelum klausa pilih, mari kita lihat dari mana kita dapat memilih data menggunakan klausa FROM.
Klausa FROM digunakan untuk menentukan di mana anda mahu memilih data. Dalam klausa dari, anda boleh menentukan satu atau lebih jadual atau subkueri untuk memilih data, seperti yang akan kita lihat nanti dalam tutorial.
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.
Dalam klausa PILIH, anda boleh memilih bukan sahaja nama lajur tetapi anda mempunyai banyak pilihan lain untuk menentukan apa yang hendak dipilih. Seperti berikut:
PILIH *
Perintah ini akan memilih semua lajur dari semua jadual yang dirujuk (atau subkueri) dalam klausa FROM. Sebagai contoh:
PILIH *DARI PelajarINNER JOIN Department ON Students.DepartmentId = Departments.DepartmentId;
Ini akan memilih semua lajur dari kedua-dua jadual pelajar dan jadual jabatan:
PILIH nama tabl. *
Ini akan memilih semua lajur dari hanya jadual "tablename". Sebagai contoh:
PILIH Pelajar. *DARI PelajarINNER JOIN Department ON Students.DepartmentId = Departments.DepartmentId;
Ini akan memilih semua lajur dari jadual pelajar sahaja:
Nilai literal
Nilai literal adalah nilai malar yang dapat ditentukan dalam pernyataan pilih. Anda boleh menggunakan nilai literal biasanya dengan cara yang sama seperti anda menggunakan nama lajur dalam klausa SELECT. Nilai literal ini akan dipaparkan untuk setiap baris dari baris yang dikembalikan oleh pertanyaan SQL.
Berikut adalah beberapa contoh nilai literal yang berbeza yang boleh anda pilih:
- Numeric Literal - nombor dalam format apa pun seperti 1, 2.55,… dll.
- String literal - Sebarang rentetan 'USA', 'ini adalah contoh teks', ... dll.
- Nilai NULL - NULL.
- Current_TIME - Ini akan memberi anda masa semasa.
- CURRENT_DATE - ini akan memberi anda tarikh semasa.
Ini mungkin berguna dalam beberapa keadaan di mana anda harus memilih nilai tetap untuk semua baris yang dikembalikan. Sebagai contoh, jika anda ingin memilih semua pelajar dari jadual Pelajar, dengan lajur baru yang disebut negara yang mengandungi nilai "USA", anda boleh melakukan ini:
PILIH *, 'USA' SEBAGAI Negara DARI Pelajar;
Ini akan memberi anda lajur semua pelajar, ditambah lajur baru "Negara" seperti ini:
Perhatikan bahawa, Negara lajur baru ini sebenarnya bukan lajur baru yang ditambahkan ke jadual. Ia adalah lajur maya, dibuat dalam pertanyaan untuk memaparkan hasilnya dan tidak akan dibuat di atas meja.
Nama dan Alias
Alias adalah nama baru untuk lajur yang membolehkan anda memilih lajur dengan nama baru. Alias lajur ditentukan menggunakan kata kunci "AS".
Contohnya, jika anda ingin memilih ruangan StudentName yang akan dikembalikan dengan "Student Name" dan bukannya "StudentName", anda boleh memberikannya sebagai alias seperti ini:
PILIH Nama Pelajar SEBAGAI 'Nama Pelajar' DARI Pelajar;
Ini akan memberi anda nama pelajar dengan nama "Nama Pelajar" dan bukan "Nama Pelajar" seperti ini:
Perhatikan bahawa, nama lajur masih "Nama Pelajar "; lajur StudentName masih sama, tidak berubah dengan alias.
Alias tidak akan menukar nama lajur; ia hanya akan menukar nama paparan dalam klausa PILIH.
Juga, perhatikan bahawa, kata kunci "AS" adalah pilihan, anda boleh meletakkan nama alias tanpanya, seperti ini:
PILIH Nama Pelajar 'Nama Pelajar' DARI Pelajar;
Dan ia akan memberi anda output yang sama seperti pertanyaan sebelumnya:
Anda juga boleh memberikan alias jadual, bukan hanya lajur. Dengan kata kunci yang sama "AS". Contohnya, anda boleh melakukan ini:
PILIH s. * DARI Pelajar SEBAGAI s;
Ini akan memberi anda semua lajur dalam jadual Pelajar:
Ini sangat berguna sekiranya anda menyertai lebih dari satu jadual; daripada mengulangi nama jadual penuh dalam pertanyaan, anda boleh memberikan setiap nama jadual alias pendek. Contohnya, dalam pertanyaan berikut:
PILIH Pelajar. Nama Pelajar, Jabatan. Nama JabatanDARI PelajarINNER JOIN Department ON Students.DepartmentId = Departments.DepartmentId;
Pertanyaan ini akan memilih setiap nama pelajar dari jadual "Pelajar" dengan nama jabatannya dari jadual "Jabatan":
Walau bagaimanapun, pertanyaan yang sama boleh ditulis seperti ini:
PILIH s.StudentName, d.DepartmentNameDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
- Kami memberikan jadual Pelajar alias "s" dan jadual jabatan alias "d".
- Kemudian daripada menggunakan nama jadual penuh, kami menggunakan alias mereka untuk merujuknya.
- INNER JOIN bergabung dengan dua atau lebih jadual bersama-sama menggunakan keadaan. Dalam contoh kami, kami menggabungkan jadual Pelajar dengan jadual Jabatan dengan lajur DepartmentId. Terdapat juga penjelasan mendalam untuk INNER JOIN dalam tutorial "SQLite Joins".
Ini akan memberi anda output yang tepat seperti pertanyaan sebelumnya:
DI MANA
Menulis pertanyaan SQL menggunakan klausa SELECT sahaja dengan klausa FROM seperti yang kita lihat di bahagian sebelumnya, akan memberi anda semua baris dari jadual. Walau bagaimanapun, jika anda ingin menyaring data yang dikembalikan, anda harus menambahkan klausa "DI MANA".
Klausa DI MANA digunakan untuk menyaring hasil yang dikembalikan oleh pertanyaan SQL. Ini bagaimana klausa WHERE berfungsi:
- Dalam klausa DI MANA, anda boleh menentukan "ungkapan".
- Ungkapan itu akan dinilai untuk setiap baris yang dikembalikan dari jadual yang ditentukan dalam klausa FROM.
- Ungkapan tersebut akan dinilai sebagai ungkapan Boolean, dengan hasilnya benar, salah, atau batal.
- Kemudian hanya baris yang ekspresinya dinilai dengan nilai benar akan dikembalikan, dan baris dengan hasil palsu atau nol akan diabaikan dan tidak termasuk dalam kumpulan hasil.
- Untuk menapis hasil yang ditetapkan menggunakan klausa DI MANA, anda harus menggunakan ungkapan dan operator.
Senarai pengendali di SQLite dan cara menggunakannya
Di bahagian berikut, kami akan menerangkan bagaimana anda boleh menapis menggunakan ekspresi dan operator.
Ungkapan adalah satu atau lebih nilai literal atau lajur yang digabungkan antara satu sama lain dengan operator.
Perhatikan bahawa, anda boleh menggunakan ungkapan dalam klausa PILIH dan klausa DI MANA.
Dalam contoh berikut, kami akan mencuba ungkapan dan operator dalam klausa pilih dan klausa DI MANA. Untuk menunjukkan bagaimana prestasi mereka.
Terdapat pelbagai jenis ungkapan dan operator yang boleh anda tentukan seperti berikut:
SQLite pengendali gabungan "||"
Operator ini digunakan untuk menggabungkan satu atau lebih nilai literal atau lajur antara satu sama lain. Ia akan menghasilkan satu rentetan hasil dari semua nilai atau lajur gabungan. Sebagai contoh:
PILIH 'Id dengan Nama:' || StudentId || StudentName SEBAGAI StudentIdWithNameDARI Pelajar;
Ini akan digabungkan menjadi alias baru " StudentIdWithName ":
- Nilai rentetan literal " Id with Name: "
- dengan nilai lajur " StudentId " dan
- dengan nilai dari lajur " StudentName "
Pengendali SQLite CAST:
Operator CAST digunakan untuk menukar nilai dari jenis data ke jenis data lain.
Sebagai contoh, jika anda mempunyai nilai angka yang disimpan sebagai nilai rentetan seperti ini " '12 .5' " dan anda ingin menukarnya menjadi nilai angka, anda boleh menggunakan operator CAST untuk melakukan ini seperti " CAST ('12 .5 'AS SEBENAR) ". Atau jika anda mempunyai nilai perpuluhan seperti 12.5, dan anda perlu mendapatkan bahagian bulat sahaja, anda boleh memasukkannya ke bilangan bulat seperti ini "CAST (12.5 AS INTEGER)".
Contohnya
Dalam perintah berikut, kami akan cuba menukar nilai yang berbeza menjadi jenis data lain:
SELECT CAST ('12 .5 'AS REAL) ToReal, CAST (12.5 SEBAGAI INTEGER) SEBAGAI ToInteger;
Ini akan memberi anda:
Hasilnya adalah seperti berikut:
- CAST ('12 .5 'SEBAGAI NYATA) - nilai '12 .5' adalah nilai rentetan, ia akan ditukar menjadi nilai SEBENAR.
- CAST (12.5 AS INTEGER) - nilai 12.5 adalah nilai perpuluhan, ia akan ditukar menjadi nilai integer. Bahagian perpuluhan akan dipotong, dan menjadi 12.
Pengendali Aritmetik SQLite:
Ambil dua atau lebih nilai literal numerik atau lajur numerik dan kembalikan satu nilai numerik. Pengendali aritmetik yang disokong dalam SQLite adalah:
|
Contoh:
Dalam contoh berikut, kami akan mencuba lima operator aritmetik dengan nilai numerik literal yang sama
pilih klausa:
PILIH 25 + 6, 25-6, 25 * 6, 25% 6, 25/6;
Ini akan memberi anda:
Perhatikan bagaimana kita menggunakan pernyataan SELECT tanpa klausa FROM di sini. Dan ini dibenarkan dalam SQLite selagi kita memilih nilai literal.
Pengendali Perbandingan SQLite
Bandingkan dua operan antara satu sama lain dan kembalikan yang benar atau salah seperti berikut:
|
Perhatikan bahawa, SQLite menyatakan nilai sebenar dengan 1 dan nilai palsu dengan 0.
Contoh:
PILIH10 <6 AS '<', 10 <= 6 AS '<=',10> 6 AS '>', 10> = 6 AS '> =',10 = 6 AS '=', 10 == 6 AS '==',10! = 6 AS '! =', 10 <> 6 AS '<>';
Ini akan memberi seperti ini:
Operator SQLite Pattern Matching
" LIKE " - digunakan untuk pemadanan corak. Dengan menggunakan " Suka ", anda boleh mencari nilai yang sepadan dengan corak yang ditentukan menggunakan wildcard.
Operan di sebelah kiri boleh berupa nilai literal rentetan atau lajur rentetan. Corak boleh dinyatakan seperti berikut:
- Mengandungi corak. Contohnya, Nama Pelajar LIKE '% a%' - ini akan mencari nama pelajar yang mengandungi huruf "a" dalam sebarang kedudukan pada lajur Nama Pelajar.
- Bermula dengan corak. Contohnya, " StudentName LIKE 'a%' " - cari nama pelajar yang bermula dengan huruf "a".
- Diakhiri dengan corak. Contohnya, "Nama Pelajar LIKE '% a' " - Cari nama pelajar yang diakhiri dengan huruf "a".
- Memadankan mana-mana watak dalam rentetan menggunakan huruf bawah "_". Contohnya, " StudentName LIKE 'J___' " - Cari nama pelajar yang panjangnya 4 aksara. Huruf itu mesti diawali dengan huruf "J" dan boleh mempunyai tiga aksara lain setelah huruf "J".
Contoh padanan corak:
- Dapatkan nama Pelajar yang bermula dengan huruf 'j':
PILIH Nama Pelajar DARI Pelajar DI MANA Nama Pelajar LIKE 'j%';
Keputusan:
- Dapatkan nama Pelajar diakhiri dengan huruf 'y':
PILIH Nama Pelajar DARI Pelajar DI MANA Nama Pelajar SUKA '% y';
Keputusan:
- Dapatkan nama Pelajar yang mengandungi huruf 'n':
PILIH Nama Pelajar DARI Pelajar DI MANA Nama Pelajar LIKE '% n%';
Keputusan:
"GLOB" - setara dengan operator LIKE, tetapi GLOB peka huruf besar kecil, tidak seperti operator LIKE. Contohnya, dua arahan berikut akan mengembalikan hasil yang berbeza:
PILIH 'Jack' GLOB 'j%';PILIH 'Jack' SUKA 'j%';
Ini akan memberi anda:
- Pernyataan pertama mengembalikan 0 (false) kerana pengendali GLOB peka huruf besar kecil, jadi 'j' tidak sama dengan 'J'. Walau bagaimanapun, pernyataan kedua akan mengembalikan 1 (benar) kerana pengendali LIKE tidak peka huruf besar kecil, jadi 'j' sama dengan 'J'.
Pengendali lain:
SQLite DAN
Pengendali logik yang menggabungkan satu atau lebih ungkapan. Ia akan kembali benar, hanya jika semua ungkapan menghasilkan nilai "benar". Namun, ia akan kembali palsu hanya jika semua ungkapan menghasilkan nilai "palsu".
Contoh:
Pertanyaan berikut akan mencari pelajar yang mempunyai StudentId> 5 dan StudentName bermula dengan huruf N, pelajar yang dikembalikan mesti memenuhi dua syarat:
PILIH *DARI PelajarDI MANA (StudentId> 5) DAN (Nama Pelajar SEPERTI 'N%');
Sebagai output, dalam tangkapan skrin di atas, ini hanya akan memberi anda "Nancy". Nancy adalah satu-satunya pelajar yang memenuhi kedua-dua syarat.
SQLite ATAU
Pengendali logik yang menggabungkan satu atau lebih ungkapan, sehingga jika salah satu operator gabungan menghasilkan benar, maka ia akan kembali benar. Namun, jika semua ungkapan menghasilkan palsu, maka akan kembali menjadi salah.
Contoh:
Pertanyaan berikut akan mencari pelajar yang mempunyai StudentId> 5 atau StudentName bermula dengan huruf N, pelajar yang dikembalikan mesti memenuhi sekurang-kurangnya salah satu syarat:
PILIH *DARI PelajarDI MANA (StudentId> 5) ATAU (Nama Pelajar SEPERTI 'N%');
Ini akan memberi anda:
Sebagai output, pada tangkapan skrin di atas, ini akan memberi anda nama pelajar yang mempunyai huruf "n" pada nama mereka ditambah dengan id pelajar yang mempunyai nilai> 5.
Seperti yang anda lihat hasilnya berbeza daripada pertanyaan dengan operator AND.
SQLite ANTARA
ANTARA digunakan untuk memilih nilai-nilai yang berada dalam julat dua nilai. Sebagai contoh, " X ANTARA Y DAN Z " akan kembali benar (1) jika nilai X berada di antara dua nilai Y dan Z. Jika tidak, ia akan kembali palsu (0). " X ANTARA Y DAN Z " bersamaan dengan " X> = Y DAN X <= Z ", X mestilah lebih besar daripada atau sama dengan Y dan X kurang daripada atau sama dengan Z.
Contoh:
Dalam contoh pertanyaan berikut, kami akan menulis pertanyaan untuk mendapatkan pelajar dengan nilai Id antara 5 dan 8:
PILIH *DARI PelajarDI MANA Pelajar DI ANTARA 5 DAN 8;
Ini hanya akan memberikan pelajar dengan id 5, 6, 7 dan 8:
SQLite DI
Mengambil satu operan dan senarai operan. Ia akan kembali benar jika nilai operan pertama sama dengan salah satu nilai operan dari senarai. Operator IN mengembalikan true (1) jika senarai operan mengandungi nilai operan pertama dalam nilainya. Jika tidak, ia akan kembali palsu (0).
Seperti ini: " col IN (x, y, z) ". Ini bersamaan dengan " (col = x) atau (col = y) atau (col = z) ".
Contoh:
Pertanyaan berikut akan memilih pelajar dengan id 2, 4, 6, 8 sahaja:
PILIH *DARI PelajarDI MANA Pelajar DI DALAM (2, 4, 6, 8);
Seperti ini:
Pertanyaan sebelumnya akan memberikan hasil yang tepat seperti pertanyaan berikut kerana ia sama:
PILIH *DARI PelajarDI MANA (StudentId = 2) ATAU (StudentId = 4) ATAU (StudentId = 6) ATAU (StudentId = 8);
Kedua-dua pertanyaan memberikan output yang tepat. Namun, perbezaan antara kedua-dua pertanyaan adalah, pertanyaan pertama yang kami gunakan operator "IN". Dalam pertanyaan kedua, kami menggunakan beberapa operator "ATAU".
Operator IN setara dengan menggunakan banyak operator ATAU. " WHERE StudentId IN (2, 4, 6, 8) " bersamaan dengan " WHERE (StudentId = 2) OR (StudentId = 4) ATAU (StudentId = 6) ATAU (StudentId = 8); "
Seperti ini:
SQLite TIDAK DI
Operan "NOT IN" adalah kebalikan dari operator IN. Tetapi dengan sintaksis yang sama; ia memerlukan satu operan dan senarai operan. Ia akan kembali benar jika nilai operan pertama tidak sama dengan nilai operan dari senarai. iaitu, ia akan kembali benar (0) jika senarai operan tidak mengandungi operan pertama. Seperti ini: " col NOT IN (x, y, z) ". Ini bersamaan dengan " (col <> x) AND (col <> y) AND (col <> z) ".
Contoh:
Pertanyaan berikut akan memilih pelajar dengan id yang tidak sama dengan salah satu Id 2, 4, 6, 8 ini:
PILIH *DARI PelajarDI MANA Pelajar TIDAK DALAM (2, 4, 6, 8);
Seperti ini
Pertanyaan sebelumnya kami memberikan hasil yang tepat seperti pertanyaan berikut kerana ia sama:
PILIH *DARI PelajarDI MANA (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);
Seperti ini:
Dalam tangkapan skrin di atas,
Kami menggunakan beberapa operator yang tidak sama "<>" untuk mendapatkan senarai pelajar, yang tidak sama dengan kedua-dua Id 2, 4, 6, atau 8. Id berikut ini. Pertanyaan ini akan mengembalikan semua pelajar lain selain senarai Id ini.
SISA ADA
Pengendali EXISTS tidak mengambil operasi; hanya memerlukan klausa PILIH selepasnya. Operator EXISTS akan kembali benar (1) jika ada baris yang dikembalikan dari klausa SELECT, dan ia akan kembali palsu (0) jika tidak ada baris sama sekali dikembalikan dari klausa SELECT.
Contoh:
Dalam contoh berikut, kami akan memilih nama jabatan, jika id jabatan ada di jadual pelajar:
PILIH Nama JabatanDARI Jabatan SEBAGAI dDI MANA ADA (PILIH DepartmentId DARI Pelajar SEBAGAI DI MANA d.DepartmentId = s.DepartmentId);
Ini akan memberi anda:
Hanya tiga jabatan " IT, Fizik, dan Seni " yang akan dikembalikan. Nama jabatan " Math " tidak akan dikembalikan kerana tidak ada pelajar di jabatan itu, jadi Id jabatan tidak ada di jadual pelajar. Itulah sebabnya pengendali EXISTS mengabaikan jabatan " Math ".
SQLite BUKAN
Membalikkan hasil pengendali sebelumnya yang mengejarnya. Sebagai contoh:
- TIDAK ANTARA - Ia akan menjadi benar jika ANTARA mengembalikan palsu dan sebaliknya.
- TIDAK SUKA - Ia akan kembali benar jika LIKE kembali palsu dan sebaliknya.
- BUKAN GLOB - Ia akan kembali benar jika GLOB kembali palsu dan sebaliknya.
- TIDAK ADA - Ia akan kembali benar sekiranya SISI mengembalikan palsu dan sebaliknya.
Contoh:
Dalam contoh berikut, kami akan menggunakan operator TIDAK dengan operator EXISTS untuk mendapatkan nama jabatan yang tidak ada dalam jadual Pelajar, yang merupakan hasil kebalikan dari operator EXISTS. Oleh itu, carian akan dilakukan melalui DepartmentId yang tidak terdapat dalam jadual jabatan.
PILIH Nama JabatanDARI Jabatan SEBAGAI dDI MANA TIDAK ADA (PILIH JabatanDARI Pelajar SEBAGAI sDI MANA d.DepartmentId = s.DepartmentId);
Keluaran :
Hanya jabatan " Math " yang akan dikembalikan. Kerana jabatan " Matematik " adalah satu-satunya jabatan, yang tidak ada dalam jadual pelajar.
Mengehadkan dan Memesan
Perintah SQLite
Pesanan SQLite adalah untuk menyusun hasil anda dengan satu atau lebih ungkapan. Untuk memesan hasil yang ditetapkan, anda harus menggunakan klausa ORDER BY seperti berikut:
- Pertama, anda harus menentukan klausa ORDER BY.
- Klausa ORDER BY mesti dinyatakan pada akhir pertanyaan; hanya klausa TERHAD yang dapat ditentukan selepasnya.
- Tentukan ekspresi untuk memerintahkan data, ungkapan ini dapat berupa nama lajur atau ekspresi.
- Selepas ungkapan, anda boleh menentukan arah urutan pilihan. Sama ada DESC, untuk memerintahkan data menurun atau ASC untuk memerintahkan data menaik. Sekiranya anda tidak menyatakannya, data akan diurutkan secara menaik.
- Anda boleh menentukan lebih banyak ungkapan menggunakan "," antara satu sama lain.
Contohnya
Dalam contoh berikut, kami akan memilih semua pelajar yang disusun mengikut nama mereka tetapi mengikut urutan menurun, kemudian dengan nama jabatan mengikut urutan menaik:
PILIH s.StudentName, d.DepartmentNameDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdPESANAN OLEH d.DepartmentName ASC, s.StudentName DESC;
Ini akan memberi anda:
- SQLite akan membuat pesanan terlebih dahulu kepada semua pelajar dengan nama jabatan mereka mengikut urutan menaik
- Kemudian untuk setiap nama jabatan, semua pelajar di bawah nama jabatan tersebut akan dipaparkan dalam susunan menurun mengikut nama mereka
Had SQLite:
Anda boleh mengehadkan bilangan baris yang dikembalikan oleh pertanyaan SQL anda, dengan menggunakan klausa TERHAD. Sebagai contoh, TERHAD 10 akan memberi anda 10 baris sahaja dan mengabaikan semua baris lain.
Dalam klausa TERHAD, anda boleh memilih bilangan baris tertentu bermula dari kedudukan tertentu menggunakan klausa OFFSET. Sebagai contoh, " LIMIT 4 OFFSET 4 " akan mengabaikan 4 baris pertama, dan mengembalikan 4 baris bermula dari baris kelima, jadi anda akan mendapat baris 5,6,7, dan 8.
Perhatikan bahawa klausa OFFSET adalah pilihan, anda boleh menulisnya seperti " TERHAD 4, 4 " dan ia akan memberikan hasil yang tepat.
Contoh :
Dalam contoh berikut, kami akan mengembalikan hanya 3 pelajar bermula dari id pelajar 5 menggunakan pertanyaan:
PILIH * DARI Pelajar TERHAD 4,3;
Ini akan memberi anda hanya tiga pelajar bermula dari baris 5. Oleh itu, ini akan memberi anda baris dengan StudentId 5, 6, dan 7:
Membuang pendua
Sekiranya pertanyaan SQL anda mengembalikan nilai pendua, anda boleh menggunakan kata kunci " DISTINCT " untuk membuang pendua tersebut dan mengembalikan nilai yang berbeza. Anda boleh menentukan lebih daripada satu lajur selepas kerja kunci DISTINCT.
Contoh:
Pertanyaan berikut akan mengembalikan pendua "nilai nama jabatan": Di sini kita mempunyai nilai pendua dengan nama IT, Fizik dan Seni.
PILIH d.Nama JabatanDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi anda nilai pendua untuk nama jabatan:
Perhatikan, bagaimana terdapat nilai pendua untuk nama jabatan. Sekarang, kami akan menggunakan kata kunci DISTINCT dengan pertanyaan yang sama untuk membuang pendua tersebut dan hanya memperoleh nilai unik. Seperti ini:
PILIH DISTINCT d.Nama JabatanDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi anda hanya tiga nilai unik untuk lajur nama jabatan:
Agregat
Agregat SQLite adalah fungsi terbina dalam yang ditentukan dalam SQLite yang akan mengelompokkan beberapa nilai berbilang baris menjadi satu nilai.
Berikut adalah agregat yang disokong oleh SQLite:
SQLite AVG ()
Mengembalikan purata untuk semua nilai x.
Contoh:
Dalam contoh berikut, kita akan mendapat purata markah pelajar untuk semua peperiksaan:
PILIH AVG (Tanda) DARI Tanda;
Ini akan memberi anda nilai "18.375":
Hasil ini berasal dari penjumlahan semua nilai tanda dibahagi dengan kiraannya.
COUNT () - COUNT (X) atau COUNT (*)
Mengembalikan jumlah jumlah kekerapan nilai x muncul. Dan berikut adalah beberapa pilihan yang boleh anda gunakan dengan COUNT:
- COUNT (x): Mengira nilai x sahaja, di mana x adalah nama lajur. Ia akan mengabaikan nilai NULL.
- COUNT (*): Hitung semua baris dari semua lajur.
- COUNT (DISTINCT x): Anda boleh menentukan kata kunci DISTINCT sebelum x yang akan mendapat kiraan nilai x yang berbeza.
Contohnya
Dalam contoh berikut, kita akan mendapat jumlah kiraan Jabatan dengan COUNT (DepartmentId), COUNT (*), dan COUNT (DISTINCT DepartmentId) dan bagaimana perbezaannya:
PILIH COUNT (DepartmentId), COUNT (DISTINCT DepartmentId), COUNT (*) DARI Pelajar;
Ini akan memberi anda:
Seperti berikut:
- COUNT (DepartmentId) akan memberi anda jumlah semua id jabatan, dan ia akan mengabaikan nilai nol.
- COUNT (DISTINCT DepartmentId) memberi anda nilai DepartmentId yang berbeza, iaitu hanya 3. Yang merupakan tiga nilai berbeza dari nama jabatan. Perhatikan bahawa terdapat 8 nilai nama jabatan dalam nama pelajar. Tetapi hanya tiga nilai yang berbeza iaitu Matematik, IT, dan Fizik.
- COUNT (*) mengira bilangan baris dalam jadual pelajar iaitu 10 baris untuk 10 pelajar.
GROUP_CONCAT () - GROUP_CONCAT (X) atau GROUP_CONCAT (X, Y)
Fungsi agregat GROUP_CONCAT menggabungkan gandakan nilai menjadi satu nilai dengan koma untuk memisahkannya. Ia mempunyai pilihan berikut:
- GROUP_CONCAT (X): Ini akan menggabungkan semua nilai x menjadi satu rentetan, dengan koma "," digunakan sebagai pemisah antara nilai. Nilai NULL akan diabaikan.
- GROUP_CONCAT (X, Y): Ini akan menggabungkan nilai-nilai x menjadi satu rentetan, dengan nilai y digunakan sebagai pemisah antara setiap nilai dan bukan pemisah lalai ','. Nilai NULL juga akan diabaikan.
- GROUP_CONCAT (DISTINCT X): Ini akan menggabungkan semua nilai x yang berbeza menjadi satu rentetan, dengan koma "," digunakan sebagai pemisah antara nilai. Nilai NULL akan diabaikan.
GROUP_CONCAT (DepartmentName) Contoh
Pertanyaan berikut akan menggabungkan semua nilai nama jabatan dari pelajar dan jadual jabatan menjadi satu koma rentetan yang dipisahkan. Oleh itu, daripada mengembalikan senarai nilai, satu nilai pada setiap baris. Ia akan mengembalikan hanya satu nilai pada satu baris, dengan semua nilai koma dipisahkan:
PILIH KUMPULAN_CONCAT (d. Nama Jabatan)DARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi anda:
Ini akan memberi anda senarai 8 nilai nama jabatan yang digabungkan menjadi satu rentetan koma yang dipisahkan.
GROUP_CONCAT (DISTINCT DepartmentName) Contoh
Pertanyaan berikut akan menggabungkan nilai-nilai yang berbeza dari nama jabatan dari jadual pelajar dan jabatan menjadi koma rentetan yang dipisahkan:
PILIH KUMPULAN_CONCAT (DISTINCT d. Nama Jabatan)DARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi anda:
Perhatikan bagaimana hasilnya berbeza daripada hasil sebelumnya; hanya tiga nilai yang dikembalikan yang merupakan nama jabatan yang berbeza, dan nilai pendua dikeluarkan.
GROUP_CONCAT (DepartmentName, '&') Contoh
Pertanyaan berikut akan menggabungkan semua nilai lajur nama jabatan dari jadual pelajar dan jabatan menjadi satu rentetan, tetapi dengan watak '&' dan bukan koma sebagai pemisah:
PILIH KUMPULAN_CONCAT (d. Nama Jabatan, '&')DARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi anda:
Perhatikan bagaimana watak "&" digunakan dan bukannya watak lalai "," untuk memisahkan antara nilai.
SQLite MAX () & MIN ()
MAX (X) mengembalikan nilai tertinggi dari nilai X kepada anda. MAX akan mengembalikan nilai NULL jika semua nilai x adalah nol. Manakala MIN (X) mengembalikan nilai terkecil dari nilai X kepada anda. MIN akan mengembalikan nilai NULL jika semua nilai X adalah nol.
Contohnya
Dalam pertanyaan berikut, kami akan menggunakan fungsi MIN dan MAX untuk mendapatkan tanda tertinggi dan tanda terendah dari jadual " Marks ":
PILIH MAX (Mark), MIN (Mark) DARI Markah;
Ini akan memberi anda:
SQLite SUM (x), Jumlah (x)
Kedua-duanya akan mengembalikan jumlah semua nilai x. Tetapi mereka berbeza seperti berikut:
- SUM akan mengembalikan nol jika semua nilainya kosong, tetapi Total akan mengembalikan 0.
- JUMLAH selalu mengembalikan nilai titik terapung. SUM mengembalikan nilai integer jika semua nilai x adalah integer. Namun, jika nilai bukan bilangan bulat, ia akan mengembalikan nilai titik terapung.
Contohnya
Dalam pertanyaan berikut, kita akan menggunakan SUM dan jumlahnya untuk mendapatkan jumlah semua markah dalam jadual " Marks ":
PILIH SUM (Mark), JUMLAH (Mark) DARI Markah;
Ini akan memberi anda:
Seperti yang anda lihat, JUMLAH selalu mengembalikan titik terapung. Tetapi SUM mengembalikan nilai integer kerana nilai di lajur "Mark" mungkin dalam bilangan bulat.
Perbezaan antara SUM dan JUMLAH contoh:
Dalam pertanyaan berikut, kami akan menunjukkan perbezaan antara SUM dan JUMLAH apabila mereka mendapat nilai SUM NULL:
PILIH SUM (Mark), JUMLAH (Mark) DARI Markah DI MANA TestId = 4;
Ini akan memberi anda:
Perhatikan bahawa tidak ada markah untuk TestId = 4, jadi ada nilai nol untuk ujian tersebut. SUM mengembalikan nilai nol sebagai kosong, sedangkan JUMLAH mengembalikan 0.
Kumpulan OLEH
Klausa GROUP BY digunakan untuk menentukan satu atau lebih lajur yang akan digunakan untuk mengelompokkan baris ke dalam kumpulan. Baris dengan nilai yang sama akan dikumpulkan (disusun) menjadi satu kumpulan.
Untuk lajur lain yang tidak termasuk dalam kumpulan mengikut lajur, anda boleh menggunakan fungsi agregat untuknya.
Contoh:
Pertanyaan berikut akan memberi anda jumlah pelajar yang hadir di setiap jabatan.
PILIH d.DepartmentName, COUNT (s.StudentId) SEBAGAI StudentCountDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdKUMPULAN OLEH d. Nama jabatan;
Ini akan memberi anda:
Fasal GROUPBY DepartmentName akan mengumpulkan semua pelajar menjadi satu kumpulan untuk setiap nama jabatan. Bagi setiap kumpulan "jabatan", pelajar akan mengira.
MEMILIKI fasal
Sekiranya anda ingin menapis kumpulan yang dikembalikan oleh klausa GROUP BY, maka anda boleh menentukan klausa "MEMILIKI" dengan ungkapan selepas GROUP BY. Ungkapan tersebut akan digunakan untuk menapis kumpulan ini.
Contohnya
Dalam pertanyaan berikut, kami akan memilih jabatan yang mempunyai dua pelajar sahaja:
PILIH d.DepartmentName, COUNT (s.StudentId) SEBAGAI StudentCountDARI Pelajar SEBAGAI sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdKUMPULAN OLEH d. Nama jabatanMEMILIKI COUNT (s.StudentId) = 2;
Ini akan memberi anda:
Klausa MEMILIKI COUNT (S.StudentId) = 2 akan menapis kumpulan yang dikembalikan dan hanya mengembalikan kumpulan yang mengandungi tepat dua pelajar di dalamnya. Dalam kes kami, jabatan Kesenian mempunyai 2 pelajar, jadi itu dipaparkan dalam output.
Pertanyaan & Pertanyaan SQLite
Di dalam sebarang pertanyaan, anda boleh menggunakan pertanyaan lain sama ada dalam PILIH, MASUK, HAPUS, KEMASKINI atau di dalam pertanyaan lain.
Pertanyaan bersarang ini dipanggil subkueri. Kita akan melihat sekarang beberapa contoh penggunaan subkueri dalam klausa PILIH. Walau bagaimanapun, dalam tutorial Mengubah Data, kita akan melihat bagaimana kita dapat menggunakan subkueri dengan pernyataan INSERT, DELETE, dan UPDATE.
Menggunakan subkueri dalam contoh klausa FROM
Dalam pertanyaan berikut, kami akan memasukkan subkueri di dalam klausa FROM:
PILIHs.StudentName, t.MarkDARI Pelajar SEBAGAI sGABUNGAN DALAM(PILIH StudentId, TandakanDARI UJIAN SEBAGAI tINNER JOIN Menandai AS m ON t.TestId = m.TestId) ON s.StudentId = t.StudentId;
Pertanyaan:
PILIH StudentId, TandakanDARI UJIAN SEBAGAI tINNER JOIN Menandai AS m ON t.TestId = m.TestId
Pertanyaan di atas dipanggil subkueri di sini kerana ia bersarang di dalam klausa FROM. Perhatikan bahawa kami memberikannya nama alias "t" sehingga kami dapat merujuk pada lajur yang dikembalikan darinya dalam pertanyaan.
Pertanyaan ini akan memberi anda:
Jadi dalam kes kami,
- s.StudentName dipilih dari pertanyaan utama yang memberikan nama pelajar dan
- t.Mark dipilih dari subkueri; yang memberikan markah yang diperoleh oleh setiap pelajar ini
Menggunakan subkueri dalam contoh klausa WHERE
Dalam pertanyaan berikut, kami akan memasukkan subkueri dalam klausa WHERE:
PILIH Nama JabatanDARI Jabatan SEBAGAI dDI MANA TIDAK ADA (PILIH JabatanDARI Pelajar SEBAGAI sDI MANA d.DepartmentId = s.DepartmentId);
Pertanyaan:
PILIH JabatanIdDARI Pelajar SEBAGAI sDI MANA d.DepartmentId = s.DepartmentId
Pertanyaan di atas dipanggil subkueri di sini kerana bersarang dalam klausa WHERE. Subkueri akan mengembalikan nilai DepartmentId yang akan digunakan oleh pengendali TIDAK ADA.
Pertanyaan ini akan memberi anda:
Dalam pertanyaan di atas, kami telah memilih jabatan yang tidak mempunyai pelajar yang mendaftar di dalamnya. Yang merupakan bahagian "Math" di sini.
Tetapkan Operasi - UNION, Bersilang
SQLite menyokong operasi SET berikut:
UNION & UNION SEMUA
Ia menggabungkan satu atau lebih set hasil (sekumpulan baris) yang dikembalikan dari beberapa pernyataan SELECT ke dalam satu set hasil.
UNION akan mengembalikan nilai yang berbeza. Walau bagaimanapun, UNION ALL tidak akan menyertakan pendua.
Perhatikan bahawa nama lajur akan menjadi nama lajur yang dinyatakan dalam pernyataan PILIH pertama.
Contoh UNION
Dalam contoh berikut, kita akan mendapat senarai DepartmentId dari jadual pelajar dan senarai DepartmentId dari jadual jabatan di ruangan yang sama:
PILIH DepartmentId SEBAGAI DepartmentIdDikikat DARI PelajarKESATUANPILIH JabatanDari Jabatan;
Ini akan memberi anda:
Pertanyaan mengembalikan hanya 5 baris yang merupakan nilai id jabatan yang berbeza. Perhatikan nilai pertama yang merupakan nilai nol.
SQLite UNION SEMUA Contoh
Dalam contoh berikut, kita akan mendapat senarai DepartmentId dari jadual pelajar dan senarai DepartmentId dari jadual jabatan di ruangan yang sama:
PILIH DepartmentId SEBAGAI DepartmentIdDikikat DARI PelajarUNION SEMUAPILIH JabatanDari Jabatan;
Ini akan memberi anda:
Pertanyaan akan mengembalikan 14 baris, 10 baris dari jadual pelajar, dan 4 dari jadual jabatan. Perhatikan bahawa, terdapat pendua dalam nilai yang dikembalikan. Juga, perhatikan bahawa nama lajur adalah yang dinyatakan dalam pernyataan SELECT pertama.
Sekarang, mari kita lihat bagaimana UNION semua akan memberikan hasil yang berbeza jika kita mengganti UNION ALL dengan UNION:
SQLite INTERSEK
Mengembalikan nilai yang ada di kedua-dua set hasil gabungan. Nilai yang ada dalam salah satu set hasil gabungan akan diabaikan.
Contohnya
Dalam pertanyaan berikut, kami akan memilih nilai DepartmentId yang terdapat dalam kedua-dua jadual Pelajar dan Jabatan di ruangan DepartmentId:
PILIH DepartmentId DARI PelajarBersilangPILIH JabatanDari Jabatan;
Ini akan memberi anda:
Pertanyaan hanya mengembalikan tiga nilai 1, 2, dan 3. Yang merupakan nilai yang terdapat dalam kedua-dua jadual.
Walau bagaimanapun, nilai nol dan 4 tidak disertakan kerana nilai nol hanya terdapat di jadual pelajar dan bukan di jadual jabatan. Dan nilai 4 ada di jadual jabatan dan bukan di jadual pelajar.
Itulah sebabnya kedua-dua nilai NULL dan 4 diabaikan dan tidak termasuk dalam nilai yang dikembalikan.
KECUALI
Andaikan jika anda mempunyai dua senarai baris, list1 dan list2, dan anda mahukan baris hanya dari list1 yang tidak ada dalam list2, anda boleh menggunakan klausa "KECUALI". Klausa KECUALI membandingkan dua senarai dan mengembalikan baris yang ada dalam senarai1 dan tidak ada dalam senarai2.
Contohnya
Dalam pertanyaan berikut, kami akan memilih nilai DepartmentId yang ada di jadual jabatan dan tidak ada dalam jadual pelajar:
PILIH JabatanDari JabatanKECUALISELECT DepartmentId DARI Pelajar;
Ini akan memberi anda:
Pertanyaan hanya mengembalikan nilai 4. Yang merupakan satu-satunya nilai yang ada di jadual jabatan, dan tidak ada dalam jadual pelajar.
Pengendalian NULL
Nilai " NULL " adalah nilai khas dalam SQLite. Ia digunakan untuk mewakili nilai yang tidak diketahui atau hilang nilai. Perhatikan bahawa nilai nol sama sekali berbeza daripada nilai " 0 " atau kosong "". Kerana 0 dan nilai kosong adalah nilai yang diketahui, namun, nilai nol tidak diketahui.
Nilai NULL memerlukan pengendalian khas dalam SQLite, kita akan melihat sekarang bagaimana menangani nilai NULL.
Cari nilai NULL
Anda tidak boleh menggunakan operator persamaan biasa (=) untuk mencari nilai nol. Sebagai contoh, pertanyaan berikut mencari pelajar yang mempunyai nilai DepartmentId nol:
PILIH * DARI Pelajar DI MANA DepartmentId = NULL;
Pertanyaan ini tidak akan memberikan hasil:
Kerana nilai NULL tidak sama dengan nilai lain termasuk nilai null itu sendiri, itu sebabnya ia tidak memberikan hasil.
- Walau bagaimanapun, untuk membuat pertanyaan berfungsi, anda harus menggunakan pengendali "IS NULL" untuk mencari nilai nol seperti berikut:
PILIH * DARI Pelajar DI MANA Jurusan ADALAH NULL;
Ini akan memberi anda:
Pertanyaan akan mengembalikan pelajar yang mempunyai nilai DepartmentId nol.
- Sekiranya anda ingin mendapatkan nilai-nilai yang tidak kosong, anda harus menggunakan pengendali " TIDAK NULL " seperti ini:
PILIH * DARI Pelajar DI MANA Jabatan TIDAK NILAI;
Ini akan memberi anda:
Pertanyaan akan mengembalikan pelajar yang tidak mempunyai nilai NULL DepartmentId.
Hasil bersyarat
Sekiranya anda mempunyai senarai nilai dan anda ingin memilih salah satu berdasarkan beberapa syarat. Untuk itu, syarat untuk nilai tertentu itu harus benar agar dapat dipilih.
Ekspresi CASE akan menilai senarai syarat ini untuk semua nilai. Sekiranya syarat itu benar, ia akan mengembalikan nilai tersebut.
Contohnya, jika anda mempunyai lajur "Gred" dan anda ingin memilih nilai teks berdasarkan nilai gred seperti berikut:
- "Cemerlang" jika gred lebih tinggi daripada 85.
- "Sangat Baik" jika gred antara 70 dan 85.
- "Baik" jika gred antara 60 dan 70.
Kemudian anda boleh menggunakan ungkapan CASE untuk melakukannya.
Ini dapat digunakan untuk menentukan beberapa logik dalam klausa PILIH sehingga anda dapat memilih hasil tertentu bergantung pada keadaan tertentu seperti pernyataan misalnya.
Operator CASE boleh didefinisikan dengan sintaksis yang berbeza seperti berikut:
- Anda boleh menggunakan syarat yang berbeza:
KESKETIKA keadaan1 SETIAP hasil1KETIKA keadaan2 SETIAP hasil2KETIKA syarat3 KINI hasilnya 3 ... SELAIN hasilnyaTAMAT
- Atau, anda hanya boleh menggunakan satu ungkapan dan meletakkan nilai yang mungkin berbeza untuk dipilih:
Ungkapan KESKETIKA nilai1 SETIAP hasil1KETIKA nilai2 SETIAP hasil2KETIKA nilai3 KINI hasilnya 3… ELSE restulnTAMAT
Perhatikan bahawa klausa ELSE adalah pilihan.
Contohnya
Dalam contoh berikut, kita akan menggunakan ungkapan CASE dengan nilai NULL di ruangan Id jabatan di jadual Pelajar untuk memaparkan teks 'No Department' seperti berikut:
PILIHNama pelajar,KESAPABILA Jabatan BILA ADA 'Tiada Jabatan'Jabatan ELSEIdTAMAT SEBAGAI JabatanIdDARI Pelajar;
- Pengendali CASE akan memeriksa nilai DepartmentId sama ada batal atau tidak.
- Sekiranya ia adalah nilai NULL, maka ia akan memilih nilai literal 'No Department' dan bukannya nilai DepartmentId.
- Sekiranya bukan nilai nol, maka ia akan memilih nilai lajur DepartmentId.
Ini akan memberi anda output seperti yang ditunjukkan di bawah:
Ungkapan jadual biasa
Ungkapan jadual biasa (CTE) adalah subkueri yang ditentukan dalam pernyataan SQL dengan nama tertentu.
Ia mempunyai kelebihan berbanding dengan subkueri kerana didefinisikan dari pernyataan SQL dan akan menjadikan pertanyaan lebih mudah dibaca, dipelihara, dan difahami.
Ungkapan jadual biasa dapat didefinisikan dengan meletakkan klausa DENGAN pernyataan SELECT seperti berikut:
DENGAN CTEnamaSEBAGAI(PILIH penyataan)SELECT, UPDATE, INSERT, atau kemas kini penyataan di sini DARI CTE
" CTEname " adalah nama apa pun yang boleh anda berikan untuk CTE, anda boleh menggunakannya untuk merujuknya kemudian. Perhatikan bahawa, anda boleh menentukan pernyataan SELECT, UPDATE, INSERT, atau DELETE pada CTE
Sekarang, mari kita lihat contoh cara menggunakan CTE dalam klausa SELECT.
Contohnya
Dalam contoh berikut, kami akan menentukan CTE dari pernyataan SELECT, dan kemudian kami akan menggunakannya kemudian pada pertanyaan lain:
DENGAN Semua BahagianSEBAGAI(SELECT DepartmentId, DepartmentNameDARI Jabatan)PILIHs.StudentId,s. Nama Pelajar,a. Nama JabatanDARI Pelajar SEBAGAI sINNER SERTAI AllDepartments AS ON ON s.DepartmentId = a.DepartmentId;
Dalam pertanyaan ini, kami menentukan CTE dan memberikannya nama " AllDepartments ". CTE ini didefinisikan dari pertanyaan SELECT:
SELECT DepartmentId, DepartmentNameDARI Jabatan
Kemudian setelah kami mendefinisikan CTE, kami menggunakannya dalam pertanyaan SELECT yang muncul setelahnya.
Perhatikan bahawa, Ungkapan jadual biasa tidak mempengaruhi output pertanyaan. Ini adalah cara untuk menentukan pandangan logik atau subkueri untuk menggunakannya semula dalam pertanyaan yang sama. Ungkapan jadual biasa adalah seperti pemboleh ubah yang anda nyatakan, dan menggunakannya semula sebagai subkueri. Hanya pernyataan PILIH mempengaruhi output pertanyaan.
Pertanyaan ini akan memberi anda:
Pertanyaan lanjutan
Pertanyaan lanjutan adalah pertanyaan yang mengandungi gabungan kompleks, subkueri, dan beberapa agregat. Pada bahagian berikut kita akan melihat contoh pertanyaan lanjutan:
Di mana kita mendapat,
- Nama jabatan dengan semua pelajar untuk setiap jabatan
- Nama pelajar dipisahkan dengan koma dan
- Menunjukkan jabatan itu mempunyai sekurang-kurangnya tiga pelajar di dalamnya
PILIHd. Nama Jabatan,COUNT (s.StudentId) Jumlah Pelajar,GROUP_CONCAT (Nama Pelajar) SEBAGAI PelajarDARI Jabatan SEBAGAI dINNER BERSAMA Pelajar SEBAGAI s.DepartmentId = d.DepartmentIdKUMPULAN OLEH d.Nama JabatanMEMILIKI COUNT (s.StudentId)> = 3;
Kami menambah klausa BERGABUNG untuk mendapatkan Nama Jabatan dari jadual Jabatan. Selepas itu kami menambahkan klausa GROUP BY dengan dua fungsi agregat:
- "COUNT" untuk mengira pelajar bagi setiap kumpulan jabatan.
- GROUP_CONCAT untuk menggabungkan pelajar untuk setiap kumpulan dengan koma dipisahkan dalam satu rentetan.
- Selepas GROUP BY, kami menggunakan klausa HAVING untuk menyaring jabatan dan memilih hanya jabatan yang mempunyai sekurang-kurangnya 3 pelajar.
Hasilnya adalah seperti berikut:
Ringkasan:
Ini adalah pengenalan untuk menulis pertanyaan SQLite dan asas-asas membuat kueri pangkalan data dan bagaimana anda dapat menyaring data yang dikembalikan. Anda kini boleh, menulis pertanyaan SQLite anda sendiri.