子查询或内部查询或嵌套查询是另一个SQL Server查询中的查询,并嵌入在WHERE子句中.子查询用于返回将在主查询中使用的数据,作为进一步限制要检索的数据的条件.
子查询可以与SELECT,INSERT一起使用, UPDATE和DELETE语句以及运算符,如=,< ;,>,> =,< =,IN,BETWEEN等.
有一些规则可以查询必须跟随 :
您必须将子查询括在括号中.
子查询必须包含SELECT子句和FROM子句.
子查询可以包含可选的WHERE,GROUP BY和HAVING子句.
子查询不能包含COMPUTE或FOR BROWSE子句.
您可以包括包含TOP子句时的ORDER BY子句.
您可以将子查询最多嵌套32个级别.
带有SELECT语句的子查询
语法
子查询最常用于S ELECT声明.以下是基本语法.
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_BKP with与CUSTOMERS表类似的结构.以下是将完整的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表中为所有AGE大于或等于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表可用,它是CUST的备份OMERS表.
以下命令示例为所有AGE大于或等于27的客户删除CUSTOMERS表中的记录.
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