从表或视图检索行。
语法
SELECT [ optimizer_hint ] [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...]
FROM from_item [, ...]
[ WHERE condition ]
[ [ START WITH start_expression ]
CONNECT BY { PRIOR parent_expr = child_expr |
child_expr = PRIOR parent_expr }
[ ORDER SIBLINGS BY expression [ ASC | DESC ] [, ...] ] ]
[ GROUP BY { expression | ROLLUP ( expr_list ) |
CUBE ( expr_list ) | GROUPING SETS ( expr_list ) } [, ...]
[ LEVEL ] ]
[ HAVING condition [, ...] ]
[ { UNION [ ALL ] | INTERSECT | MINUS } select ]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ FOR UPDATE [WAIT n|NOWAIT|SKIP LOCKED]]
其中 from_item 可以是下列项之一:
table_name[@dblink ] [ alias ]
( select ) alias
from_item [ NATURAL ] join_type from_item
[ ON join_condition | USING ( join_column [, ...] ) ]
说明
SELECT 从一个或多个表检索行。SELECT 的常规处理如下所示:
- 将计算
FROM列表中的所有元素。(FROM列表中的每个元素均为真实表或虚拟表。)如果在FROM列表中指定了多个元素,则它们将交叉联接在一起。(请参见下面的FROM子句。) - 如果指定了
WHERE子句,则从输出中排除所有不满足条件的行。(请参见下面的WHERE子句。) - 如果指定了
GROUP BY子句,则输出将分成与一个或多个值匹配的一组行。如果存在HAVING子句,则会排除不满足给定条件的组。(请参见下面的GROUP BY子句和HAVING子句。) - 通过使用运算符
UNION、INTERSECT和MINUS,可以组合多个SELECT语句的输出以形成单个结果集。UNION运算符返回一个或两个结果集中的所有行。INTERSECT运算符返回完全位于这两个结果集中的所有行。MINUS运算符返回第一个结果集中的行,但不返回第二个结果集中的行。在上述所有三种情况下,都会排除重复的行。对于UNION运算符,如果指定了ALL,则不会排除重复项。(请参见下面的UNION子句、INTERSECT子句和MINUS子句。) - 针对每个所选行使用
SELECT输出表达式计算实际输出行。(请参见下面的SELECT列表。) CONNECT BY子句用于选择具有分层关系的数据。此类数据在行之间具有父子关系。(请参见CONNECT BY子句。)- 如果指定了
ORDER BY子句,则返回的行将按指定顺序排序。如果未给定ORDER BY,则按系统生成速度最快的顺序返回行。(请参见下面的ORDER BY子句。) DISTINCT排除结果中的重复行。ALL(默认值)将返回所有候选行,包括重复行。(请参见下面的DISTINCT子句。)FOR UPDATE子句使SELECT语句锁定所选行以防止并发更新。(请参见下面的FOR UPDATE子句。)
您必须对表具有 SELECT 特权才能读取其值。使用 FOR UPDATE 也需要 UPDATE 特权。
参数
| 参数 | 说明 |
|---|---|
| optimizer_hint | 向优化程序提供的注释嵌入式提示,用于选择执行计划。 |