SQLite - Subkueri

Kueri Subquery atau Inner atau Kueri bersarang adalah kueri di dalam kueri SQLite lain dan disematkan di dalam klausa WHERE.

Sebuah subquery digunakan untuk mengembalikan data yang akan digunakan dalam query utama sebagai syarat untuk lebih membatasi data yang akan diambil.

Subkueri dapat digunakan dengan pernyataan SELECT, INSERT, UPDATE, dan DELETE bersama dengan operator seperti =, <,>,> =, <=, IN, BETWEEN, dll.

Ada beberapa aturan yang harus diikuti subkueri -

  • Subkueri harus diapit dalam tanda kurung.

  • Subkueri hanya dapat memiliki satu kolom di klausa SELECT, kecuali beberapa kolom berada di kueri utama untuk subkueri untuk membandingkan kolom yang dipilihnya.

  • ORDER BY tidak dapat digunakan dalam subkueri, meskipun kueri utama dapat menggunakan ORDER BY. GROUP BY dapat digunakan untuk melakukan fungsi yang sama seperti ORDER BY di subkueri.

  • Subkueri yang mengembalikan lebih dari satu baris hanya dapat digunakan dengan beberapa operator nilai, seperti operator IN.

  • BETWEEN operator tidak dapat digunakan dengan subquery; namun, BETWEEN dapat digunakan dalam subquery.

Subkueri dengan Pernyataan SELECT

Subkueri paling sering digunakan dengan pernyataan SELECT. Sintaks dasarnya adalah sebagai berikut -

SELECT column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
   (SELECT column_name [, column_name ]
      FROM table1 [, table2 ]
      [WHERE])

Contoh

Pertimbangkan tabel PERUSAHAAN dengan catatan berikut.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Sekarang, mari kita periksa sub-query berikut dengan pernyataan SELECT.

sqlite> SELECT * 
   FROM COMPANY 
   WHERE ID IN (SELECT ID 
      FROM COMPANY 
      WHERE SALARY > 45000) ;

Ini akan menghasilkan hasil sebagai berikut.

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

Subkueri dengan Pernyataan INSERT

Subkueri juga bisa digunakan dengan pernyataan INSERT. Pernyataan INSERT menggunakan data yang dikembalikan dari subkueri untuk dimasukkan ke dalam tabel lain. Data yang dipilih dalam subkueri dapat dimodifikasi dengan salah satu fungsi karakter, tanggal, atau angka.

Berikut ini adalah sintaks dasarnya sebagai berikut -

INSERT INTO table_name [ (column1 [, column2 ]) ]
   SELECT [ *|column1 [, column2 ]
   FROM table1 [, table2 ]
   [ WHERE VALUE OPERATOR ]

Contoh

Pertimbangkan tabel COMPANY_BKP dengan struktur yang mirip dengan tabel COMPANY dan dapat dibuat menggunakan CREATE TABLE yang sama menggunakan COMPANY_BKP sebagai nama tabel. Untuk menyalin tabel COMPANY lengkap ke COMPANY_BKP, berikut adalah sintaksnya -

sqlite> INSERT INTO COMPANY_BKP
   SELECT * FROM COMPANY 
   WHERE ID IN (SELECT ID 
      FROM COMPANY) ;

Subkueri dengan Pernyataan UPDATE

Subkueri dapat digunakan bersama dengan pernyataan UPDATE. Salah satu atau beberapa kolom dalam tabel dapat diperbarui saat menggunakan subkueri dengan pernyataan UPDATE.

Berikut ini adalah sintaks dasarnya sebagai berikut -

UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
      FROM TABLE_NAME)
   [ WHERE) ]

Contoh

Dengan asumsi, kami memiliki tabel COMPANY_BKP yang merupakan cadangan dari tabel COMPANY.

Contoh berikut memperbarui GAJI sebesar 0,50 kali dalam tabel PERUSAHAAN untuk semua pelanggan, yang AGE-nya lebih besar dari atau sama dengan 27.

sqlite> UPDATE COMPANY
   SET SALARY = SALARY * 0.50
   WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
      WHERE AGE >= 27 );

Ini akan berdampak pada dua baris dan akhirnya tabel COMPANY akan memiliki record berikut -

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  10000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Subkueri dengan Pernyataan DELETE

Subquery dapat digunakan bersama dengan pernyataan DELETE seperti pernyataan lain yang disebutkan di atas.

Berikut ini adalah sintaks dasarnya sebagai berikut -

DELETE FROM TABLE_NAME
[ WHERE OPERATOR [ VALUE ]
   (SELECT COLUMN_NAME
      FROM TABLE_NAME)
   [ WHERE) ]

Contoh

Dengan asumsi, kami memiliki tabel COMPANY_BKP yang merupakan cadangan dari tabel COMPANY.

Contoh berikut menghapus catatan dari tabel PERUSAHAAN untuk semua pelanggan yang AGE-nya lebih besar dari atau sama dengan 27.

sqlite> DELETE FROM COMPANY
   WHERE AGE IN (SELECT AGE FROM COMPANY_BKP
   WHERE AGE > 27 );

Ini akan mempengaruhi dua baris dan akhirnya tabel COMPANY akan memiliki record berikut -

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       42500.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0