摘要:下面是由希赛小编整理的中级通信互联网技术知识点精讲之嵌套查询,希望能帮助学友们。
下面是由希赛小编整理的中级通信互联网技术知识点精讲之嵌套查询,希望能帮助学友们。具体内容如下:
嵌套查询
在SQL中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的査询称为嵌套查询。
嵌套査询一般的求解方法是由里向外处理。即每个子査询在上一级査询处理之前求解,子査询的结果用于建立其父查询的查找条件。
嵌套查询可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。以层层嵌套的方式来构造程序正是SQL“结构化”的含义所在。
(1)带有IN谓词的子查询
在嵌套查询中,子查询的结果往往是一个集合,谓词IN是嵌套查询中最经常使用的谓词。
(2)带有比较运算符的子查询
带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以用>、<、=、>=、<=、!=或<>等比较运算符。
(3)带有ANY或ALL谓词的子查询
子査询返回单值时可以用比较运算符,而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义如下:
>ANY大于子査询结果中的某个值
>ALL大于子查询结果中的所有值
<=ANY大于等于子查询结果中的某个值
<=ALL大于等于子查询结果中的所有值
<=ANY小于等于子査询结果中的某个值
<=ALL小于等于子査询结果中的所有值
=ANY等于子查询结果中的某个值
=ALL等于子查询结果中的所有值(通常没有实际意义)
!=(或OANY不等于子查询结果中的某个值!=(或OALL不等于子查询结果中的任何一个值
(4)带有EXISTS谓词的子查询
EXISTS代表存在量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。使用存在量词EXISTS后,若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。由EXISTS引出的子査询,其目标列表达式通常都用*,因为带EXISTS的子査询只返回真值或假值,给出列名无实际意义。
这类查询与前面讲解的不相关子査询有一个明显区别,即子査询的査询条件依赖于外层父査询的某个属性值,称这类査询为相关子査询(CorrelatedSubqueiy).求解相关子查询不能像求解不相关子查询那样,一次将子査询求解出来,然后求解父查询。内层査询由于与外层查询有关,因此必须反复求值。从概念上讲,相关子査询的一般处理过程是:首先取外层査询中表的第1个元组,根据它与内层查询相关的属性值处理内层査询,若WHERE子句返回值为真,则取此元组放入结果表:然后取表的下一个元组:重复这一过程,直至外层表全部检查完为止。
与EXISTS谓词相对应的是NOTEXISTS谓词。使用存在量词NOTEXISTS后,若内层査询结果为空,则外层的WHERE子句返回真值,否则返回假值。
集合査询
SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作主要包括并操作UNION、交操作INTERSECT和差操作MINUS。
相关推荐:
通信工程师备考资料免费领取
去领取