從表或視圖檢索行。

語法

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 向優化程序提供的注釋嵌入式提示,用于選擇執行計劃。