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 
廣告