Untuk menulis kueri SQL dalam database SQLite, Anda harus mengetahui cara kerja klausa SELECT, FROM, WHERE, GROUP BY, ORDER BY, dan LIMIT.
Selama tutorial ini, Anda akan belajar cara menggunakan klausa ini dan cara menulis klausa SQLite.
Dalam tutorial ini, Anda akan belajar-
- Membaca Data dengan Select
- Nama dan Alias
- DIMANA
- Membatasi dan Memesan
- Menghapus duplikat
- Agregat
- Kelompok OLEH
- Kueri & Subkueri
- Atur Operasi -UNION, Intersect
- Penanganan NULL
- Hasil bersyarat
- Ekspresi tabel umum
- Kueri lanjutan
Membaca Data dengan Select
Klausa SELECT adalah pernyataan utama yang Anda gunakan untuk membuat kueri database SQLite. Di klausa SELECT, Anda menyatakan apa yang harus dipilih. Tetapi sebelum klausa pemilihan, mari kita lihat dari mana kita dapat memilih data menggunakan klausa FROM.
Klausa FROM digunakan untuk menentukan di mana Anda ingin memilih data. Dalam klausa from, Anda dapat menentukan satu atau lebih tabel atau subkueri untuk memilih datanya, seperti yang akan kita lihat nanti di tutorial.
Perhatikan bahwa, untuk semua contoh berikut, Anda harus menjalankan sqlite3.exe dan membuka koneksi ke database sampel sebagai mengalir:
Langkah 1) Pada langkah ini,
- Buka My Computer dan arahkan ke direktori berikut " C: \ sqlite " dan
- Kemudian buka " sqlite3.exe ":
Langkah 2) Buka database " TutorialsSampleDB.db " dengan perintah berikut:
Sekarang Anda siap menjalankan semua jenis kueri di database.
Dalam klausa SELECT, Anda tidak hanya dapat memilih nama kolom tetapi Anda memiliki banyak opsi lain untuk menentukan apa yang harus dipilih. Sebagai berikut:
PILIH *
Perintah ini akan memilih semua kolom dari semua tabel yang direferensikan (atau subkueri) di klausa FROM. Sebagai contoh:
PILIH *DARI SiswaINNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Ini akan memilih semua kolom dari tabel siswa dan tabel departemen:
PILIH tablename. *
Ini akan memilih semua kolom hanya dari tabel "tablename". Sebagai contoh:
PILIH Siswa. *DARI SiswaINNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Ini akan memilih semua kolom dari tabel siswa saja:
Nilai literal
Nilai literal adalah nilai konstanta yang dapat ditentukan dalam pernyataan pilih. Anda dapat menggunakan nilai literal secara normal dengan cara yang sama seperti Anda menggunakan nama kolom di klausa SELECT. Nilai literal ini akan ditampilkan untuk setiap baris dari baris yang dikembalikan oleh kueri SQL.
Berikut beberapa contoh nilai literal berbeda yang dapat Anda pilih:
- Literal Numerik - angka dalam format apa pun seperti 1, 2,55,… dll.
- String literal - Semua string 'USA', 'this is a sample text',… dll.
- NULL - Nilai NULL.
- Current_TIME - Ini akan memberi Anda waktu saat ini.
- CURRENT_DATE - ini akan memberi Anda tanggal saat ini.
Ini dapat berguna dalam beberapa situasi di mana Anda harus memilih nilai konstan untuk semua baris yang dikembalikan. Misalnya, jika Anda ingin memilih semua siswa dari tabel Siswa, dengan kolom baru bernama negara yang berisi nilai "AS", Anda dapat melakukan ini:
PILIH *, 'AS' SEBAGAI Negara DARI Siswa;
Ini akan memberi Anda semua kolom siswa, ditambah kolom baru "Negara" seperti ini:
Perhatikan bahwa, kolom baru Negara ini sebenarnya bukan kolom baru yang ditambahkan ke tabel. Ini adalah kolom virtual, dibuat dalam kueri untuk menampilkan hasil dan tidak akan dibuat di atas tabel.
Nama dan Alias
Alias adalah nama baru untuk kolom yang memungkinkan Anda memilih kolom dengan nama baru. Alias kolom ditentukan menggunakan kata kunci "AS".
Misalnya, jika Anda ingin memilih kolom StudentName untuk dikembalikan dengan "Student Name" daripada "StudentName", Anda dapat memberikan alias seperti ini:
PILIH StudentName SEBAGAI 'Student Name' FROM Students;
Ini akan memberi Anda nama siswa dengan nama "Student Name" bukan "StudentName" seperti ini:
Perhatikan bahwa, nama kolom masih " StudentName "; kolom StudentName masih sama, tidak diubah oleh alias.
Alias tidak akan mengubah nama kolom; itu hanya akan mengubah nama tampilan di klausa SELECT.
Juga, perhatikan bahwa, kata kunci "AS" adalah opsional, Anda dapat meletakkan nama alias tanpanya, seperti ini:
PILIH StudentName 'Student Name' FROM Students;
Dan itu akan memberi Anda hasil yang sama persis dengan kueri sebelumnya:
Anda juga bisa memberi alias pada tabel, bukan hanya kolom. Dengan kata kunci yang sama "AS". Misalnya, Anda dapat melakukan ini:
PILIH s. * DARI Siswa AS s;
Ini akan memberi Anda semua kolom di tabel Siswa:
Ini bisa sangat berguna jika Anda menggabungkan lebih dari satu tabel; alih-alih mengulangi nama tabel lengkap dalam kueri, Anda bisa memberi setiap tabel nama alias pendek. Misalnya, dalam kueri berikut:
PILIH Students.StudentName, Departments.DepartmentNameDARI SiswaINNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;
Kueri ini akan memilih setiap nama siswa dari tabel "Mahasiswa" dengan nama departemennya dari tabel "Departemen":
Namun, kueri yang sama dapat ditulis seperti ini:
PILIH s.StudentName, d.DepartmentNameDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
- Kami memberi tabel Mahasiswa alias "s" dan tabel departemen alias "d".
- Kemudian alih-alih menggunakan nama tabel lengkap, kami menggunakan alias mereka untuk merujuk ke mereka.
- INNER JOIN menggabungkan dua atau lebih tabel bersama-sama menggunakan kondisi. Dalam contoh kami, kami menggabungkan tabel Siswa dengan tabel Departemen dengan kolom DepartmentId. Ada juga penjelasan mendalam untuk INNER JOIN di tutorial "SQLite Joins".
Ini akan memberi Anda keluaran yang sama persis dengan kueri sebelumnya:
DIMANA
Menulis kueri SQL menggunakan klausa SELECT saja dengan klausa FROM seperti yang kita lihat di bagian sebelumnya, akan memberi Anda semua baris dari tabel. Namun, jika Anda ingin memfilter data yang dikembalikan, Anda harus menambahkan klausa "WHERE".
Klausa WHERE digunakan untuk memfilter kumpulan hasil yang dikembalikan oleh kueri SQL. Beginilah cara kerja klausa WHERE:
- Di klausa WHERE, Anda dapat menentukan "ekspresi".
- Ekspresi itu akan dievaluasi untuk setiap baris yang dikembalikan dari tabel yang ditentukan di klausa FROM.
- Ekspresi tersebut akan dievaluasi sebagai ekspresi Boolean, dengan hasil benar, salah, atau nol.
- Kemudian hanya baris yang ekspresi dievaluasi dengan nilai benar akan dikembalikan, dan yang memiliki salah, atau hasil null akan diabaikan dan tidak disertakan dalam set hasil.
- Untuk memfilter hasil yang ditetapkan menggunakan klausa WHERE, Anda harus menggunakan ekspresi dan operator.
Daftar operator di SQLite dan cara menggunakannya
Di bagian berikut, kami akan menjelaskan bagaimana Anda dapat memfilter menggunakan ekspresi dan operator.
Ekspresi adalah satu atau lebih nilai literal atau kolom yang digabungkan satu sama lain dengan operator.
Perhatikan bahwa, Anda dapat menggunakan ekspresi di klausa SELECT dan klausa WHERE.
Dalam contoh berikut, kita akan mencoba ekspresi dan operator di klausa pemilihan dan klausa WHERE. Untuk menunjukkan kepada Anda bagaimana kinerjanya.
Ada berbagai jenis ekspresi dan operator yang dapat Anda tentukan sebagai berikut:
SQLite, operator penggabungan "||"
Operator ini digunakan untuk menggabungkan satu atau lebih nilai literal atau kolom satu sama lain. Ini akan menghasilkan satu string hasil dari semua nilai literal atau kolom yang digabungkan. Sebagai contoh:
PILIH 'Id dengan Nama:' || StudentId || StudentName AS StudentIdWithNameDARI Siswa;
Ini akan digabungkan menjadi alias baru " StudentIdWithName ":
- Nilai string literal " Id with Name: "
- dengan nilai kolom " StudentId " dan
- dengan nilai dari kolom " StudentName "
Operator SQLite CAST:
Operator CAST digunakan untuk mengonversi nilai dari tipe data ke tipe data lain.
Misalnya, jika Anda memiliki nilai numerik yang disimpan sebagai nilai string seperti ini " '12 .5 ' " dan Anda ingin mengubahnya menjadi nilai numerik, Anda dapat menggunakan operator CAST untuk melakukan ini seperti ini " CAST ('12 .5' AS NYATA) ". Atau jika Anda memiliki nilai desimal seperti 12,5, dan Anda hanya perlu mendapatkan bagian bilangan bulat, Anda dapat memasukkannya ke bilangan bulat seperti ini "CAST (12.5 AS INTEGER)".
Contoh
Pada perintah berikut kami akan mencoba mengubah nilai yang berbeda menjadi tipe data lain:
PILIH CAST ('12 .5 'SEBAGAI NYATA) ToReal, CAST (12.5 SEBAGAI INTEGER) SEBAGAI ToInteger;
Ini akan memberi Anda:
Hasilnya adalah sebagai berikut:
- CAST ('12 .5 'AS REAL) - nilai '12 .5' adalah nilai string, itu akan diubah menjadi nilai REAL.
- CAST (12.5 AS INTEGER) - nilai 12.5 adalah nilai desimal, itu akan diubah menjadi nilai integer. Bagian desimal akan dipotong, dan menjadi 12.
Operator Aritmatika SQLite:
Ambil dua atau lebih nilai literal numerik atau kolom numerik dan kembalikan satu nilai numerik. Operator aritmatika yang didukung di SQLite adalah:
|
Contoh:
Dalam contoh berikut, kita akan mencoba lima operator aritmatika 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 kami menggunakan pernyataan SELECT tanpa klausa FROM di sini. Dan ini diperbolehkan di SQLite selama kita memilih nilai literal.
Operator Perbandingan SQLite
Bandingkan dua operan satu sama lain dan kembalikan benar atau salah sebagai berikut:
|
Perhatikan bahwa, SQLite menyatakan nilai sebenarnya dengan 1 dan nilai salah dengan 0.
Contoh:
PILIH10 <6 SEBAGAI '<', 10 <= 6 SEBAGAI '<=',10> 6 AS '>', 10> = 6 AS '> =',10 = 6 SEBAGAI '=', 10 == 6 SEBAGAI '==',10! = 6 AS '! =', 10 <> 6 AS '<>';
Ini akan memberikan sesuatu seperti ini:
Operator Pencocokan Pola SQLite
" LIKE " - digunakan untuk pencocokan pola. Menggunakan " Suka ", Anda dapat mencari nilai yang cocok dengan pola yang ditentukan menggunakan karakter pengganti.
Operan di sebelah kiri dapat berupa nilai literal string atau kolom string. Polanya dapat ditentukan sebagai berikut:
- Berisi pola. Misalnya, StudentName LIKE '% a%' - ini akan mencari nama siswa yang mengandung huruf "a" di posisi manapun di kolom StudentName.
- Mulailah dengan polanya. Misalnya, " StudentName LIKE 'a%' " - cari nama siswa yang dimulai dengan huruf "a".
- Berakhir dengan pola. Misalnya, " StudentName LIKE '% a' " - Cari nama siswa yang diakhiri dengan huruf "a".
- Mencocokkan salah satu karakter dalam string menggunakan huruf garis bawah "_". Misalnya, " StudentName LIKE 'J___' " - Cari nama siswa yang panjangnya 4 karakter. Ini harus dimulai dengan huruf "J" dan dapat memiliki tiga karakter lagi setelah huruf "J".
Contoh pencocokan pola:
- Dapatkan nama Siswa yang dimulai dengan huruf 'j':
PILIH StudentName DARI Students WHERE StudentName LIKE 'j%';
Hasil:
- Dapatkan nama siswa diakhiri dengan huruf 'y':
PILIH StudentName FROM Students WHERE StudentName LIKE '% y';
Hasil:
- Dapatkan nama siswa yang mengandung huruf 'n':
PILIH StudentName DARI Siswa DI MANA StudentName SUKA '% n%';
Hasil:
"GLOB" - setara dengan operator LIKE, tetapi GLOB peka huruf besar / kecil, tidak seperti operator LIKE. Misalnya, dua perintah berikut akan memberikan hasil yang berbeda:
PILIH 'Jack' GLOB 'j%';PILIH 'Jack' LIKE 'j%';
Ini akan memberi Anda:
- Pernyataan pertama mengembalikan 0 (salah) karena operator GLOB peka huruf besar / kecil, jadi 'j' tidak sama dengan 'J'. Namun, pernyataan kedua akan mengembalikan 1 (benar) karena operator LIKE peka huruf besar kecil, jadi 'j' sama dengan 'J'.
Operator lain:
SQLite DAN
Operator logika yang menggabungkan satu atau lebih ekspresi. Ini akan mengembalikan nilai benar, hanya jika semua ekspresi menghasilkan nilai "benar". Namun, ini akan mengembalikan nilai salah hanya jika semua ekspresi menghasilkan nilai "salah".
Contoh:
Kueri berikut akan mencari siswa yang memiliki StudentId> 5 dan StudentName dimulai dengan huruf N, siswa yang dikembalikan harus memenuhi dua ketentuan:
PILIH *DARI SiswaDI MANA (StudentId> 5) DAN (StudentName LIKE 'N%');
Sebagai hasilnya, pada tangkapan layar di atas, ini hanya akan memberi Anda "Nancy". Nancy adalah satu-satunya siswa yang memenuhi kedua syarat tersebut.
SQLite ATAU
Operator logika yang menggabungkan satu atau beberapa ekspresi, sehingga jika salah satu operator gabungan menghasilkan true, maka itu akan mengembalikan true. Namun, jika semua ekspresi menghasilkan false, itu akan mengembalikan false.
Contoh:
Kueri berikut akan mencari siswa yang memiliki StudentId> 5 atau StudentName dimulai dengan huruf N, siswa yang dikembalikan harus memenuhi setidaknya satu dari ketentuan:
PILIH *DARI SiswaDI MANA (StudentId> 5) ATAU (StudentName LIKE 'N%');
Ini akan memberi Anda:
Sebagai output, pada gambar di atas, ini akan memberi Anda nama siswa dengan huruf "n" di namanya ditambah id siswa yang memiliki nilai> 5.
Seperti yang Anda lihat, hasilnya berbeda dari kueri dengan operator DAN.
SQLite ANTARA
BETWEEN digunakan untuk memilih nilai-nilai yang berada dalam kisaran dua nilai. Misalnya, " X ANTARA Y DAN Z " akan mengembalikan nilai benar (1) jika nilai X berada di antara dua nilai Y dan Z. Jika tidak, nilai akan salah (0). " X ANTARA Y DAN Z " sama dengan " X> = Y DAN X <= Z ", X harus lebih besar dari atau sama dengan Y dan X kurang dari atau sama dengan Z.
Contoh:
Dalam contoh kueri berikut, kami akan menulis kueri untuk mendapatkan siswa dengan nilai Id antara 5 dan 8:
PILIH *DARI SiswaDI MANA StudentId ANTARA 5 DAN 8;
Ini hanya akan memberikan siswa dengan id 5, 6, 7, dan 8:
SQLite IN
Membutuhkan satu operan dan daftar operan. Ini akan mengembalikan true jika nilai operan pertama sama dengan salah satu nilai operan dari daftar. Operator IN mengembalikan true (1) jika daftar operan berisi nilai operan pertama di dalam nilainya. Jika tidak, itu akan mengembalikan false (0).
Seperti ini: " col IN (x, y, z) ". Ini sama dengan " (col = x) atau (col = y) atau (col = z) ".
Contoh:
Kueri berikut akan memilih siswa dengan id 2, 4, 6, 8 saja:
PILIH *DARI SiswaDI MANA StudentId IN (2, 4, 6, 8);
Seperti ini:
Kueri sebelumnya akan memberikan hasil yang sama persis dengan kueri berikut karena sama:
PILIH *DARI SiswaDI MANA (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);
Kedua kueri tersebut memberikan hasil yang tepat. Namun, perbedaan antara kedua query tersebut adalah, pada query pertama kita menggunakan operator "IN". Dalam kueri kedua, kami menggunakan beberapa operator "ATAU".
Operator IN sama dengan menggunakan beberapa operator ATAU. " WHERE StudentId IN (2, 4, 6, 8) " sama dengan " WHERE (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8); "
Seperti ini:
SQLite TIDAK DI
Operand "NOT IN" adalah kebalikan dari operator IN. Tetapi dengan sintaks yang sama; dibutuhkan satu operan dan daftar operan. Ini akan mengembalikan true jika nilai operan pertama tidak sama dengan salah satu nilai operan dari daftar. yaitu, ini akan mengembalikan true (0) jika daftar operan tidak berisi operan pertama. Seperti ini: " col NOT IN (x, y, z) ". Ini sama dengan " (col <> x) AND (col <> y) AND (col <> z) ".
Contoh:
Kueri berikut akan memilih siswa dengan id tidak sama dengan salah satu Id 2, 4, 6, 8 ini:
PILIH *DARI SiswaDI MANA StudentId NOT IN (2, 4, 6, 8);
Seperti ini
Kueri sebelumnya kami memberikan hasil yang tepat sebagai kueri berikut karena mereka setara:
PILIH *DARI SiswaDI MANA (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);
Seperti ini:
Pada tangkapan layar di atas,
Kami menggunakan beberapa operator yang tidak sama "<>" untuk mendapatkan daftar siswa, yang tidak sama dengan tidak satu pun dari Id berikut 2, 4, 6, atau 8. Kueri ini akan mengembalikan semua siswa lain selain daftar Id ini.
SQLite SUDAH ADA
Operator EXISTS tidak menerima operan apa pun; hanya dibutuhkan klausa SELECT setelahnya. Operator EXISTS akan mengembalikan true (1) jika ada baris yang dikembalikan dari klausa SELECT, dan akan mengembalikan false (0) jika tidak ada baris sama sekali yang dikembalikan dari klausa SELECT.
Contoh:
Dalam contoh berikut, kami akan memilih nama departemen, jika id departemen ada di tabel siswa:
PILIH DepartmentNameDARI Departemen AS dDI MANA ADA (PILIH DepartmentId DARI Siswa AS s DI MANA d.DepartmentId = s.DepartmentId);
Ini akan memberi Anda:
Hanya tiga jurusan " IT, Fisika, dan Seni " yang akan dikembalikan. Dan nama departemen " Matematika " tidak akan dikembalikan karena tidak ada siswa di departemen itu, jadi ID departemen tidak ada di tabel siswa. Itu sebabnya operator EXISTS mengabaikan departemen " Matematika ".
SQLite TIDAK
Membalik hasil dari operator sebelumnya yang muncul setelahnya. Sebagai contoh:
- NOT BETWEEN - Ini akan mengembalikan true jika BETWEEN mengembalikan false dan sebaliknya.
- NOT LIKE - Ini akan mengembalikan true jika LIKE mengembalikan false dan sebaliknya.
- NOT GLOB - Ini akan menampilkan true jika GLOB menampilkan false dan sebaliknya.
- NOT EXISTS - Ini akan mengembalikan true jika EXISTS mengembalikan false dan sebaliknya.
Contoh:
Dalam contoh berikut, kita akan menggunakan operator NOT dengan operator EXISTS untuk mendapatkan nama departemen yang tidak ada di tabel Siswa, yang merupakan hasil kebalikan dari operator EXISTS. Jadi, pencarian akan dilakukan melalui DepartmentId yang tidak ada di tabel departemen.
PILIH DepartmentNameDARI Departemen AS dDI MANA TIDAK ADA (PILIH DepartmentIdDARI Siswa AS sDI MANA d.DepartmentId = s.DepartmentId);
Keluaran :
Hanya jurusan " Matematika " yang akan dikembalikan. Karena departemen " Matematika " adalah satu-satunya departemen, yang tidak ada di tabel siswa.
Membatasi dan Memesan
Urutan SQLite
Urutan SQLite adalah untuk mengurutkan hasil Anda dengan satu atau lebih ekspresi. Untuk memesan set hasil, Anda harus menggunakan klausa ORDER BY sebagai berikut:
- Pertama, Anda harus menentukan klausa ORDER BY.
- Klausa ORDER BY harus ditentukan di akhir kueri; hanya klausa LIMIT yang dapat ditentukan setelahnya.
- Tentukan ekspresi untuk mengurutkan datanya, ekspresi ini bisa berupa nama kolom atau ekspresi.
- Setelah ekspresi, Anda dapat menentukan arah pengurutan opsional. Baik DESC, untuk mengurutkan data menurun atau ASC untuk mengurutkan data menaik. Jika Anda tidak menentukan salah satu dari mereka, data akan diurutkan secara menaik.
- Anda dapat menentukan lebih banyak ekspresi menggunakan "," di antara satu sama lain.
Contoh
Dalam contoh berikut, kita akan memilih semua siswa yang diurutkan menurut namanya tetapi dalam urutan menurun, lalu menurut nama departemen dalam urutan menaik:
PILIH s.StudentName, d.DepartmentNameDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdORDER BY d.DepartmentName ASC, s.StudentName DESC;
Ini akan memberi Anda:
- SQLite pertama-tama akan mengurutkan semua siswa berdasarkan nama departemen mereka dalam urutan menaik
- Kemudian untuk setiap nama jurusan, semua mahasiswa di bawah nama jurusan tersebut akan ditampilkan dalam urutan menurun menurut namanya
Batas SQLite:
Anda bisa membatasi jumlah baris yang dikembalikan oleh kueri SQL Anda, dengan menggunakan klausa LIMIT. Misalnya, LIMIT 10 hanya akan memberi Anda 10 baris dan mengabaikan semua baris lainnya.
Dalam klausa LIMIT, Anda dapat memilih jumlah baris tertentu mulai dari posisi tertentu menggunakan klausa OFFSET. Misalnya, " LIMIT 4 OFFSET 4 " akan mengabaikan 4 baris pertama, dan mengembalikan 4 baris mulai dari baris kelima, sehingga Anda akan mendapatkan baris 5,6,7, dan 8.
Perhatikan bahwa klausa OFFSET bersifat opsional, Anda dapat menuliskannya seperti " LIMIT 4, 4 " dan ini akan memberi Anda hasil yang tepat.
Contoh :
Dalam contoh berikut, kami hanya akan mengembalikan 3 siswa mulai dari id siswa 5 menggunakan kueri:
PILIH * DARI BATAS Siswa 4,3;
Ini akan memberi Anda hanya tiga siswa mulai dari baris 5. Jadi itu akan memberi Anda baris dengan StudentId 5, 6, dan 7:
Menghapus duplikat
Jika kueri SQL Anda mengembalikan nilai duplikat, Anda dapat menggunakan kata kunci " DISTINCT " untuk menghapus duplikat tersebut dan mengembalikan nilai yang berbeda. Anda dapat menentukan lebih dari satu kolom setelah pekerjaan kunci DISTINCT.
Contoh:
Kueri berikut akan mengembalikan duplikat "nilai nama departemen": Di sini kita memiliki nilai duplikat dengan nama IT, Fisika dan Seni.
PILIH d.DepartmentNameDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi Anda nilai duplikat untuk nama departemen:
Perhatikan, bagaimana ada nilai duplikat untuk nama departemen. Sekarang, kita akan menggunakan kata kunci DISTINCT dengan kueri yang sama untuk menghapus duplikat tersebut dan hanya mendapatkan nilai unik. Seperti ini:
PILIH DISTINCT d.DepartmentNameDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi Anda hanya tiga nilai unik untuk kolom nama departemen:
Agregat
Agregat SQLite adalah fungsi bawaan yang ditentukan dalam SQLite yang akan mengelompokkan beberapa nilai dari beberapa baris menjadi satu nilai.
Berikut adalah agregat yang didukung oleh SQLite:
SQLite AVG ()
Mengembalikan rata-rata untuk semua nilai x.
Contoh:
Dalam contoh berikut, kita akan mendapatkan nilai rata-rata yang diperoleh siswa dari semua ujian:
PILIH AVG (Mark) DARI Tanda;
Ini akan memberi Anda nilai "18.375":
Hasil ini berasal dari penjumlahan semua nilai mark dibagi dengan hitungannya.
COUNT () - COUNT (X) atau COUNT (*)
Mengembalikan jumlah total berapa kali nilai x muncul. Dan berikut beberapa opsi yang dapat Anda gunakan dengan COUNT:
- JUMLAH (x): Menghitung hanya nilai x, di mana x adalah nama kolom. Ini akan mengabaikan nilai NULL.
- JUMLAH (*): Hitung semua baris dari semua kolom.
- COUNT (DISTINCT x): Anda dapat menentukan kata kunci DISTINCT sebelum x yang akan mendapatkan jumlah nilai x yang berbeda.
Contoh
Dalam contoh berikut, kita akan mendapatkan jumlah total Departemen dengan COUNT (DepartmentId), COUNT (*), dan COUNT (DISTINCT DepartmentId) dan perbedaannya:
PILIH JUMLAH (ID Departemen), JUMLAH (DISTINCT DepartmentId), JUMLAH (*) DARI Siswa;
Ini akan memberi Anda:
Sebagai berikut:
- COUNT (DepartmentId) akan memberi Anda jumlah semua id departemen, dan itu akan mengabaikan nilai null.
- JUMLAH (DISTINCT DepartmentId) memberi Anda nilai DepartmentId yang berbeda, yaitu hanya 3. Yang merupakan tiga nilai berbeda dari nama departemen. Perhatikan bahwa ada 8 nilai nama jurusan pada nama mahasiswa. Namun hanya tiga nilai yang berbeda yaitu Matematika, IT, dan Fisika.
- COUNT (*) menghitung banyaknya baris pada tabel siswa yaitu 10 baris untuk 10 siswa.
GROUP_CONCAT () - GROUP_CONCAT (X) atau GROUP_CONCAT (X, Y)
Fungsi agregat GROUP_CONCAT menggabungkan beberapa nilai menjadi satu nilai dengan koma untuk memisahkannya. Ini memiliki opsi berikut:
- GROUP_CONCAT (X): Ini akan menggabungkan semua nilai x menjadi satu string, dengan koma "," digunakan sebagai pemisah antar nilai. Nilai NULL akan diabaikan.
- GROUP_CONCAT (X, Y): Ini akan menggabungkan nilai x menjadi satu string, dengan nilai y digunakan sebagai pemisah antara setiap nilai, bukan pemisah default ','. Nilai NULL juga akan diabaikan.
- GROUP_CONCAT (DISTINCT X): Ini akan menggabungkan semua nilai x yang berbeda menjadi satu string, dengan koma "," digunakan sebagai pemisah antar nilai. Nilai NULL akan diabaikan.
Contoh GROUP_CONCAT (DepartmentName)
Kueri berikut akan menggabungkan semua nilai nama departemen dari siswa dan tabel departemen menjadi satu string yang dipisahkan koma. Jadi, alih-alih mengembalikan daftar nilai, satu nilai di setiap baris. Ini hanya akan mengembalikan satu nilai pada satu baris, dengan semua nilai dipisahkan koma:
PILIH GROUP_CONCAT (d.DepartmentName)DARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi Anda:
Ini akan memberi Anda daftar nilai nama 8 departemen yang digabungkan menjadi satu string yang dipisahkan koma.
GROUP_CONCAT (DISTINCT DepartmentName) Contoh
Kueri berikut akan menggabungkan nilai-nilai berbeda dari nama departemen dari tabel mahasiswa dan departemen menjadi satu string yang dipisahkan koma:
PILIH GROUP_CONCAT (DISTINCT d.DepartmentName)DARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi Anda:
Perhatikan bagaimana hasilnya berbeda dari hasil sebelumnya; hanya tiga nilai yang dikembalikan yang merupakan nama departemen yang berbeda, dan nilai duplikat telah dihapus.
GROUP_CONCAT (DepartmentName, '&') Contoh
Kueri berikut akan menggabungkan semua nilai kolom nama departemen dari tabel mahasiswa dan departemen menjadi satu string, tetapi dengan karakter '&', bukan koma sebagai pemisah:
SELECT GROUP_CONCAT (d.DepartmentName, '&')DARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
Ini akan memberi Anda:
Perhatikan bagaimana karakter "&" digunakan sebagai pengganti karakter default "," untuk memisahkan nilai.
SQLite MAX () & MIN ()
MAX (X) mengembalikan Anda nilai tertinggi dari nilai X. MAX akan mengembalikan nilai NULL jika semua nilai x adalah null. Sedangkan MIN (X) mengembalikan Anda nilai terkecil dari nilai X. MIN akan mengembalikan nilai NULL jika semua nilai X adalah null.
Contoh
Dalam query berikut, kita akan menggunakan fungsi MIN dan MAX untuk mendapatkan nilai tertinggi dan nilai terendah dari tabel " Marks ":
PILIH MAX (Mark), MIN (Mark) FROM Marks;
Ini akan memberi Anda:
SQLite SUM (x), Total (x)
Keduanya akan mengembalikan jumlah dari semua nilai x. Tetapi mereka berbeda dalam hal berikut:
- SUM akan mengembalikan null jika semua nilainya nol, tetapi Total akan mengembalikan 0.
- TOTAL selalu mengembalikan nilai floating point. SUM mengembalikan nilai integer jika semua nilai x adalah integer. Namun, jika nilainya bukan bilangan bulat, itu akan mengembalikan nilai floating point.
Contoh
Dalam query berikut, kita akan menggunakan SUM dan total untuk mendapatkan jumlah dari semua tanda di tabel " Marks ":
PILIH JUMLAH (Mark), TOTAL (Mark) DARI Marks;
Ini akan memberi Anda:
Seperti yang Anda lihat, TOTAL selalu mengembalikan titik mengambang. Tapi SUM mengembalikan nilai integer karena nilai di kolom "Mark" mungkin dalam integer.
Perbedaan antara contoh SUM dan TOTAL:
Dalam kueri berikut kami akan menunjukkan perbedaan antara SUM dan TOTAL ketika mereka mendapatkan nilai SUM dari NULL:
PILIH JUMLAH (Mark), TOTAL (Mark) DARI Marks WHERE TestId = 4;
Ini akan memberi Anda:
Perhatikan bahwa tidak ada tanda untuk TestId = 4, jadi ada nilai null untuk pengujian itu. SUM mengembalikan nilai null sebagai kosong, sedangkan TOTAL mengembalikan 0.
Kelompok OLEH
Klausa GROUP BY digunakan untuk menentukan satu atau lebih kolom yang akan digunakan untuk mengelompokkan baris ke dalam grup. Baris-baris dengan nilai yang sama akan dikumpulkan (diatur) bersama menjadi beberapa kelompok.
Untuk kolom lain yang tidak disertakan dalam grup menurut kolom, Anda bisa menggunakan fungsi agregat untuk itu.
Contoh:
Kueri berikut akan memberi Anda jumlah total siswa yang hadir di setiap departemen.
PILIH d.DepartmentName, COUNT (s.StudentId) sebagai StudentsCountDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdKELOMPOK OLEH d. Nama departemen;
Ini akan memberi Anda:
Klausa GROUPBY DepartmentName akan mengelompokkan semua siswa ke dalam grup satu untuk setiap nama departemen. Untuk setiap kelompok "departemen", itu akan menghitung siswa di dalamnya.
Klausa HAVING
Jika Anda ingin memfilter grup yang dikembalikan oleh klausa GROUP BY, Anda dapat menentukan klausa "HAVING" dengan ekspresi setelah GROUP BY. Ekspresi tersebut akan digunakan untuk memfilter grup ini.
Contoh
Dalam kueri berikut, kami akan memilih departemen yang hanya memiliki dua siswa di dalamnya:
PILIH d.DepartmentName, COUNT (s.StudentId) sebagai StudentsCountDARI Siswa AS sINNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentIdKELOMPOK OLEH d. Nama departemenHAVING COUNT (s.StudentId) = 2;
Ini akan memberi Anda:
Klausa HAVING COUNT (S.StudentId) = 2 akan memfilter grup yang dikembalikan dan hanya mengembalikan grup yang berisi tepat dua siswa di dalamnya. Dalam kasus kami, departemen Seni memiliki 2 siswa, sehingga ditampilkan di keluaran.
Kueri & Subkueri SQLite
Di dalam kueri apa pun, Anda bisa menggunakan kueri lain baik di SELECT, INSERT, DELETE, UPDATE atau di dalam subkueri lain.
Kueri bertingkat ini disebut subkueri. Sekarang kita akan melihat beberapa contoh penggunaan subkueri di klausa SELECT. Namun, dalam tutorial Memodifikasi Data, kita akan melihat bagaimana kita dapat menggunakan subkueri dengan pernyataan INSERT, DELETE, dan UPDATE.
Menggunakan subquery dalam contoh klausa FROM
Dalam kueri berikut kami akan menyertakan subkueri di dalam klausa FROM:
PILIHs.StudentName, t.MarkDARI Siswa AS sGABUNG DALAM(PILIH StudentId, TandaiDARI Tes AS tINNER JOIN Tanda AS m ON t.TestId = m.TestId) ON s.StudentId = t.StudentId;
Kueri:
PILIH StudentId, TandaiDARI Tes AS tINNER JOIN Tanda AS m ON t.TestId = m.TestId
Kueri di atas disebut subkueri di sini karena berada di dalam klausa FROM. Perhatikan bahwa kami memberinya nama alias "t" sehingga kami dapat merujuk ke kolom yang dikembalikan darinya dalam kueri.
Kueri ini akan memberi Anda:
Jadi dalam kasus kami,
- s.StudentName dipilih dari kueri utama yang memberikan nama siswa dan
- t.Mark dipilih dari subquery; yang memberi nilai yang diperoleh masing-masing siswa ini
Menggunakan subquery dalam contoh klausa WHERE
Dalam kueri berikut kami akan menyertakan subkueri di klausa WHERE:
PILIH DepartmentNameDARI Departemen AS dDI MANA TIDAK ADA (PILIH DepartmentIdDARI Siswa AS sDI MANA d.DepartmentId = s.DepartmentId);
Kueri:
PILIH DepartmentIdDARI Siswa AS sDI MANA d.DepartmentId = s.DepartmentId
Kueri di atas disebut subkueri di sini karena berada di klausa WHERE. Subquery akan mengembalikan nilai DepartmentId yang akan digunakan oleh operator TIDAK ADA.
Kueri ini akan memberi Anda:
Dalam pertanyaan di atas, kami telah memilih departemen yang tidak memiliki siswa yang terdaftar di dalamnya. Yang merupakan jurusan "Matematika" di sini.
Atur Operasi - UNION, Intersect
SQLite mendukung operasi SET berikut:
UNION & UNION SEMUA
Ini menggabungkan satu atau lebih set hasil (sekelompok baris) yang dikembalikan dari beberapa pernyataan SELECT menjadi satu set hasil.
UNION akan mengembalikan nilai yang berbeda. Namun, UNION ALL tidak akan dan akan menyertakan duplikat.
Perhatikan bahwa nama kolom akan menjadi nama kolom yang ditentukan dalam pernyataan SELECT pertama.
Contoh UNION
Dalam contoh berikut, kita akan mendapatkan daftar DepartmentId dari tabel siswa dan daftar DepartmentId dari tabel departemen di kolom yang sama:
PILIH DepartmentId SEBAGAI DepartmentIdUnioned FROM StudentsPERSATUANPILIH DepartmentId DARI Departemen;
Ini akan memberi Anda:
Kueri hanya mengembalikan 5 baris yang merupakan nilai id departemen yang berbeda. Perhatikan nilai pertama yang merupakan nilai nol.
Contoh SQLite UNION ALL
Dalam contoh berikut, kita akan mendapatkan daftar DepartmentId dari tabel siswa dan daftar DepartmentId dari tabel departemen di kolom yang sama:
PILIH DepartmentId SEBAGAI DepartmentIdUnioned FROM StudentsUNI SEMUAPILIH DepartmentId DARI Departemen;
Ini akan memberi Anda:
Kueri akan mengembalikan 14 baris, 10 baris dari tabel siswa, dan 4 dari tabel departemen. Perhatikan bahwa, ada duplikat dalam nilai yang dikembalikan. Juga, perhatikan bahwa nama kolom adalah yang ditentukan dalam pernyataan SELECT pertama.
Sekarang, mari kita lihat bagaimana UNION semua akan memberikan hasil yang berbeda jika kita mengganti UNION ALL dengan UNION:
INTERSECT SQLite
Mengembalikan nilai yang ada di kedua kumpulan hasil gabungan. Nilai yang ada di salah satu kumpulan hasil gabungan akan diabaikan.
Contoh
Dalam query berikut, kita akan memilih nilai DepartmentId yang ada di tabel Mahasiswa dan Departemen di kolom DepartmentId:
PILIH DepartmentId DARI SiswaMemotongPILIH DepartmentId DARI Departemen;
Ini akan memberi Anda:
Kueri hanya mengembalikan tiga nilai 1, 2, dan 3. Yang merupakan nilai yang ada di kedua tabel.
Namun, nilai null dan 4 tidak dimasukkan karena nilai null hanya ada di tabel siswa dan bukan di tabel departemen. Dan nilai 4 ada di tabel departemen dan bukan di tabel siswa.
Itulah mengapa nilai NULL dan 4 diabaikan dan tidak disertakan dalam nilai yang dikembalikan.
KECUALI
Misalkan jika Anda memiliki dua daftar baris, list1 dan list2, dan Anda hanya ingin baris dari list1 yang tidak ada di list2, Anda dapat menggunakan klausa "KECUALI". Klausa KECUALI membandingkan dua daftar dan mengembalikan baris yang ada di list1 dan tidak ada di list2.
Contoh
Dalam kueri berikut, kami akan memilih nilai DepartmentId yang ada di tabel departemen dan tidak ada di tabel siswa:
PILIH DepartmentId DARI DepartemenKECUALIPILIH DepartmentId DARI Siswa;
Ini akan memberi Anda:
Kueri hanya mengembalikan nilai 4. Yang merupakan satu-satunya nilai yang ada di tabel departemen, dan tidak ada di tabel siswa.
Penanganan NULL
Nilai " NULL " adalah nilai khusus di SQLite. Ini digunakan untuk mewakili nilai yang tidak diketahui atau nilai yang hilang. Perhatikan bahwa nilai nol sama sekali berbeda dari nilai " 0 " atau nilai kosong "". Karena 0 dan nilai kosong adalah nilai yang diketahui, nilai null tidak diketahui.
Nilai NULL memerlukan penanganan khusus di SQLite, sekarang kita akan melihat bagaimana menangani nilai NULL.
Cari nilai NULL
Anda tidak dapat menggunakan operator persamaan normal (=) untuk mencari nilai null. Misalnya, kueri berikut mencari siswa yang memiliki nilai DepartmentId nol:
SELECT * FROM Students WHERE DepartmentId = NULL;
Kueri ini tidak akan memberikan hasil apa pun:
Karena nilai NULL tidak sama dengan nilai lain termasuk nilai null itu sendiri, itulah mengapa tidak mengembalikan hasil apa pun.
- Namun, untuk membuat kueri berfungsi, Anda harus menggunakan operator "IS NULL" untuk mencari nilai null sebagai berikut:
PILIH * DARI Siswa DI MANA DepartmentId IS NULL;
Ini akan memberi Anda:
Kueri akan mengembalikan siswa yang memiliki nilai DepartmentId nol.
- Jika Anda ingin mendapatkan nilai yang bukan null, maka Anda harus menggunakan operator " IS NOT NULL " seperti ini:
PILIH * DARI Siswa DI MANA DepartmentId TIDAK NIHIL;
Ini akan memberi Anda:
Kueri akan mengembalikan siswa yang tidak memiliki nilai DepartmentId NULL.
Hasil bersyarat
Jika Anda memiliki daftar nilai dan ingin memilih salah satunya berdasarkan beberapa kondisi. Untuk itu, syarat nilai tertentu itu harus benar agar bisa dipilih.
Ekspresi CASE akan mengevaluasi daftar ketentuan ini untuk semua nilai. Jika kondisinya benar, itu akan mengembalikan nilai itu.
Misalnya, jika Anda memiliki kolom "Nilai" dan Anda ingin memilih nilai teks berdasarkan nilai kelas sebagai berikut:
- "Luar biasa" jika nilainya lebih tinggi dari 85.
- "Sangat Baik" jika nilainya antara 70 dan 85.
- "Baik" jika nilainya antara 60 dan 70.
Kemudian Anda dapat menggunakan ekspresi CASE untuk melakukannya.
Ini dapat digunakan untuk mendefinisikan beberapa logika dalam klausa SELECT sehingga Anda dapat memilih hasil tertentu bergantung pada kondisi tertentu seperti pernyataan if misalnya.
Operator CASE dapat didefinisikan dengan sintaks yang berbeda sebagai berikut:
- Anda dapat menggunakan kondisi yang berbeda:
KASUSWHEN condition1 THEN result1WHEN condition2 THEN result2KETIKA kondisi3 MAKA result3… HASIL LAINNYAAKHIR
- Atau, Anda hanya dapat menggunakan satu ekspresi dan menempatkan nilai yang mungkin berbeda untuk dipilih:
Ekspresi CASEWHEN value1 THEN result1WHEN value2 THEN result2WHEN value3 THEN result3… ELSE restulnAKHIR
Perhatikan bahwa klausa ELSE bersifat opsional.
Contoh
Dalam contoh berikut, kita akan menggunakan ekspresi CASE dengan nilai NULL di kolom Id departemen di tabel Students untuk menampilkan teks 'No Department' sebagai berikut:
PILIHNama siswa,KASUSKETIKA DepartmentId NULL MAKA 'Tidak Ada Departemen'Departemen ELSEIdAKHIR SEBAGAI DepartmentIdDARI Siswa;
- Operator CASE akan memeriksa nilai DepartmentId apakah nilainya null atau tidak.
- Jika itu adalah nilai NULL, maka itu akan memilih nilai literal 'No Department' daripada nilai DepartmentId.
- Jika bukan nilai null, maka itu akan memilih nilai kolom DepartmentId.
Ini akan memberi Anda output seperti yang ditunjukkan di bawah ini:
Ekspresi tabel umum
Ekspresi tabel umum (CTE) adalah subkueri yang ditentukan di dalam pernyataan SQL dengan nama tertentu.
Ini memiliki keunggulan dibandingkan subkueri karena didefinisikan dari pernyataan SQL dan akan membuat kueri lebih mudah dibaca, dipelihara, dan dipahami.
Ekspresi tabel umum dapat didefinisikan dengan meletakkan klausa WITH di depan pernyataan SELECT sebagai berikut:
DENGAN CTEnameSEBAGAI(Pernyataan SELECT)PILIH, PERBARUI, SISIPKAN, atau perbarui pernyataan di sini DARI CTE
" CTEname " adalah nama apa pun yang dapat Anda berikan untuk CTE, Anda dapat menggunakannya untuk merujuk nanti. Perhatikan bahwa, Anda dapat menentukan pernyataan SELECT, UPDATE, INSERT, atau DELETE pada CTE
Sekarang, mari kita lihat contoh bagaimana menggunakan CTE di klausa SELECT.
Contoh
Dalam contoh berikut, kami akan mendefinisikan CTE dari pernyataan SELECT, dan kemudian kami akan menggunakannya nanti di kueri lain:
DENGAN AllDepartmentsSEBAGAI(PILIH DepartmentId, DepartmentNameDARI Departemen)PILIHs.StudentId,s.StudentName,a.DepartmentNameDARI Siswa AS sINNER JOIN AllDepartments SEBAGAI ON s.DepartmentId = a.DepartmentId;
Dalam kueri ini, kami mendefinisikan CTE dan memberinya nama " AllDepartments ". CTE ini ditentukan dari kueri SELECT:
PILIH DepartmentId, DepartmentNameDARI Departemen
Kemudian setelah kita mendefinisikan CTE kita menggunakannya dalam query SELECT yang muncul setelahnya.
Perhatikan bahwa, ekspresi tabel umum tidak memengaruhi output kueri. Ini adalah cara untuk menentukan tampilan logis atau subkueri untuk menggunakannya kembali dalam kueri yang sama. Ekspresi tabel umum seperti variabel yang Anda deklarasikan, dan gunakan kembali sebagai subkueri. Hanya pernyataan SELECT yang memengaruhi keluaran kueri.
Kueri ini akan memberi Anda:
Kueri lanjutan
Kueri tingkat lanjut adalah kueri yang berisi gabungan kompleks, subkueri, dan beberapa agregat. Di bagian berikut, kita akan melihat contoh kueri tingkat lanjut:
Dimana kita mendapatkan,
- Nama departemen dengan semua siswa untuk setiap departemen
- Nama siswa dipisahkan dengan koma dan
- Menunjukkan departemen yang memiliki setidaknya tiga siswa di dalamnya
PILIHd.DepartmentName,COUNT (s.StudentId) StudentsCount,GROUP_CONCAT (StudentName) AS SiswaDARI Departemen AS dINNER JOIN Students AS s ON s.DepartmentId = d.DepartmentIdGRUP OLEH d.DepartmentNameMEMILIKI COUNT (s.StudentId)> = 3;
Kami menambahkan klausa JOIN untuk mendapatkan DepartmentName dari tabel Departemen. Setelah itu kami menambahkan klausa GROUP BY dengan dua fungsi agregat:
- "COUNT" untuk menghitung siswa untuk setiap grup departemen.
- GROUP_CONCAT untuk menggabungkan siswa untuk setiap grup dengan dipisahkan koma dalam satu string.
- Setelah GROUP BY, kami menggunakan klausa HAVING untuk memfilter departemen dan hanya memilih departemen yang memiliki minimal 3 siswa.
Hasilnya adalah sebagai berikut:
Ringkasan:
Ini adalah pengantar untuk menulis kueri SQLite dan dasar-dasar kueri database dan bagaimana Anda bisa memfilter data yang dikembalikan. Sekarang Anda dapat, menulis kueri SQLite Anda sendiri.