
下面是原始数据表:
table1: s1
2
10
table2: s2
5
12
20
ANY *** 作符
ANY 关键字必须接在一个比较 *** 作符的后面,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE 。一个 ANY 例子如下:
SELECT s1 FROM table1 WHERE s1 >ANY (SELECT s2 FROM table2)
查询返回结果如下所示:
s1
10
在子查询中,返回的是 table2 的所有 s2 列结果(5,12,20),然后将 table1 中的 s1 的值与之进行比较,只要大于 s2 的任何值即表示为 TRUE,符合查询条件。
当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。
1 子查询
子查询是一个嵌套在select、insert、update或delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。
1.1语法规则:
- 子查询的select查询使用圆括号括起来
- 不能包括compute或for browse子句
- 如果同时指定top子句,则可能只包括order by子句
- 子查询最多嵌套32层,个别查询可能会不支持32层嵌套
- 任何可以使用表达式的地方都可以使用子查询,主要它返回的是单个值
- 如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中
1.2 语法格式:
- where 查询表达式 [not] in(子查询)
- where 查询表达式 比较运算符 [any|all] (子查询)
- where [not] exists (子查询)
2 嵌套查询
嵌套查询是指将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询。
嵌套查询中上层的查询块称为外侧查询或父查询,下层查询块称为内层查询或子查询。SQL语言允许多层嵌套,但是在子查询中不允许出现order by子句,order by子句只能用在最外层的查询中。
嵌套查询的处理方法是:先处理最内侧的子查询,然后一层一层地向上处理,直到最外层的查询块。
2.1 简单的嵌套查询
子查询的运算符含有=、<>、<、>、<=、>=
三个查询:
第一个:查询年纪>25的老师所教的学生
第二个:查询年纪>25的老师
第三个:验证查询到的学生信息
对比:当子查询中的分那会的结果不是一个时,父查询无法正常工作
2.2 带IN的嵌套查询
当子查询返回一系列值时,适合带IN的嵌套查询。
2.3 NOT IN
2.4 SOME
2.5 ANY
2.6 ALL
2.7 EXIST
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)