
- T-SQL 教程
- T-SQL - 首頁
- T-SQL - 概述
- T-SQL - 資料型別
- T-SQL - 建立表
- T-SQL - 刪除表
- T-SQL - INSERT 語句
- T-SQL - SELECT 語句
- T-SQL - UPDATE 語句
- T-SQL - DELETE 語句
- T-SQL - WHERE 子句
- T-SQL - LIKE 子句
- T-SQL - ORDER BY 子句
- T-SQL - GROUP BY 子句
- T-SQL - DISTINCT 子句
- T-SQL - 表連線
- T-SQL - 子查詢
- T-SQL - 儲存過程
- T-SQL - 事務
- T-SQL - 索引
- T-SQL - 函式
- T-SQL - 字串函式
- T-SQL - 日期函式
- T-SQL - 數值函式
- T-SQL 有用資源
- T-SQL - 快速指南
- T-SQL - 有用資源
- T-SQL - 討論
T-SQL - 子查詢
子查詢(也稱為內部查詢或巢狀查詢)是在另一個 SQL Server 查詢中的查詢,並嵌入在 WHERE 子句中。子查詢用於返回資料,這些資料將在主查詢中用作條件,以進一步限制要檢索的資料。
子查詢可以與 SELECT、INSERT、UPDATE 和 DELETE 語句一起使用,以及諸如 =、<、>、>=、<=、IN、BETWEEN 等運算子一起使用。
子查詢必須遵循一些規則:
必須將子查詢括在括號中。
子查詢必須包含 SELECT 子句和 FROM 子句。
子查詢可以包含可選的 WHERE、GROUP BY 和 HAVING 子句。
子查詢不能包含 COMPUTE 或 FOR BROWSE 子句。
只有在包含 TOP 子句時才能包含 ORDER BY 子句。
可以將子查詢巢狀多達 32 層。
帶 SELECT 語句的子查詢
語法
子查詢最常與 SELECT 語句一起使用。以下是基本語法。
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
示例
考慮具有以下記錄的 CUSTOMERS 表。
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
讓我們將以下子查詢與 SELECT 語句一起應用。
SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
上述命令將產生以下輸出。
ID NAME AGE ADDRESS SALARY 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 7 Muffy 24 Indore 10000.00
帶 INSERT 語句的子查詢
子查詢也可以與 INSERT 語句一起使用。INSERT 語句使用子查詢返回的資料插入到另一個表中。子查詢中的選定資料可以使用任何字元、日期或數字函式進行修改。
語法
以下是基本語法。
INSERT INTO table_name [ (column1 [, column2 ]) ] SELECT [ *|column1 [, column2 ] FROM table1 [, table2 ] [ WHERE VALUE OPERATOR ]
示例
考慮一個與 CUSTOMERS 表結構相似的 CUSTOMERS_BKP 表。以下是將完整 CUSTOMERS 表複製到 CUSTOMERS_BKP 的語法。
INSERT INTO CUSTOMERS_BKP SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS)
帶 UPDATE 語句的子查詢
子查詢可以與 UPDATE 語句結合使用。使用子查詢與 UPDATE 語句時,可以更新表中的單個列或多個列。
語法
以下是基本語法。
UPDATE table SET column_name = new_value [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
示例
讓我們假設我們有可用的 CUSTOMERS_BKP 表,它是 CUSTOMERS 表的備份。
以下命令示例將 CUSTOMERS 表中所有年齡大於或等於 27 的客戶的 SALARY 更新為 0.25 倍。
UPDATE CUSTOMERS SET SALARY = SALARY * 0.25 WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >= 27 )
這將影響兩行,最終 CUSTOMERS 表將具有以下記錄。
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 500.00 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 2125.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00
帶 DELETE 語句的子查詢
子查詢可以與 DELETE 語句結合使用,就像上面提到的任何其他語句一樣。
語法
以下是基本語法。
DELETE FROM TABLE_NAME [ WHERE OPERATOR [ VALUE ] (SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
示例
讓我們假設我們有可用的 CUSTOMERS_BKP 表,它是 CUSTOMERS 表的備份。
以下命令示例刪除 CUSTOMERS 表中所有年齡大於或等於 27 的客戶的記錄。
DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP WHERE AGE >=27 )
這將影響兩行,最終 CUSTOMERS 表將具有以下記錄。
ID NAME AGE ADDRESS SALARY 2 Khilan 25 Delhi 1500.00 3 kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 6 Komal 22 MP 4500.00 7 Muffy 24 Indore 10000.00