SQL语言的数据查询之嵌套查询

嵌套查询是SQL中增强查询能力的重要手段,它包括了IN谓词的子查询、带有比较运算符的子查询、ANY或ALL谓词的子查询以及带有EXISTS谓词的子查询。子查询可以作为条件用于WHERE或HAVING子句中,且可以多层嵌套。相关子查询和不相关子查询是根据子查询是否依赖于父查询来区分的,而EXISTS谓词的子查询则用于判断特定条件是否存在。
摘要由CSDN通过智能技术生成

3. 嵌套查询

在SQL语言中,一个SELECT-FROM-WHERE语句被称为一个查询块。将一个查询块嵌套在另外一个查询块的WHERE子句或者HAVING短语的条件中的查询被称为嵌套查询。上层的查询块称为外层查询或父查询,下层的查询被称为内层查询或子查询。

SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。需要特别指出的是,子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。

嵌套查询使用用户可以用多个简单查询构成复杂的查询,从而增强SQL的查询能力。以层层嵌套的方式来构造程序正是SQL中“结构化”的含义所在。

(1) 带有IN谓词的子查询

在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。

查询涉及多个关系时,用嵌套查询逐步求解,层次清楚,易于构造,具有结构化程序设计的优点。

子查询的查询条件不依赖于父查询,称为不相关子查询。如果子查询的查询条件依赖于父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询语句求解相关子查询不能像求解不相关子查询那样,一次将子查询求解出来,然后求解父查询。内层查询由于与外层查询有关,因此必须反复求值。

(2) 带有比较运算符的子查询

带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能够确切知道内层查询返回的是单值得时,可以用>,<,=,>=,<=,!=和<>等比较运算符。

(3) 带有ANY(SOME)或者ALL谓词的子查询

子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。而使用ANY或ALL谓词时则必须同时使用比较运算符。其语义为:

>ANY            大于子查询结果中的某个值

>ALL             大于子查询结果中的所有值

<ANY            小于子查询结果中的某个值

<ALL             小于子查询结果中的所有值

>=ANY          大于等于子查询结果中的某个值

>=ALL           大于等于子查询结果中的所有值

<=                 小于等于子查询结果中的某个值

<=                 小于等于子查询结果中的所有值

=                   等于子查询结果中的某个值

=                   等于子查询结果中的所有值

!=(或<>)ANY        不等于子查询结果中的某个值

!=(或<>)ALL          不等于子查询结果中的任何一个值

ANY,ALL与聚集函数的对应关系如下表所示:

 (4) 带有EXISTS谓词的子查询

EXISTS代表量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。

可以利用EXISTS来判断X∈S,S∈R,S=R,S∩R非空等是否成立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xclincer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值