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 子查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 with as 优化SQL

sql语句中嵌套时候用in 和=有啥区别

sql语句中where条件的嵌套子查询性能

SQL问题,子查询返回的值不止一个!

sql mysql查询/ db片段

SQL Server 2016 子查询指南