SQLite Kueri: Pilih, Dimana, LIMIT, OFFSET, Hitung, Kelompokkan Berdasarkan

Untuk menulis kueri SQL dalam sebuah SQLite database, Anda harus mengetahui cara kerja klausa SELECT, FROM, WHERE, GROUP BY, ORDER BY, dan LIMIT serta cara menggunakannya.

Selama tutorial ini, Anda akan mempelajari cara menggunakan klausa ini dan cara menulisnya SQLite klausa.

Membaca Data dengan Pilih

Klausa SELECT adalah pernyataan utama yang Anda gunakan untuk menanyakan sebuah SQLite basis data. Dalam klausa SELECT, Anda menyatakan apa yang harus dipilih. Namun sebelum klausa pilih, 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 beberapa tabel atau subquery untuk memilih data, seperti yang akan kita lihat nanti di tutorial.

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

Langkah 1) Pada langkah ini,

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

Membaca Data dengan Pilih

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

Membaca Data dengan Pilih

Sekarang Anda siap menjalankan semua jenis kueri pada database.

Dalam klausa SELECT, Anda tidak hanya dapat memilih nama kolom, tetapi Anda memiliki banyak opsi lain untuk menentukan apa yang akan dipilih. Sebagai berikut:

SELECT *

Perintah ini akan memilih semua kolom dari semua tabel yang direferensikan (atau subkueri) dalam klausa FROM. Misalnya:

SELECT * 
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Ini akan memilih semua kolom dari tabel siswa dan tabel departemen:

Membaca Data dengan Pilih

PILIH nama tabel.*

Ini akan memilih semua kolom hanya dari tabel “nama tabel”. Misalnya:

SELECT Students.*
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Ini akan memilih semua kolom dari tabel siswa saja:

Membaca Data dengan Pilih

Nilai literal

Nilai literal adalah nilai konstan yang dapat ditentukan dalam pernyataan pilih. Anda dapat menggunakan nilai literal secara normal dengan cara yang sama seperti Anda menggunakan nama kolom dalam 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.
  • Literal string – String apa pun 'AS', 'ini adalah contoh teks', … dll.
  • BATAL – nilai BATAL.
  • Current_TIME – Ini akan memberi Anda waktu saat ini.
  • CURRENT_DATE – ini akan memberi Anda tanggal saat ini.

Ini bisa 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 “USA”, Anda dapat melakukan ini:

SELECT *, 'USA' AS Country FROM Students;

Ini akan memberi Anda semua kolom siswa, ditambah kolom baru “Negara” seperti ini:

Membaca Data dengan Pilih

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 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 Nama Siswa untuk dikembalikan dengan “Nama Siswa” dan bukan “Nama Siswa”, Anda dapat memberinya alias seperti ini:

SELECT StudentName AS 'Student Name' FROM Students;

Ini akan memberi Anda nama siswa dengan nama “Nama Siswa” dan bukan “Nama Siswa” seperti ini:

Nama dan Alias

Perhatikan bahwa, nama kolomnya tetap “Nama siswa“; kolom Nama Siswa masih sama, tidak diubah aliasnya.

Alias ​​​​tidak akan mengubah nama kolom; itu hanya akan mengubah nama tampilan di klausa SELECT.

Perhatikan juga bahwa, kata kunci “AS” adalah opsional, Anda dapat memasukkan nama alias tanpa itu, kira-kira seperti ini:

SELECT StudentName 'Student Name' FROM Students;

Dan itu akan memberi Anda keluaran yang sama persis dengan kueri sebelumnya:

Nama dan Alias

Anda juga bisa memberikan alias tabel, bukan hanya kolom. Dengan kata kunci yang sama “AS”. Misalnya, Anda dapat melakukan ini:

SELECT s.* FROM Students AS s;

Ini akan memberi Anda semua kolom di tabel Siswa:

Nama dan Alias

Ini bisa sangat berguna jika Anda menggabungkan lebih dari satu tabel; daripada mengulang nama tabel lengkap dalam kueri, Anda dapat memberi setiap tabel nama alias singkat. Misalnya, dalam kueri berikut:

SELECT Students.StudentName, Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Query ini akan memilih setiap nama mahasiswa dari tabel “Mahasiswa” beserta nama jurusannya dari tabel “Departemen”:

Nama dan Alias

Namun, kueri yang sama dapat ditulis seperti ini:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;
  • Kita memberi nama alias “s” pada tabel Siswa dan nama alias “d” untuk tabel departemen.
  • Lalu, alih-alih menggunakan nama tabel lengkap, kami menggunakan aliasnya untuk merujuk ke tabel tersebut.
  • INNER JOIN menggabungkan dua tabel atau lebih menggunakan suatu kondisi. Dalam contoh kita, kita menggabungkan tabel Siswa dengan tabel Departemen dengan kolom DepartmentId. Ada juga penjelasan mendalam tentang INNER JOIN di bagian “SQLite Bergabung” tutorial.

Ini akan memberi Anda keluaran persis seperti kueri sebelumnya:

Nama dan Alias

MANA

Menulis query 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 Permintaan SQL. Beginilah cara kerja klausa WHERE:

  • Dalam klausa WHERE, Anda dapat menentukan “ekspresi”.
  • Ekspresi tersebut akan dievaluasi untuk setiap baris yang dikembalikan dari tabel yang ditentukan dalam klausa FROM.
  • Ekspresi tersebut akan dievaluasi sebagai ekspresi Boolean, dengan hasil benar, salah, atau nol.
  • Kemudian hanya baris yang ekspresinya dievaluasi dengan nilai sebenarnya yang akan dikembalikan, dan baris dengan hasil salah atau nol akan diabaikan dan tidak disertakan dalam kumpulan hasil.
  • Untuk memfilter kumpulan hasil menggunakan klausa WHERE, Anda harus menggunakan ekspresi dan operator.

Daftar operator di SQLite dan cara menggunakannya

Pada bagian berikut, kami akan menjelaskan cara 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 dalam klausa SELECT dan klausa WHERE.

Dalam contoh berikut, kita akan mencoba ekspresi dan operator dalam klausa select dan klausa WHERE. Untuk menunjukkan cara kerjanya.

Ada berbagai jenis ekspresi dan operator yang dapat Anda tentukan sebagai berikut:

SQLite operator penggabungan “||”

Operator ini digunakan untuk menggabungkan satu atau lebih nilai atau kolom literal satu sama lain. Ini akan menghasilkan satu string hasil dari semua nilai atau kolom literal yang digabungkan. Misalnya:

SELECT 'Id with Name: '|| StudentId || StudentName AS StudentIdWithName
FROM Students;

Ini akan digabungkan menjadi alias baru “StudentIdWithName"

  • Nilai string literal “Id dengan Nama: "
  • dengan nilai “Identitas Siswa” kolom dan
  • dengan nilai dari “Nama siswa” kolom

SQLite operator penggabungan '||'

SQLite Operator CAST:

Operator CAST digunakan untuk mengonversi nilai dari suatu tipe data ke tipe data lainnya tipe data.

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 melakukannya seperti ini “CAST( '12.5' ​​SEBAGAI NYATA)“. Atau jika Anda memiliki nilai desimal seperti 12.5, dan Anda hanya ingin mendapatkan bagian bilangan bulat, Anda dapat mengubahnya menjadi bilangan bulat seperti ini “CAST(12.5 AS INTEGER)”.

Example

Dalam perintah berikut kita akan mencoba mengonversi nilai yang berbeda ke tipe data lain:

SELECT CAST('12.5' AS REAL) ToReal, CAST(12.5 AS INTEGER) AS ToInteger;

Ini akan memberi Anda:

SQLite CAST Operator

Hasilnya adalah sebagai berikut:

  • CAST('12.5' ​​AS REAL) – nilai '12.5' ​​adalah nilai string, akan dikonversi ke nilai REAL.
  • CAST(12.5 AS INTEGER) – nilai 12.5 merupakan nilai desimal, akan diubah menjadi nilai integer. Bagian desimalnya akan terpotong dan menjadi 12.

SQLite Hitung Operatorsi:

Ambil dua atau lebih nilai literal numerik atau kolom numerik dan kembalikan satu nilai numerik. Operator aritmatika yang didukung dalam SQLite adalah:

  • Tambahan “+” – berikan jumlah kedua operan.
  • Pengurangan “-” – mengurangi dua operan dan menghasilkan perbedaan.
  • Perkalian “*” – produk dari dua operan.
  • Pengingat (modulo) “%” – memberikan sisa hasil pembagian satu operan dengan operan kedua.
  • Divisi “/” – mengembalikan hasil bagi dari pembagian operan kiri dengan operan kanan.

Contoh:

Dalam contoh berikut, kita akan mencoba lima operator aritmatika dengan nilai numerik literal yang sama

pilih klausa:

SELECT 25+6, 25-6, 25*6, 25%6, 25/6;

Ini akan memberi Anda:

SQLite Hitung Operatorso

Perhatikan bagaimana kita menggunakan pernyataan SELECT tanpa klausa FROM di sini. Dan ini diperbolehkan masuk SQLite selama kita memilih nilai literal.

SQLite Operator perbandingan

Bandingkan dua operan satu sama lain dan kembalikan nilai benar atau salah sebagai berikut:

  • "<” – mengembalikan nilai true jika operan kiri lebih kecil dari operan kanan.
  • "<=” – mengembalikan nilai true jika operan kiri lebih kecil atau sama dengan operan kanan.
  • ">” – mengembalikan nilai true jika operan kiri lebih besar dari operan kanan.
  • ">=” – mengembalikan nilai benar jika operan kiri lebih besar atau sama dengan operan kanan.
  • "="Dan"==” – mengembalikan nilai true jika kedua operan sama. Perhatikan bahwa kedua operator itu sama, dan tidak ada perbedaan di antara keduanya.
  • "!="Dan"<>” – mengembalikan nilai true jika kedua operan tidak sama. Perhatikan bahwa kedua operator itu sama, dan tidak ada perbedaan di antara keduanya.

Perhatikan bahwa, SQLite menyatakan nilai sebenarnya dengan 1 dan nilai salah dengan 0.

Contoh:

SELECT 
  10<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 memberikan sesuatu seperti ini:

SQLite Perbandingan Operatorso

SQLite Operator Pencocokan Pola

"SEPERTI” – digunakan untuk pencocokan pola. Menggunakan "Seperti“, Anda dapat mencari nilai yang cocok dengan pola yang ditentukan menggunakan wildcard.

Operan di sebelah kiri dapat berupa nilai literal string atau kolom string. Polanya dapat ditentukan sebagai berikut:

  • Berisi pola. Misalnya, Nama Siswa SEPERTI '%a%' – ini akan mencari nama siswa yang mengandung huruf “a” di posisi mana pun pada kolom Nama Siswa.
  • Dimulai dengan polanya. Misalnya, "Nama Siswa SEPERTI 'a%'” – mencari nama siswa yang berawalan huruf “a”.
  • Diakhiri dengan polanya. Misalnya, "Nama Siswa SEPERTI '%a'” – Cari nama siswa yang diakhiri dengan huruf “a”.
  • Mencocokkan karakter tunggal apa pun dalam string menggunakan huruf garis bawah “_”. Misalnya, "Nama Siswa SEPERTI 'J___'” – Mencari nama siswa yang panjangnya 4 karakter. Itu harus dimulai dengan huruf “J” dan dapat memiliki tiga karakter lagi setelah huruf “J”.

Contoh pencocokan pola:

  1. Dapatkan nama Siswa yang dimulai dengan huruf 'j':
    SELECT StudentName FROM Students WHERE StudentName LIKE 'j%';

    Hasil:

    SQLite Pencocokan Pola Operatorso

  2. Dapatkan nama Siswa diakhiri dengan huruf 'y':
    SELECT StudentName FROM Students WHERE StudentName LIKE '%y';

    Hasil:

    SQLite Pencocokan Pola Operatorso

  3. Dapatkan nama Siswa yang mengandung huruf 'n':
    SELECT StudentName FROM Students WHERE StudentName LIKE '%n%';

    Hasil:

    SQLite Pencocokan Pola Operatorso

"GUMPAL" – setara dengan operator LIKE, tetapi GLOB peka huruf besar/kecil, tidak seperti operator LIKE. Misalnya, dua perintah berikut akan memberikan hasil yang berbeda:

SELECT 'Jack' GLOB 'j%';
SELECT 'Jack' LIKE 'j%';

Ini akan memberi Anda:

SQLite Pencocokan Pola Operatorso

  • Pernyataan pertama mengembalikan 0(false) karena operator GLOB peka terhadap huruf besar-kecil, jadi 'j' tidak sama dengan 'J'. Namun, pernyataan kedua akan menghasilkan 1 (benar) karena operator LIKE tidak 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 false hanya jika semua ekspresi menghasilkan nilai “false”.

Contoh:

Kueri berikut akan mencari siswa yang memiliki StudentId > 5 dan StudentName dimulai dengan huruf N, siswa yang dikembalikan harus memenuhi dua kondisi:

SELECT * 
FROM Students 
WHERE (StudentId > 5) AND (StudentName LIKE 'N%');

SQLite DAN Operator

Sebagai hasilnya, pada gambar di atas, ini hanya akan memberi Anda "Nancy". Nancy adalah satu-satunya siswa yang memenuhi kedua syarat tersebut.

SQLite OR

Operator logika yang menggabungkan satu atau lebih ekspresi, sehingga jika salah satu operator gabungan menghasilkan nilai benar, maka operator tersebut akan mengembalikan nilai benar. Namun, jika semua ekspresi menghasilkan nilai salah, maka hasilnya akan salah.

Contoh:

Kueri berikut akan mencari siswa yang memiliki StudentId > 5 atau StudentName dimulai dengan huruf N, siswa yang dikembalikan harus memenuhi setidaknya satu kondisi berikut:

SELECT * 
FROM Students 
WHERE (StudentId > 5) OR (StudentName LIKE 'N%');

Ini akan memberi Anda:

SQLite OR Operator

Sebagai output, pada gambar di atas, ini akan memberi Anda nama siswa yang memiliki huruf “n” di namanya ditambah id siswa yang bernilai>5.

Seperti yang Anda lihat, hasilnya berbeda dengan kueri dengan operator AND.

SQLite ANTARA

BETWEEN digunakan untuk memilih nilai-nilai yang berada dalam rentang dua nilai. Misalnya, "X ANTARA Y DAN Z“akan mengembalikan true (1) jika nilai X berada di antara dua nilai Y dan Z. Jika tidak, akan mengembalikan false (0).X ANTARA Y DAN Z” setara dengan “X >= Y DAN X <= Z“, X harus lebih besar atau sama dengan Y dan X harus lebih kecil atau sama dengan Z.

Contoh:

Pada contoh query berikut, kita akan menulis query untuk mendapatkan siswa dengan nilai Id antara 5 dan 8:

SELECT *
FROM Students
WHERE StudentId BETWEEN 5 AND 8;

Ini hanya akan memberikan siswa dengan id 5, 6, 7, dan 8:

SQLite ANTARA Operator

SQLite IN

Mengambil satu operan dan daftar operan. Operator 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, operator ini akan mengembalikan false (0).

Seperti ini: "kolom DI(x, y, z)“. Ini setara dengan ” (kol=x) atau (kol=y) atau (kol=z) ".

Contoh:

Kueri berikut akan memilih siswa dengan id 2, 4, 6, 8 saja:

SELECT * 
FROM Students
WHERE StudentId IN(2, 4, 6, 8);

Seperti ini:

SQLite IN Operator

Kueri sebelumnya akan memberikan hasil yang sama persis dengan kueri berikut karena keduanya ekuivalen:

SELECT * 
FROM Students
WHERE (StudentId = 2) OR (StudentId =  4) OR (StudentId =  6) OR (StudentId = 8);

Kedua kueri memberikan keluaran yang tepat. Namun yang membedakan kedua query tersebut adalah, query pertama kita menggunakan operator “IN”. Pada kueri kedua, kami menggunakan beberapa operator “ATAU”.

Operator IN setara dengan menggunakan beberapa operator OR. “DIMANA StudentId IN(2, 4, 6, 8)” setara dengan ” DIMANA (StudentId = 2) OR (StudentId = 4) OR (StudentId = 6) OR (StudentId = 8);"

Seperti ini:

SQLite IN Operator

SQLite TIDAK MASUK

Operan “NOT IN” adalah kebalikan dari operator IN. Namun dengan sintaks yang sama; dibutuhkan satu operan dan daftar operan. Ini akan mengembalikan nilai true jika nilai operan pertama tidak sama dengan salah satu nilai operan dari daftar. yaitu, ia akan mengembalikan nilai true (0) jika daftar operan tidak berisi operan pertama. Seperti ini: "kolom TIDAK DALAM(x, y, z)“. Ini setara dengan “(col<>x) DAN (col<>y) DAN (col<>z)".

Contoh:

Kueri berikut akan memilih siswa dengan id yang tidak sama dengan salah satu dari Id ini 2, 4, 6, 8:

SELECT * 
FROM Students
WHERE StudentId NOT IN(2, 4, 6, 8);

Begini

SQLite TIDAK MASUK Operator

Pada query sebelumnya kita memberikan hasil yang sama persis dengan query berikut karena keduanya ekuivalen:

SELECT * 
FROM Students
WHERE (StudentId <> 2) AND (StudentId <> 4) AND (StudentId <> 6) AND (StudentId <> 8);

Seperti ini:

SQLite TIDAK MASUK Operator

Pada tangkapan layar di atas,

Kami menggunakan beberapa operator tidak sama dengan “<>” untuk mendapatkan daftar siswa yang tidak sama dengan salah satu Id berikut, yaitu 2, 4, 6, dan 8. Kueri ini akan mengembalikan semua siswa selain dari daftar Id ini.

SQLite ADA

Operator EXISTS tidak mengambil operan apa pun; hanya dibutuhkan klausa SELECT setelahnya. Operator EXISTS akan mengembalikan nilai 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, kita akan memilih nama departemen, jika id departemen ada di tabel mahasiswa:

SELECT DepartmentName
FROM Departments AS d
WHERE EXISTS (SELECT DepartmentId FROM Students AS s WHERE d.DepartmentId = s.DepartmentId);

Ini akan memberi Anda:

SQLite ADA Operator

Hanya tiga departemen “IT, Fisika, dan Seni" akan dikembalikan. Dan nama departemen “Matematika” tidak akan dikembalikan karena tidak ada mahasiswa pada jurusan tersebut, sehingga Id jurusan tidak ada pada tabel mahasiswa. Itu sebabnya operator EXISTS mengabaikan “Matematika” departemen.

SQLite JANGAN

Revmenghasilkan hasil dari operator sebelumnya yang muncul setelahnya. Misalnya:

  • BUKAN ANTARA – Ini akan mengembalikan nilai benar jika ANTARA mengembalikan salah dan sebaliknya.
  • NOT LIKE – Ini akan mengembalikan nilai true jika LIKE mengembalikan false dan sebaliknya.
  • BUKAN GLOB – Ini akan mengembalikan nilai true jika GLOB mengembalikan false dan sebaliknya.
  • NOT EXISTS – Ini akan mengembalikan nilai 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 Students, yang merupakan hasil kebalikan dari operator EXISTS. Jadi, pencarian akan dilakukan melalui DepartmentId yang tidak ada di tabel department.

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

Keluaran:

SQLite JANGAN Operator

Hanya departemen “Matematika " akan dikembalikan. Karena "Matematika” Jurusan adalah satu-satunya jurusan yang tidak ada dalam tabel siswa.

Membatasi dan Memesan

SQLite Memesan

SQLite Urutannya adalah mengurutkan hasil Anda berdasarkan satu atau lebih ekspresi. Untuk mengurutkan hasil yang ditetapkan, 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 data, ekspresi ini bisa berupa nama kolom atau ekspresi.
  • Setelah ekspresi, Anda dapat menentukan arah pengurutan opsional. Entah DESC untuk mengurutkan data secara descending, atau ASC untuk mengurutkan data secara menaik. Jika Anda tidak menentukannya, data akan diurutkan dalam urutan menaik.
  • Anda dapat menentukan lebih banyak ekspresi menggunakan tanda “,” di antara satu sama lain.

Example

Dalam contoh berikut, kita akan memilih semua mahasiswa yang diurutkan berdasarkan nama mereka namun dalam urutan menurun, kemudian berdasarkan nama departemen dalam urutan menaik:

SELECT s.StudentName, d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
ORDER BY d.DepartmentName ASC , s.StudentName DESC;

Ini akan memberi Anda:

Membatasi dan Memesan

  • 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 berdasarkan namanya

SQLite Membatasi:

Anda dapat 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 sejumlah baris tertentu mulai dari posisi tertentu menggunakan klausa OFFSET. Misalnya, "BATAS 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 menulisnya seperti “BATAS 4, 4” dan itu akan memberi Anda hasil yang tepat.

Example:

Pada contoh berikut, kita akan mengembalikan hanya 3 siswa dimulai dari id siswa 5 dengan menggunakan query:

SELECT * FROM Students LIMIT 4,3;

Ini akan memberi Anda hanya tiga siswa mulai dari baris 5. Jadi ini akan memberi Anda baris dengan StudentId 5, 6, dan 7:

Membatasi dan Memesan

Menghapus duplikat

Jika kueri SQL Anda mengembalikan nilai duplikat, Anda bisa menggunakan “BERBEDA” kata kunci untuk menghapus duplikat tersebut dan mengembalikan nilai yang berbeda. Anda dapat menentukan lebih dari satu kolom setelah kunci DISTINCT berfungsi.

Contoh:

Kueri berikut akan mengembalikan nilai “nama departemen” duplikat: Di sini kita memiliki nilai duplikat dengan nama TI, Fisika, dan Seni.

SELECT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ini akan memberi Anda nilai duplikat untuk nama departemen:

Menghapus Duplikat

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:

SELECT DISTINCT d.DepartmentName
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ini hanya akan memberi Anda tiga nilai unik untuk kolom nama departemen:

Menghapus Duplikat

Agregat

SQLite Agregat adalah fungsi bawaan yang didefinisikan di 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 ini kita akan mendapatkan nilai rata-rata yang diperoleh siswa dari semua ujian:

SELECT AVG(Mark) FROM Marks;

Ini akan memberi Anda nilai “18.375”:

Agregat:SQLite AVG()

Hasil ini diperoleh dari penjumlahan seluruh nilai nilai dibagi dengan hitungannya.

JUMLAH() – JUMLAH(X) atau JUMLAH(*)

Mengembalikan jumlah total berapa kali nilai x muncul. Dan berikut beberapa opsi yang dapat Anda gunakan dengan COUNT:

  • COUNT(x): Hanya menghitung nilai x, dengan x adalah nama kolom. Ini akan mengabaikan nilai NULL.
  • COUNT(*): Menghitung semua baris dari semua kolom.
  • COUNT (DISTINCT x): Anda dapat menentukan kata kunci DISTINCT sebelum x yang akan menghitung nilai x yang berbeda.

Example

Dalam contoh berikut, kita akan mendapatkan jumlah total Departemen dengan COUNT(DepartmentId), COUNT(*), dan COUNT(DISTINCT DepartmentId) dan perbedaannya:

SELECT COUNT(DepartmentId), COUNT(DISTINCT DepartmentId), COUNT(*) FROM Students;

Ini akan memberi Anda:

Agregat:COUNT() – COUNT(X) atau COUNT(*)

Sebagai berikut:

  • COUNT(DepartmentId) akan memberi Anda hitungan semua id departemen, dan akan mengabaikan nilai null.
  • COUNT(DISTINCT DepartmentId) memberi Anda nilai berbeda dari DepartmentId, yang hanya berjumlah 3. Yang merupakan tiga nilai berbeda dari nama departemen. Perhatikan 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 yang berjumlah 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. Fungsi 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 di antara nilai-nilai tersebut. Nilai NULL akan diabaikan.

GROUP_CONCAT(Nama Departemen) Contoh

Kueri berikut akan menggabungkan semua nilai nama departemen dari tabel mahasiswa dan departemen menjadi satu string yang dipisahkan koma. Jadi, alih-alih mengembalikan daftar nilai, satu nilai pada setiap baris. Kueri ini hanya akan mengembalikan satu nilai pada satu baris, dengan semua nilai dipisahkan koma:

SELECT GROUP_CONCAT(d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ini akan memberi Anda:

Agregat:GROUP_CONCAT() – GROUP_CONCAT(X) atau GROUP_CONCAT(X,Y)

Ini akan memberi Anda daftar nilai nama 8 departemen yang digabungkan menjadi satu string yang dipisahkan koma.

GROUP_CONCAT(Nama Departemen BERBEDA) Contoh

Kueri berikut akan menggabungkan nilai-nilai berbeda dari nama departemen dari tabel mahasiswa dan departemen menjadi satu string yang dipisahkan dengan koma:

SELECT GROUP_CONCAT(DISTINCT d.DepartmentName)
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ini akan memberi Anda:

Contoh Agregat:GROUP_CONCAT(DISTINCT DepartmentName).

Perhatikan bagaimana hasilnya berbeda dari hasil sebelumnya; hanya tiga nilai yang dikembalikan yang merupakan nama departemen berbeda, dan nilai duplikat telah dihapus.

GROUP_CONCAT(Nama Departemen,'&') Contoh

Kueri berikut akan menggabungkan semua nilai kolom nama departemen dari tabel mahasiswa dan departemen menjadi satu string, tetapi dengan karakter '&' sebagai pemisah, bukan koma:

SELECT GROUP_CONCAT(d.DepartmentName, '&')
FROM Students AS s
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId;

Ini akan memberi Anda:

Agregat:GROUP_CONCAT(NamaDepartemen,'&') Contoh

Perhatikan bagaimana karakter “&” digunakan sebagai pengganti karakter default “,” untuk memisahkan nilai-nilai.

SQLite MAKS() & MENIT()

MAX(X) mengembalikan Anda nilai tertinggi dari nilai X. MAX akan mengembalikan nilai NULL jika semua nilai x adalah nol. Sedangkan MIN(X) mengembalikan Anda nilai terkecil dari nilai X. MIN akan mengembalikan nilai NULL jika semua nilai X adalah null.

Example

Pada query berikut, kita akan menggunakan fungsi MIN dan MAX untuk mendapatkan nilai tertinggi dan nilai terendah dari “Tanda" meja:

SELECT MAX(Mark), MIN(Mark) FROM Marks;

Ini akan memberi Anda:

Agregat:SQLite MAKS() & MENIT()

SQLite JUMLAH(x), Jumlah(x)

Keduanya akan mengembalikan jumlah semua nilai x. Namun, keduanya 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, maka nilai floating point akan dikembalikan.

Example

Dalam query berikut kita akan menggunakan SUM dan total untuk mendapatkan jumlah semua nilai di “Tanda” tabel:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks;

Ini akan memberi Anda:

Agregat:SQLite JUMLAH(x), Jumlah(x)

Seperti yang Anda lihat, TOTAL selalu mengembalikan floating point. Namun SUM mengembalikan nilai bilangan bulat karena nilai di kolom “Tandai” mungkin berupa bilangan bulat.

Contoh selisih SUM dan TOTAL:

Pada query berikut ini kita akan menunjukkan perbedaan antara SUM dan TOTAL ketika kita mendapatkan JUMLAH nilai NULL:

SELECT SUM(Mark), TOTAL(Mark) FROM Marks WHERE TestId = 4;

Ini akan memberi Anda:

Agregat: Selisih antara SUM dan TOTAL Contoh

Perhatikan bahwa tidak ada nilai untuk TestId = 4, jadi ada nilai null untuk pengujian tersebut. SUM mengembalikan nilai null sebagai kosong, sedangkan TOTAL mengembalikan 0.

Kelompokkan OLEH

Klausa GROUP BY digunakan untuk menentukan satu atau lebih kolom yang akan digunakan untuk mengelompokkan baris ke dalam grup. Baris-baris yang nilainya sama akan dikumpulkan (disusun) menjadi beberapa kelompok.

Untuk kolom lain yang tidak disertakan dalam kelompokkan berdasarkan kolom, Anda dapat menggunakan fungsi agregat untuk kolom tersebut.

Contoh:

Kueri berikut akan memberi Anda jumlah total mahasiswa yang hadir di setiap departemen.

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName;

Ini akan memberi Anda:

Kelompokkan BY: klausa HAVING

Klausa GROUPBY DepartmentName akan mengelompokkan semua siswa ke dalam kelompok satu untuk setiap nama departemen. Untuk setiap kelompok “jurusan”, ia akan menghitung siswa di dalamnya.

klausa MEMILIKI

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.

Example

Pada query berikut, kita akan memilih departemen yang hanya memiliki dua mahasiswa:

SELECT d.DepartmentName, COUNT(s.StudentId) AS StudentsCount
FROM Students AS s 
INNER JOIN Departments AS d ON s.DepartmentId = d.DepartmentId
GROUP BY d. DepartmentName
HAVING COUNT(s.StudentId) = 2;

Ini akan memberi Anda:

Kelompokkan OLEH

Klausa HAVING COUNT(S.StudentId) = 2 akan memfilter grup yang dikembalikan dan hanya mengembalikan grup yang berisi tepat dua siswa di dalamnya. Dalam kasus kita, jurusan Seni memiliki 2 mahasiswa, sehingga ditampilkan di output.

SQLite Kueri & Subkueri

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 dalam 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

Pada query berikut ini kita akan menyertakan subquery di dalam klausa FROM:

SELECT
  s.StudentName, t.Mark
FROM Students AS s 
INNER JOIN
(
   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId
)  ON s.StudentId = t.StudentId;

Pertanyaannya:

   SELECT StudentId, Mark
   FROM Tests AS t
   INNER JOIN Marks AS m ON t.TestId = m.TestId

Kueri di atas disebut subkueri di sini karena bersarang di dalam klausa FROM. Perhatikan bahwa kita memberinya nama alias “t” sehingga kita bisa merujuk ke kolom yang dikembalikan darinya dalam kueri.

Kueri ini akan memberi Anda:

SQLite Query dan Subquery: Menggunakan Subquery dalam klausa FROM

Jadi dalam kasus kami,

  • s.StudentName dipilih dari query utama yang memberikan nama siswa dan
  • t.Mark dipilih dari subkueri; yang memberi nilai yang diperoleh masing-masing siswa tersebut

Menggunakan subquery dalam contoh klausa WHERE

Dalam query berikut ini kita akan menyertakan subquery dalam klausa WHERE:

SELECT DepartmentName
FROM Departments AS d
WHERE NOT EXISTS (SELECT DepartmentId 
                  FROM Students AS s 
                  WHERE d.DepartmentId = s.DepartmentId);

Pertanyaannya:

SELECT DepartmentId 
FROM Students AS s 
WHERE d.DepartmentId = s.DepartmentId

Kueri di atas disebut subkueri di sini karena bersarang di klausa WHERE. Subquery akan mengembalikan nilai DepartmentId yang akan digunakan oleh operator NOT EXISTS.

Kueri ini akan memberi Anda:

SQLite Query dan Subquery: Menggunakan Subquery di Klausa WHERE

Dalam kueri di atas, kami telah memilih departemen yang tidak memiliki siswa yang terdaftar di dalamnya. Yang merupakan departemen “Matematika” di sini.

set Operations – UNION, Intersect

SQLite mendukung operasi SET berikut:

PERSATUAN & PERSATUAN SEMUA

Ini menggabungkan satu atau lebih kumpulan hasil (sekelompok baris) yang dikembalikan dari beberapa pernyataan SELECT menjadi satu kumpulan 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 UNI

Dalam contoh berikut, kita akan mendapatkan daftar DepartmentId dari tabel students dan daftar DepartmentId dari tabel departments di kolom yang sama:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION
SELECT DepartmentId FROM Departments;

Ini akan memberi Anda:

set Operations - Contoh UNION

Kueri hanya mengembalikan 5 baris yang merupakan nilai id departemen yang berbeda. Perhatikan nilai pertama yang merupakan nilai null.

SQLite UNION SEMUA Contoh

Dalam contoh berikut, kita akan mendapatkan daftar DepartmentId dari tabel students dan daftar DepartmentId dari tabel departments di kolom yang sama:

SELECT DepartmentId AS DepartmentIdUnioned FROM Students
UNION ALL
SELECT DepartmentId FROM Departments;

Ini akan memberi Anda:

set Operations - Contoh UNION

Kueri akan menghasilkan 14 baris, 10 baris dari tabel siswa, dan 4 baris dari tabel departemen. Perhatikan bahwa, ada duplikat dalam nilai yang dikembalikan. Perhatikan juga bahwa nama kolom adalah yang ditentukan dalam pernyataan SELECT pertama.

Sekarang, mari kita lihat bagaimana UNION all akan memberikan hasil yang berbeda jika kita mengganti UNION ALL dengan UNION:

SQLite MEMOTONG

Mengembalikan nilai yang ada di kedua kumpulan hasil gabungan. Nilai yang ada di salah satu kumpulan hasil gabungan akan diabaikan.

Example

Pada query berikut, kita akan memilih nilai DepartmentId yang ada di kedua tabel Students dan Departments pada kolom DepartmentId:

SELECT DepartmentId FROM Students
Intersect
SELECT DepartmentId FROM Departments;

Ini akan memberi Anda:

set Operations - INTERSECT

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 terdapat pada tabel mahasiswa dan tidak terdapat pada tabel jurusan. Dan nilai 4 ada di tabel jurusan dan bukan di tabel siswa.

Itu sebabnya 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 menginginkan baris dari list1 yang tidak ada di list2, Anda dapat menggunakan klausa “EXCEPT”. Klausa EXCEPT membandingkan dua daftar dan mengembalikan baris yang ada di list1 dan tidak ada di list2.

Example

Pada query berikut, kita akan memilih nilai DepartmentId yang ada pada tabel departments dan tidak ada pada tabel students:

SELECT DepartmentId FROM Departments
EXCEPT
SELECT DepartmentId FROM Students;

Ini akan memberi Anda:

set Operations - KECUALI

Kueri hanya mengembalikan nilai 4. Yang merupakan satu-satunya nilai yang ada di tabel departemen, dan tidak ada di tabel siswa.

penanganan NULL

The "NULL” nilai adalah nilai khusus di SQLite. Ini digunakan untuk mewakili nilai yang tidak diketahui atau nilainya hilang. Perhatikan bahwa nilai nol sama sekali berbeda dari “0” atau nilai “” kosong. Karena 0 dan nilai kosongnya adalah nilai yang diketahui, namun nilai nolnya tidak diketahui.

Nilai NULL memerlukan penanganan khusus SQLite, sekarang kita akan melihat cara 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 null:

SELECT * FROM Students WHERE DepartmentId = NULL;

Kueri ini tidak akan memberikan hasil apa pun:

Penanganan BATAL

Karena nilai NULL tidak sama dengan nilai lainnya termasuk nilai null itu sendiri, itulah mengapa nilai tersebut tidak memberikan hasil apa pun.

  • Namun, agar kueri berfungsi, Anda harus menggunakan “ADALAH BATAL” operator untuk mencari nilai null sebagai berikut:
SELECT * FROM Students WHERE DepartmentId IS NULL;

Ini akan memberi Anda:

Penanganan BATAL

Kueri akan mengembalikan siswa yang memiliki nilai DepartmentId nol.

  • Jika Anda ingin mendapatkan nilai yang bukan nol, maka Anda harus menggunakan “BUKAN NULL” operatornya seperti ini:
SELECT * FROM Students WHERE DepartmentId IS NOT NULL;

Ini akan memberi Anda:

Penanganan BATAL

Kueri akan mengembalikan siswa yang tidak memiliki nilai NULL DepartmentId.

Hasil bersyarat

Jika Anda memiliki daftar nilai dan ingin memilih salah satunya berdasarkan kondisi tertentu. Untuk itu, syarat nilai tertentu tersebut harus benar agar dapat dipilih.

Ekspresi CASE akan mengevaluasi daftar kondisi ini untuk semua nilai. Jika kondisinya benar, maka nilai tersebut akan dikembalikan.

Misalnya, jika Anda memiliki kolom “Nilai” dan Anda ingin memilih nilai teks berdasarkan nilai nilai seperti berikut:

– “Sangat Baik” 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 tergantung pada kondisi tertentu seperti pernyataan if misalnya.

Operator CASE dapat didefinisikan dengan sintaksis berbeda sebagai berikut:

  1. Anda dapat menggunakan kondisi yang berbeda:
CASE 
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  WHEN condition3 THEN result3
  …
  ELSE resultn
END
  1. Atau, Anda hanya dapat menggunakan satu ekspresi dan memasukkan kemungkinan nilai berbeda untuk dipilih:
CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  WHEN value3 THEN result3
  …
  ELSE restuln 
END

Perhatikan bahwa klausa ELSE bersifat opsional.

Example

Dalam contoh berikut, kita akan menggunakan KASUS ekspresi dengan NULL nilai di kolom Id departemen di tabel Mahasiswa untuk menampilkan teks 'Tidak Ada Departemen' seperti berikut:

SELECT 
  StudentName,
  CASE 
    WHEN DepartmentId IS NULL THEN 'No Department'
    ELSE DepartmentId 
  END AS DepartmentId
FROM Students;
  • Operator CASE akan memeriksa nilai DepartmentId apakah null atau tidak.
  • Jika nilainya NULL, maka ia akan memilih nilai literal 'Tanpa Departemen' dan bukan nilai DepartmentId.
  • Jika bukan nilai null, maka nilai kolom DepartmentId akan dipilih.

Ini akan memberi Anda output seperti yang ditunjukkan di bawah ini:

Hasil Bersyarat

Ekspresi tabel umum

Ekspresi tabel umum (CTE) adalah subkueri yang didefinisikan 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 seperti berikut:

WITH CTEname
AS
(
   SELECT statement
)
SELECT, UPDATE, INSERT, or update statement here FROM CTE

The "nama CTE” adalah nama apa pun yang dapat Anda berikan untuk CTE, Anda dapat menggunakannya untuk merujuknya nanti. Perhatikan bahwa, Anda dapat menentukan pernyataan SELECT, UPDATE, INSERT, atau DELETE pada CTE

Sekarang, mari kita lihat contoh cara menggunakan CTE pada klausa SELECT.

Example

Dalam contoh berikut, kita akan mendefinisikan CTE dari pernyataan SELECT, lalu kita akan menggunakannya nanti pada kueri lain:

WITH AllDepartments
AS
(
  SELECT DepartmentId, DepartmentName
  FROM Departments
)
SELECT 
  s.StudentId,
  s.StudentName,
  a.DepartmentName
FROM Students AS s
INNER JOIN AllDepartments AS a ON s.DepartmentId = a.DepartmentId;

Dalam kueri ini, kami mendefinisikan CTE dan memberinya nama “Semua Departemen“. CTE ini ditentukan dari kueri SELECT:

SELECT DepartmentId, DepartmentName
  FROM Departments

Kemudian setelah kami mendefinisikan CTE, kami menggunakannya dalam kueri 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 menggunakannya kembali sebagai subkueri. Hanya pernyataan SELECT yang mempengaruhi keluaran kueri.

Kueri ini akan memberi Anda:

Ekspresi Tabel Umum

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:

Di mana kita mendapatkan,

  • Nama departemen dengan semua mahasiswa untuk setiap departemen
  • Nama siswa dipisahkan dengan koma dan
  • Menunjukkan departemen yang memiliki setidaknya tiga mahasiswa di dalamnya
SELECT 
  d.DepartmentName,
  COUNT(s.StudentId) StudentsCount,
  GROUP_CONCAT(StudentName) AS Students
FROM Departments AS d 
INNER JOIN Students AS s ON s.DepartmentId = d.DepartmentId
GROUP BY d.DepartmentName
HAVING COUNT(s.StudentId) >= 3;

Kami menambahkan BERGABUNG klausa untuk mendapatkan Nama Departemen dari tabel Departemen. Setelah itu kami menambahkan klausa GROUP BY dengan dua fungsi agregat:

  • “COUNT” untuk menghitung siswa tiap kelompok jurusan.
  • 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 memilih hanya departemen yang memiliki minimal 3 mahasiswa.

Hasilnya akan seperti berikut:

Pertanyaan Lanjutan

Ringkasan

Ini adalah pengenalan menulis SQLite kueri dan dasar-dasar kueri database serta cara memfilter data yang dikembalikan. Anda sekarang bisa, menulis sendiri SQLite pertanyaan.