SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Subkueri SQLite

Ringkasan :dalam tutorial ini, Anda akan belajar tentang subquery SQLite untuk membuat kueri yang lebih mudah dibaca dan kompleks.

Pengantar subkueri SQLite

Subquery adalah SELECT pernyataan bersarang di pernyataan lain. Lihat pernyataan berikut.

SELECT column_1
FROM table_1
WHERE column_1 = (
   SELECT column_1 
   FROM table_2
);Code language: SQL (Structured Query Language) (sql)

Kueri berikut adalah kueri luar :

SELECT column_1
  FROM table_1
 WHERE colum_1 =Code language: SQL (Structured Query Language) (sql)

Dan kueri berikut adalah subkueri .

(SELECT column_1
  FROM table_2)Code language: SQL (Structured Query Language) (sql)

Anda harus menggunakan sepasang tanda kurung untuk menyertakan subquery. Perhatikan bahwa Anda dapat menyarangkan subkueri di dalam subkueri lain dengan kedalaman tertentu.

Biasanya, subquery mengembalikan satu baris sebagai nilai atom, meskipun mungkin mengembalikan beberapa baris untuk membandingkan nilai dengan IN operator.

Anda dapat menggunakan subquery di SELECT , FROM , WHERE , dan JOIN klausa.

Contoh subkueri SQLite

Kami akan menggunakan tracks dan albums tabel dari database sampel untuk demonstrasi.

1) subquery SQLite di WHERE contoh klausa

Anda dapat menggunakan subquery sederhana sebagai kondisi pencarian. Misalnya, pernyataan berikut mengembalikan semua trek dalam album dengan judul Let There Be Rock

SELECT trackid,
       name,
       albumid
FROM tracks
WHERE albumid = (
   SELECT albumid
   FROM albums
   WHERE title = 'Let There Be Rock'
);Code language: SQL (Structured Query Language) (sql)

Subquery mengembalikan id album dengan judul 'Let There Be Rock' . Kueri menggunakan operator yang sama (=) untuk membandingkan albumid dikembalikan oleh subquery dengan albumid di tracks tabel.

Jika subquery mengembalikan beberapa nilai, Anda dapat menggunakan IN operator untuk memeriksa keberadaan satu nilai terhadap satu set nilai.

Lihat employees berikut ini dan customers tabel dalam database sampel:

Misalnya, kueri berikut menampilkan pelanggan yang perwakilan penjualannya berada di Kanada.

SELECT customerid,
       firstname,
       lastname
  FROM customers
 WHERE supportrepid IN (
           SELECT employeeid
             FROM employees
            WHERE country = 'Canada'
       );
Code language: SQL (Structured Query Language) (sql)

Subquery mengembalikan daftar id karyawan yang berlokasi di Kanada. Kueri luar menggunakan IN operator untuk menemukan pelanggan yang memiliki id perwakilan penjualan dalam daftar.

2) subquery SQLite di FROM contoh klausa

Terkadang Anda ingin menerapkan fungsi agregat ke kolom beberapa kali. Misalnya, pertama, Anda ingin menjumlahkan ukuran album, lalu menghitung ukuran rata-rata semua album. Anda dapat mengajukan pertanyaan berikut.

SELECT AVG(SUM(bytes) 
FROM tracks
GROUP BY albumid;Code language: SQL (Structured Query Language) (sql)

Kueri ini tidak valid.

Untuk memperbaikinya, Anda dapat menggunakan subquery di FROM klausa sebagai berikut:

SELECT
	AVG(album.size)
FROM
	(
		SELECT
			SUM(bytes) SIZE
		FROM
			tracks
		GROUP BY
			albumid
	) AS album;Code language: SQL (Structured Query Language) (sql)
AVG(album.size)
---------------
  338288920.317

Dalam hal ini, SQLite pertama-tama mengeksekusi subquery di FROM klausa dan mengembalikan set hasil. Kemudian, SQLite menggunakan kumpulan hasil ini sebagai tabel turunan di kueri luar.

Subquery berkorelasi SQLite

Semua subquery yang telah Anda lihat sejauh ini dapat dieksekusi secara independen. Dengan kata lain, itu tidak tergantung pada kueri luar.

Subquery berkorelasi adalah subquery yang menggunakan nilai dari kueri luar. Tidak seperti subquery ordinal, subquery berkorelasi tidak dapat dieksekusi secara independen.

Subquery yang berkorelasi tidak efisien karena dievaluasi untuk setiap baris yang diproses oleh outer query.

Kueri berikut menggunakan subkueri terkait untuk mengembalikan album yang ukurannya kurang dari 10 MB.

SELECT albumid,
       title
  FROM albums
 WHERE 10000000 > (
                      SELECT sum(bytes) 
                        FROM tracks
                       WHERE tracks.AlbumId = albums.AlbumId
                  )
 ORDER BY title;Code language: SQL (Structured Query Language) (sql)

Cara kerja kueri.

  • Untuk setiap baris yang diproses di kueri luar, subkueri yang berkorelasi menghitung ukuran album dari trek yang termasuk dalam album saat ini menggunakan SUM fungsi.
  • Predikat pada WHERE klausa memfilter album yang berukuran lebih besar atau sama dengan 10 MB (10000000 byte).

Subquery berkorelasi SQLite di SELECT contoh klausa

Kueri berikut menggunakan subkueri berkorelasi di SELECT klausa untuk mengembalikan jumlah trek dalam album.

SELECT albumid,
       title,
       (
           SELECT count(trackid) 
             FROM tracks
            WHERE tracks.AlbumId = albums.AlbumId
       )
       tracks_count
  FROM albums
 ORDER BY tracks_count DESC;Code language: SQL (Structured Query Language) (sql)

Dalam tutorial ini, kami telah memperkenalkan Anda ke subkueri dan menunjukkan berbagai cara menggunakan subkueri dalam kueri untuk memilih data dari tabel.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pulihkan Database SQLite

  2. Bagaimana SQLite Total() Bekerja

  3. Buat tabel menggunakan stempel tanggal

  4. Bagaimana menerapkan SQLCipher saat menggunakan SQLiteOpenHelper

  5. Saya tidak dapat mengatur banyak gambar dalam tampilan kisi?