一、创建和使用返回多行的子查询
in子查询
Select column_name
From table_name
Where test expression [not] in (subquery)
exists子查询
Select column_name
From table_name
Where [not] exists (subquery)
带有ANY(SOME) 或ALL谓词的子查询
>ANY | 大于子查询结果中的某个值 |
>ALL | 大于子查询结果中的所有值 |
<ANY | 小于子查询结果中的某个值 |
<ALL | 小于子查询结果中的所有值 |
>=ANY | 大于等于子查询结果中的某个值 |
>=ALL | 大于等于子查询结果中的所有值 |
<=ANY | 小于等于子查询结果中的某个值 |
<=ALL | 小于等于子查询结果中的所有值 |
=ANY | 等于子查询结果中的某个值 |
=ALL | 等于子查询结果中的所有值(通常没有实际意义) |
!=(或<>)ANY | 不等于子查询结果中的某个值 |
!=(或<>)ALL | 不等于子查询结果中的任何一个值 |
ANY(或SOME),ALL谓词与聚集函数、IN谓词的等价转换关系
| = | <>或!= | < | <= | > | >= |
ANY ALL | IN -- | -- NOT IN | <MAX <MIN | <=MAX <=MIN | >MIN >MAX | >=MIN >=MAX |
UNIQUE子查询
UNIQUE运算符用来测试集合是否存在重复元组。与EXISTS判式相似,它总是与子查询结合使用,而且只要子查询结果中没有重复记录,则UNIQUE判式的值为Ture。如果子查询的结果表中有重复的记录,那么UNIQUE判式的值为False。
Select column_name
From table_name
Where [not] unique (subquery)
二、树查询
当进行树查询时,应当让系统确定3点内容。
·在树形关系中,树中的父、子记录是如何确定的。
·以树结构输出时,以什么顺序输出,是先输出父节点再输出子节点,还是先输出子节点在输出父节点。
·用哪个节点作为树根来进行查询。这说明可以查询整棵树,也可以查询一颗子树。
Oracle提供了树查询的功能:
Select column
From table_name
Connect by prior 父主键=子外键
Start with column=value
注:connect by子句中的关键词prior用来指定记录的输出顺序。它如果放在父主键之前,表示先输出父节点,而如果放在子外键之前,则表示先输出子节点。Start with子句中的表达式用来选择根记录,即树查询的起始点。