Tutorial klasik...LOG MASUK
Tutorial klasik SQLite
pengarang:php.cn  masa kemas kini:2022-04-13 17:05:02

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

Laman web PHP Cina