Subquery SQLite
Subkueri atau pertanyaan dalaman atau pertanyaan bersarang ialah pertanyaan yang dibenamkan dalam klausa WHERE dalam pertanyaan SQLite yang lain.
Data yang dikembalikan menggunakan subkueri akan digunakan sebagai syarat dalam pertanyaan utama untuk mengehadkan lagi data untuk diambil.
Subqueries boleh digunakan dengan pernyataan SELECT, INSERT, UPDATE dan DELETE, bersama-sama dengan operator seperti =, <, >, >=, <=, IN, BETWEEN, dsb.
Berikut adalah beberapa peraturan yang mesti diikuti oleh subkueri:
Subkueri mesti disertakan dalam kurungan.
Sesuatu subkueri hanya boleh mempunyai satu lajur dalam klausa SELECT, melainkan terdapat berbilang lajur dalam pertanyaan utama yang dibandingkan dengan lajur subkueri yang dipilih.
ORDER BY tidak boleh digunakan dalam subkueri, walaupun ORDER BY boleh digunakan dalam pertanyaan utama. GROUP BY boleh digunakan dalam subqueries dan mempunyai fungsi yang sama seperti ORDER BY.
Subquery mengembalikan lebih daripada satu baris dan hanya boleh digunakan dengan pengendali berbilang nilai seperti operator IN.
Pengendali BETWEEN tidak boleh digunakan dengan subkueri, walau bagaimanapun, BETWEEN boleh digunakan dalam subkueri.
Penggunaan subquery dalam pernyataan SELECT
Subquery biasanya digunakan dengan pernyataan SELECT. Sintaks asas adalah seperti berikut:
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
Contoh
Andaikan jadual SYARIKAT mempunyai rekod 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 semak penggunaan subquery dalam pernyataan SELECT:
sqlite> SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY WHERE SALARY > 45000) ;
Ini akan menghasilkan keputusan berikut:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
Subquery dalam pernyataan INSERT Menggunakan
Subquery juga boleh digunakan dengan pernyataan INSERT. Pernyataan INSERT dimasukkan ke dalam jadual lain menggunakan data yang dikembalikan oleh subquery. Data yang dipilih dalam subkueri boleh diubah suai dengan mana-mana aksara, tarikh atau fungsi angka.
Sintaks asas adalah seperti berikut:
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
Contoh
Anggap bahawa struktur COMPANY_BKP adalah serupa dengan jadual COMPANY dan boleh dibuat menggunakan CREATE TABLE yang sama, kecuali bahawa nama jadual ditukar kepada COMPANY_BKP. Sekarang salin keseluruhan jadual COMPANY ke COMPANY_BKP dengan sintaks berikut:
sqlite> INSERT INTO COMPANY_BKP SELECT * FROM COMPANY WHERE ID IN (SELECT ID FROM COMPANY) ;
Subquery dalam UPDATE statement Gunakan
subquery boleh digunakan bersama-sama dengan pernyataan UPDATE. Apabila menggunakan subkueri dengan pernyataan KEMASKINI, lajur tunggal atau berbilang dalam jadual dikemas kini.
Sintaks asas adalah seperti berikut:
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
Contoh
Andaikan kita mempunyai jadual COMPANY_BKP, yang merupakan sandaran jadual SYARIKAT.
Contoh berikut mengemas kini GAJI semua pelanggan yang UMURnya lebih besar daripada atau sama dengan 27 dalam jadual SYARIKAT kepada 0.50 kali ganda nilai asal:
sqlite> UPDATE COMPANY SET SALARY = SALARY * 0.50 WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE >= 27 );
Ini akan menjejaskan dua baris yang terakhir rekod dalam jadual SYARIKAT adalah seperti 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
Subquery dalam DELETE statement Menggunakan
subquery boleh digunakan dengan DELETE statement sama seperti kenyataan lain yang dinyatakan di atas.
Sintaks asas adalah seperti berikut:
DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
Contoh
Andaikan kita mempunyai jadual COMPANY_BKP, yang merupakan sandaran jadual SYARIKAT.
Contoh berikut memadamkan semua rekod pelanggan dalam jadual SYARIKAT dengan UMUR lebih besar daripada atau sama dengan 27:
sqlite> DELETE FROM COMPANY WHERE AGE IN (SELECT AGE FROM COMPANY_BKP WHERE AGE > 27 );
Ini akan menjejaskan dua baris dan rekod akhir dalam jadual SYARIKAT adalah seperti 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