- SQLite 教程
- SQLite - 首頁
- SQLite - 概述
- SQLite - 安裝
- SQLite - 命令
- SQLite - 語法
- SQLite - 資料型別
- SQLite - 建立資料庫
- SQLite - 附加資料庫
- SQLite - 分離資料庫
- SQLite - 建立表
- SQLite - 刪除表
- SQLite - INSERT 查詢
- SQLite - SELECT 查詢
- SQLite - 運算子
- SQLite - 表示式
- SQLite - WHERE 子句
- SQLite - AND & OR 子句
- SQLite - UPDATE 查詢
- SQLite - DELETE 查詢
- SQLite - LIKE 子句
- SQLite - GLOB 子句
- SQLite - LIMIT 子句
- SQLite - ORDER BY 子句
- SQLite - GROUP BY 子句
- SQLite - HAVING 子句
- SQLite - DISTINCT 關鍵字
- 高階 SQLite
- SQLite - PRAGMA
- SQLite - 約束
- SQLite - JOIN
- SQLite - UNION 子句
- SQLite - NULL 值
- SQLite - 別名語法
- SQLite - 觸發器
- SQLite - 索引
- SQLite - INDEXED BY 子句
- SQLite - ALTER 命令
- SQLite - TRUNCATE 命令
- SQLite - 檢視
- SQLite - 事務
- SQLite - 子查詢
- SQLite - AUTOINCREMENT
- SQLite - 注入
- SQLite - EXPLAIN
- SQLite - VACUUM
- SQLite - 日期和時間
- SQLite - 常用函式
- SQLite 資源
- SQLite - 快速指南
- SQLite - 資源
- SQLite - 討論
SQLite - 子查詢
子查詢(也稱為內嵌查詢或巢狀查詢)是另一個 SQLite 查詢中的查詢,嵌入在 WHERE 子句中。
子查詢用於返回資料,這些資料將在主查詢中用作條件,以進一步限制要檢索的資料。
子查詢可以與 SELECT、INSERT、UPDATE 和 DELETE 語句一起使用,以及 =、<、>、>=、<=、IN、BETWEEN 等運算子。
子查詢必須遵循以下一些規則:
子查詢必須用括號括起來。
除非主查詢中有多個列供子查詢比較其選擇的列,否則子查詢的 SELECT 子句中只能有一列。
雖然主查詢可以使用 ORDER BY,但在子查詢中不能使用 ORDER BY。可以使用 GROUP BY 來執行與子查詢中的 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
現在,讓我們檢查一下帶有 SELECT 語句的以下子查詢。
sqlite> SELECT *
FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY
WHERE SALARY > 45000) ;
這將產生以下結果。
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0
帶有 INSERT 語句的子查詢
子查詢也可以與 INSERT 語句一起使用。INSERT 語句使用子查詢返回的資料插入到另一個表中。子查詢中選擇的資料可以使用任何字元、日期或數字函式進行修改。
以下基本語法如下:
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
示例
考慮一個與 COMPANY 表結構類似的 COMPANY_BKP 表,可以使用相同的 CREATE TABLE 語句建立,使用 COMPANY_BKP 作為表名。要將完整的 COMPANY 表複製到 COMPANY_BKP,語法如下:
sqlite> INSERT INTO COMPANY_BKP
SELECT * FROM COMPANY
WHERE ID IN (SELECT ID
FROM COMPANY) ;
帶有 UPDATE 語句的子查詢
子查詢可以與 UPDATE 語句一起使用。使用子查詢與 UPDATE 語句時,可以更新表中的單個或多個列。
以下基本語法如下:
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
示例
假設我們有 COMPANY_BKP 表,它是 COMPANY 表的備份。
以下示例將 COMPANY 表中所有年齡大於或等於 27 的客戶的 SALARY 更新為原來的 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) ]
示例
假設我們有 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