从表或视图检索行。

语法

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 子句。)
  • 通过使用运算符 UNIONINTERSECTMINUS,可以组合多个 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 向优化程序提供的注释嵌入式提示,用于选择执行计划。