5.1 什么是子查询?
就像我们在第一章提到的那样, 一个子查询是嵌套在一个查询中的SELECT语句. 为了方便讨论,我们把这些包含子查询的语句称之为嵌套语句。 子查询语句在其嵌套语句之前执行, 并且子查询语句产生的结果集会在其嵌套语句执行完后自动清除. 因此,一个子查询可以认为是语句范围内的临时表(内联视图).
从语法上来说, 子查询被包含在圆括号中. 例如下边的SELECT语句在它的where条件句中包含一个简单的子查询:
SELECT * FROM customer
WHERE cust_nbr = (SELECT 123 FROM dual);
这个子查询非常简单,并且完全没有必要, 但是它能说明一点. 当这条语句执行的时候, 子查询会先执行. 它的结果会成为where语句表达式中的一个值。
SELECT * FROM customer
WHERE cust_nbr = 123;
With the subquery out of the way, 嵌套查询就能被计算出来. 这样, 它就会返回顾客编号是123的信息.
子查询经常会在WHERE语句 , SELECT, UPDATE, 或者 DELETE语句中出现, 同样也会出现在UPDATE的set语句中。子查询也可以关联包含它的嵌套语句, 意味着它可以引用嵌套语句中的一到两列, 或者不引用任何列, 无论哪一种,我们都称之为非关联子查询. 那些在select查询的FROM语句中使用的的子查询,称之为内敛视图。 内敛视图通常是非关联子查询;他们会首先被执行,就就像是在查询中缓存的没有索引的表结果。
|