SQL 子查询
Posted datazhj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 子查询相关的知识,希望对你有一定的参考价值。
SQL支持在查询中编写查询,或者嵌套其他查询。最外层查询的结果集会返回给调用者,称为外部查询。内部查询的结果是提供给外部查询使用的,也成为子查询。
子查询可以分为独立子查询和相关子查询两类。独立子查询不依赖于它所属的外部查询,而相关子查询则须依赖于他所属的外部查询。子查询可以返回单值(标量)、多值、表。
1.独立子查询
独立子查询是独立于外部查询的子查询。独立子查询调试起来非常方便,因为总可以把子查询代码独立出来单独运行,并确保它能够实现默认的功能。
1.1独立标量子查询
标量子查询是返回单个值的子查询,它可以出现在外部子查询期望使用单个值的任何地方(WHERE,、SELECT,等等)
SELECT orderid,orderdate,empid,custid FROM TSQLFundamentals2008.Sales.Orders WHERE orderid= (SELECT MAX(A.orderid) FROM TSQLFundamentals2008.Sales.Orders AS A)
例句查询了TSQLFundamentals2008数据中的Orders表,返回表中的订单ID最大的订单信息。先通过子查询先获取订单表中最大的订单ID,再从订单表中筛选出此订单ID对应的信息。
1.2独立多值子查询
多值子查询是在一个列中返回多个值的子查询 ,一些谓词(例如 IN 谓词)可以处理多值子查询。IN 谓词的格式可以是:<标量表达式> IN (<多值子查询>)。如果标量表达式的值与子查询返回值中的任何一个值相等,IN 谓词的计算结果就为TRUE。NOT运算符可以用来否定谓词,例如 NOT IN 。
SELECT orderid FROM TSQLFundamentals2008.Sales.Orders WHERE empid IN (SELECT A.empid FROM TSQLFundamentals2008.HR.Employees AS A WHERE A.lastname LIKE ‘D%‘)
例句返回由姓氏以D开头的雇员所处理的订单ID。先通过 子查询获取雇员表中姓氏以D开头的雇员ID,再从订单表中筛选出雇员ID包含在子查询返回的雇员ID中的订单ID。
2.相关子查询
以上是关于SQL 子查询的主要内容,如果未能解决你的问题,请参考以下文章