T-SQL-子查询
子查询用于与其他SQL Server查询一起使用,并嵌入WHERE子句。子查询用于返回数据,作为限制检索数据的条件在主问题中使用。
子查询与运算符=、<、>、>=、<=、IN和BETWEEN等配合使用的SELECT、INSERT、UPDATE和DELETE语句。
子查询遵循几个规则-
- 子查询用括号括起来。
- 子查询包括FROM子句和SELECT子句。
- 也可以在子查询中使用可选的GROUP BY、WHERE和HAVING子句。
- 计算和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])
示例:
查看EMPLOYEES表:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Hamilton | 23 | Australia | 34000 |
2 | Warner | 34 | England | 22000 |
3 | Martin | 28 | China | 25000 |
4 | Twinkle | 30 | Turkey | 50000 |
5 | Tinu | 32 | Nepal | 45000 |
6 | Michal | 31 | Bhutan | 20000 |
7 | Harper | 20 | Bangladesh | 15000 |
我们使用SELECT语句的帮助来应用子查询。
SELECT * FROM EMPLOYEES
WHERE ID IN (SELECT ID FROM CUSTOMER WHERE SALARY > 45000)
输出:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Hamilton | 23 | Australia | 34000 |
4 | Twinkle | 30 | Turkey | 50000 |
5 | Tinu | 32 | Nepal | 45000 |
使用INSERT语句的子查询
子查询可以与INSERT语句一起使用。子查询的选定数据可以修改字符、数字或日期函数。
语法:
INSERT语句的语法如下:
INSERT INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [ column2 ]
FROM table1 [table2 ]
[ WHERE VALUE OPERATOR ]
示例:
该语法用于将完整的EMPLOYEES表复制到EMPLOYEES_BKP中。
INSERT INTO EMPLOYEES_BKP
SELECT * FROM EMPLOYEES
WHERE ID IN (SELECT ID FROM EMPLOYEES)
使用UPDATE语句的子查询
在更新语句中使用子查询进行连接。当我们在UPDATE语句中使用子查询时,单个或多个列。
语法:
以下是基本语法。
UPDATE table
SET column_name = new_value
[ WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
示例:
以下命令将AGE> = 31.的EMPLOYEES的SALARY更新为0.25倍。
UPDATE EMPLOYEES
SET SALARY = SALARY * 0.35
WHERE AGE IN (SELECT AGE FROM EMPLOYEES_BKP WHERE AGE >= 31 )
表中给出两行:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Hamilton | 23 | Australia | 34000 |
2 | Warner | 34 | England | 22000 |
3 | Martin | 28 | China | 25000 |
4 | Twinkle | 30 | Turkey | 50000 |
5 | Tinu | 32 | Nepal | 45000 |
6 | Michal | 31 | Bhutan | 20000 |
7 | Harper | 20 | Bangladesh | 15000 |
使用DELETE语句的子查询:
可以将子查询与DELETE语句一起使用,还可以生成其他上面的注释。
语法:
其语法是。
DELETE FROM TABLE_NAME
[WHERE OPERATOR [VALUE] (SELECT COLUMN_NAME FROM TABLE_NAME)
[ WHERE) ]
示例:
该查询删除AGE大于或等于31岁的EMPLOYEES表的记录。
DELETE FROM EMPLOYEES
WHERE AGE IN (SELECT AGE FROM EMPLOYEES_BKP WHERE AGE >=31)
它有两行,EMPLOYEES表将具有以下记录。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Hamilton | 23 | Australia | 34000 |
3 | Martin | 28 | China | 25000 |
4 | Twinkle | 30 | Turkey | 50000 |
7 | Harper | 20 | Bangladesh | 15000 |