子查询又称嵌套查询,必须遵守的一下规则:
1、必须位于圆括号里。
2、除非主查询里有多个字段让子查询进行比较,否则子查询的select子句里只能有一个字段。
3、子查询里不能使用order by子句,但是可以使用group by实现order by的功能。
4、返回多条记录的子查询只能与多值操作符配合使用。
5、select 列表里不能引用任何blob、array、clob或nclob类型的值。
6、子查询不能直接被包围在函数里。
7、操作符between不能用于子查询,但子查询内部可以使用它。
一、子查询与select语句
select column [ , column ]
from table1 [ , table2 ]
where column operator
( select column [ , column ]
from table1 [ ,table2 ]
[ where ] );
二、子查询与insert语句
insert into table [ ( column1 [ , column2]) ]
select [ * | column1 [ ,column2 ] ]
[ where value operator ]
三、子查询与update语句
update table
set column [ ,column ] =
( select column [ ,column ]
from table
[ where ]
)
四、子查询与delete语句
delete from table
[ where operator [ value ]
( select column
from table
[ where ]
)
]
五、嵌套的子查询
子查询可以嵌套到另一个子查询里,最内层的子查询先被执行,然后在执行外层的子查询,直到主查询。
注:
(1)一个语句里能够嵌套的子查询的数量取决于具体的实现,请查看相应的文档。
(2)使用多个子查询可能会延长响应时间,还可能降低结果的准确性,因为代码里可能存在错误。
六、关联子查询
子查询里的表可以与主查询里的表相关联。
注:在关联子查询时,如果要在子查询中使用某个表,必须首先在主查询中引用这个表。