开发手册 欢迎您!
软件开发者资料库

T-SQL - 子查询

T-SQL子查询 - 从基本概念到高级概念,从简单而简单的步骤学习T-SQL,其中包括概述,数据类型,创建表,删除表,INSERT语句,SELECT语句,UPDATE语句,DELETE语句,WHERE子句,LIKE子句,ORDER BY子句,GROUP BY子句,DISTINCT子句,连接表,子查询,存储过程,事务,索引,函数,字符串函数,日期函数,数字函数。

子查询内部查询嵌套查询是另一个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