鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ SQLite 子查詢(xún)
SQLite Having 子句
SQLite 運(yùn)算符
SQLite 注入
SQLite Delete 語(yǔ)句
SQLite – Python
SQLite 數(shù)據(jù)類(lèi)型
SQLite 簡(jiǎn)介
SQLite 創(chuàng)建數(shù)據(jù)庫(kù)
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時(shí)間
SQLite AND/OR 運(yùn)算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢(xún)
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語(yǔ)句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋?zhuān)?/span>
SQLite NULL 值
SQLite Glob 子句
SQLite 表達(dá)式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語(yǔ)句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫(kù)
SQLite 觸發(fā)器
SQLite 語(yǔ)法
SQLite Joins
SQLite Update 語(yǔ)句
SQLite 附加數(shù)據(jù)庫(kù)
SQLite 事務(wù)

SQLite 子查詢(xún)

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

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

子查詢(xún)可以與 SELECT、INSERT、UPDATE 和 DELETE 語(yǔ)句一起使用,可伴隨著使用運(yùn)算符如 =、<、>、>=、<=、IN、BETWEEN 等。

以下是子查詢(xún)必須遵循的幾個(gè)規(guī)則:

  • 子查詢(xún)必須用括號(hào)括起來(lái)。
  • 子查詢(xún)?cè)?SELECT 子句中只能有一個(gè)列,除非在主查詢(xún)中有多列,與子查詢(xún)的所選列進(jìn)行比較。
  • ORDER BY 不能用在子查詢(xún)中,雖然主查詢(xún)可以使用 ORDER BY??梢栽谧硬樵?xún)中使用 GROUP BY,功能與 ORDER BY 相同。
  • 子查詢(xún)返回多于一行,只能與多值運(yùn)算符一起使用,如 IN 運(yùn)算符。
  • BETWEEN 運(yùn)算符不能與子查詢(xún)一起使用,但是,BETWEEN 可在子查詢(xún)內(nèi)使用。

SELECT 語(yǔ)句中的子查詢(xún)使用

子查詢(xún)通常與 SELECT 語(yǔ)句一起使用。基本語(yǔ)法如下:

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

實(shí)例

假設(shè) 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 語(yǔ)句中的子查詢(xún)使用:

    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 語(yǔ)句中的子查詢(xún)使用

子查詢(xún)也可以與 INSERT 語(yǔ)句一起使用。INSERT 語(yǔ)句使用子查詢(xún)返回的數(shù)據(jù)插入到另一個(gè)表中。在子查詢(xún)中所選擇的數(shù)據(jù)可以用任何字符、日期或數(shù)字函數(shù)修改。

基本語(yǔ)法如下:

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

實(shí)例

假設(shè) COMPANY_BKP 的結(jié)構(gòu)與 COMPANY 表相似,且可使用相同的 CREATE TABLE 進(jìn)行創(chuàng)建,只是表名改為 COMPANY_BKP?,F(xiàn)在把整個(gè) COMPANY 表復(fù)制到 COMPANY_BKP,語(yǔ)法如下:

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

UPDATE 語(yǔ)句中的子查詢(xún)使用

子查詢(xún)可以與 UPDATE 語(yǔ)句結(jié)合使用。當(dāng)通過(guò) UPDATE 語(yǔ)句使用子查詢(xún)時(shí),表中單個(gè)或多個(gè)列被更新。

基本語(yǔ)法如下:

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

實(shí)例

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

下面的實(shí)例把 COMPANY 表中所有 AGE 大于或等于 27 的客戶(hù)的 SALARY 更新為原來(lái)的 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 語(yǔ)句中的子查詢(xún)使用

子查詢(xún)可以與 DELETE 語(yǔ)句結(jié)合使用,就像上面提到的其他語(yǔ)句一樣。

基本語(yǔ)法如下:

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

實(shí)例

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

下面的實(shí)例刪除 COMPANY 表中所有 AGE 大于或等于 27 的客戶(hù)記錄:

    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
上一篇:SQLite Group By下一篇:SQLite 索引