SQLite 子查詢

子查詢或內(nèi)部查詢或嵌套查詢是另一個SQLite查詢中的查詢,并嵌入在WHERE子句中。

子查詢用于返回將在主查詢中使用的數(shù)據(jù),作為進一步限制要檢索的數(shù)據(jù)的條件。

子查詢可以與SELECT,INSERT,UPDATE和DELETE語句以及=,<,>,> =,<=,IN,BETWEEN等運算符一起使用。

有一些子查詢必須遵循的規(guī)則-

  • 子查詢必須放在括號內(nèi)。

  • 子查詢在SELECT子句中只能有一個列,除非主查詢中有多個列供子查詢比較其選定的列。

  • 盡管主查詢可以使用ORDER BY,但是不能在子查詢中使用ORDER BY。GROUP BY可用于執(zhí)行與子查詢中的ORDER BY相同的功能。

  • 返回多行的子查詢只能與多個值運算符(例如IN運算符)一起使用。

  • BETWEEN運算符不能與子查詢一起使用;但是,可以在子查詢中使用BETWEEN。

帶有SELECT語句的子查詢

子查詢最常與SELECT語句一起使用。基本語法如下-

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

示例

帶有以下記錄的COMPANY表。

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

現(xiàn)在,讓我們使用SELECT語句檢查以下子查詢。

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

這將產(chǎn)生以下結(jié)果。

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

帶有INSERT語句的子查詢

子查詢也可以與INSERT語句一起使用。INSERT語句使用從子查詢返回的數(shù)據(jù)插入另一個表??梢允褂萌魏巫址?,日期或數(shù)字功能修改子查詢中的選定數(shù)據(jù)。

以下是基本語法如下-

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

示例

考慮一個表COMPANY_BKP,其結(jié)構(gòu)與COMPANY表相似,并且可以使用COMPANY_BKP作為表名使用相同的CREATE TABLE創(chuàng)建。要將完整的COMPANY表復(fù)制到COMPANY_BKP,請使用以下語法-

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

帶有UPDATE語句的子查詢

子查詢可以與UPDATE語句結(jié)合使用。使用帶有UPDATE語句的子查詢時,可以更新表中的單列或多列。

以下是基本語法如下-

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

示例

假設(shè)我們有COMPANY_BKP表可用,它是COMPANY表的備份。

以下示例將COMPANY表中年齡大于或等于27歲的所有客戶的薪資更新0.50倍。

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

這將影響兩行,最后COMPANY表將具有以下記錄-

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

帶有DELETE語句的子查詢

子查詢可以與DELETE語句一起使用,就像上面提到的任何其他語句一樣。

以下是基本語法如下-

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

示例

假設(shè)我們有COMPANY_BKP表可用,它是COMPANY表的備份。

下面的示例從COMPANY表中刪除年齡大于或等于27的所有客戶的記錄。

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

這將影響兩行,最后COMPANY表將具有以下記錄-

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
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清