- 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