您的位置:首页 > 数据库

SQL Server 子查询

2015-08-26 11:31 134 查看
这些主要是老师上课讲的一些知识点,自己做了一些整理放在这里~~~

子查询可以是标量的、多值的或是表值的。
在期待单个值的地方可以使用标量子查询。例如,以下查询返回具有最大员工编号的员工信息:

SELECT *
FROM EMP AS E1
WHERE E1.EMPNO=( SELECT MAX(E2.EMPNO)
FROM  EMP AS E2
)


只要标量子查询返回的值是单个值或不返回值,它就是有效的。然而,如果标量子查询返回多个值,则将产生运行时错误。

子查询可以是标量的、多值的或是表值的。

在期待多个值的地方可以使用多值子查询。例如,以下查询返回员工部门编号在部门表中存在的员工信息:

SELECT *

FROM EMP
WHERE DEPTNO IN(SELECT DEPTNO
FROM DEPT
)


子查询可以是标量的、多值的或是表值的。

在期待出现表的地方,还可以使用表值子查询或表表达式。例如,以下查询返回员工的EMPNO、ENAME和SAL,并以员工编号、员工姓名和员工薪水命名,最后以员工姓名进行排序:

SELECT *
FROM ( SELECT  EMPNO AS  '员工编号',
ENAME AS  '员工姓名',
SAL  AS  '员工薪水'
FROM  EMP
) AS E
ORDER BY 员工姓名


查询可以按两种方式进行分类。
按期望值的数量可以分为标量子查询和多值子查询。
按子查询对外部查询的依赖性可以分为独立子查询和相关子查询。
标量子查询和多值子查询既可以是独立子查询,也可以是相关子查询

独立子查询

独立子查询是可以独立于外部查询而运行的子查询。相对于相关子查询,独立子查询非常便于调试。
我们在前面看到的子查询都是独立子查询。例如:

SELECT *
FROM  EMP AS E1
WHERE  E1.EMPNO = (SELECT MAX(E2.EMPNO)
FROM  EMP AS E2
)


相关子查询

逻辑上,独立子查询只为整个外部查询计算一次。

相关子查询是引用了在外部查询中出现的列的子查询。从逻辑上讲,子查询会为外部查询的每一行进行一次计算。例如,查询每个组中员工薪水最高的员工信息:

SELECT E1.EMPNO,
E1.ENAME,
E1.SAL,
E1.DEPTNO
FROM EMP AS E1
WHERE E1.SAL = ( SELECT MAX(E2.SAL)
FROM EMP AS E2
WHERE E1.DEPTNO = E2.DEPTNO
)


以上就是子查询的相关知识~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: