FROM 子句 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

FROM 子句

查詢中的 FROM 子句列出資料表參考 (資料表、檢視和子查詢),此為選取資料的來源位置。若列出多個資料表參考,則必須在 FROM 子句或 WHERE 子句中使用適當的語法聯結資料表。若未指定聯結條件,則系統會將查詢當做交叉聯結 (笛卡兒乘積) 處理。

語法

FROM table_reference [, ...]

其中 table_reference 是下列其中一項:

with_subquery_table_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] ( subquery ) [ AS ] alias [ ( column_alias [, ...] ) ] table_reference [ NATURAL ] join_type table_reference [ ON join_condition | USING ( join_column [, ...] ) ] table_reference [ PIVOT ] ( aggregate(expr) [ [ AS ] aggregate_alias ] FOR column_name IN ( expression [ [ AS ] in_alias [, ...] ) ) [ [ AS ] in_alias [, ...] ) ] ] table_reference [ UNPIVOT [INCLUDE NULLS | EXCLUDE NULLS] ] ( value_column_name FOR name_column_name IN ( column_reference [ [ AS ] in_alias [, ...] ) ) [ [ AS ] alias [(column_alias, ...] ) ] ]

參數

with_subquery_table_name

WITH 子句 中子查詢所定義的資料表。

table_name

資料表或檢視的名稱。

alias

資料表或檢視的暫時替代名稱。必須為衍生自子查詢的資料表提供別名。在其他資料表參考中,別名是選用的。AS 關鍵字一律為選用。資料表別名提供了方便在查詢的其他部分中識別資料表的捷徑,例如 WHERE 子句。例如:

select * from sales s, listing l where s.listid=l.listid
column_alias

資料表或檢視中資料欄的暫時替代名稱。

subquery

判斷值為資料表的查詢表達式。資料表只會在查詢期間存在,通常會為其命名或提供別名。不過,不需要別名。您也可以為衍生自子查詢的資料表定義資料欄名稱。當您想要將子查詢的結果與其他資料表聯結時,以及您想要在查詢中的其他位置選取或限制這些資料欄時,為資料欄指定別名就很重要。

子查詢可包含 ORDER BY 子句,但是,若未指定 LIMIT 或 OFFSET 子句,則此子句不一定有作用。

PIVOT

將輸出從資料列旋轉為資料欄,以便以易於閱讀的格式表示資料表資料。輸出會橫跨多個資料欄表示。PIVOT 類似於具使用彙總的 GROUP BY 查詢,並且會使用彙總運算式來指定輸出格式。但是,與 GROUP BY 相反,其結果會以資料欄傳回,而不是資料列。

如需示範如何使用 PIVOT 和 UNPIVOT 進行查詢的範例,請參閱 PIVOT 和 UNPIVOT 範例

UNPIVOT

UNPIVOT 運算子會將輸入資料表或查詢結果的結果資料欄轉換為資料列,以便於閱讀輸出。UNPIVOT 會將其輸入資料欄的資料合併為兩個結果資料欄:名稱資料欄和值資料欄。名稱資料欄包含來自輸入中做為資料列項目的資料欄名稱。值資料欄包含來自輸入資料欄的值,例如彙總的結果。例如,各種類別中的項目計數。

如需示範如何使用 UNPIVOT 查詢半結構化資料 (例如 JSON 格式的資料) 的範例,請參閱 物件取消樞紐

NATURAL

定義聯結,此聯結會自動使用兩個資料表中所有同名資料欄的配對做為聯結資料欄。不需要明確的聯結條件。例如,若 CATEGORY 和 EVENT 資料表都有名為 CATID 的資料欄,則這兩個資料表的 natural 聯結會是透過其 CATID 資料欄的聯結。

注意

若已指定 NATURAL 聯結,但是要聯結的資料表中並沒有同名的資料欄配對,則查詢會預設為交叉聯結。

join_type

指定下列其中一種聯結類型:

  • [INNER] JOIN

  • LEFT [OUTER] JOIN

  • RIGHT [OUTER] JOIN

  • FULL [OUTER] JOIN

  • CROSS JOIN

交叉聯結是沒有限定的聯結,會傳回兩個資料表的笛卡兒乘積。

內部和外部聯結為限定聯結。它們會以隱含方式 (在 natural 聯結中)、在 FROM 子句中使用 ON 或 USING 語法,或使用 WHERE 子句條件限定。

內部聯結只會根據聯結條件或聯結資料欄清單傳回相符的資料列。外部聯結會傳回對等內部聯結傳回的所有資料列,加上「左側」資料表和/或「右側」資料表的不相符資料列。左側資料表是最先列出的資料表,右側資料表是其次列出的資料表。不相符的資料列包含要填入輸出資料欄中空處的 NULL 值。

ON join_condition

聯結規格的類型,其中聯結資料欄會做為條件陳述,後面接著 ON 關鍵字。例如:

sales join listing on sales.listid=listing.listid and sales.eventid=listing.eventid
USING ( join_column [, ...] )

聯結規格的類型,其中聯結資料欄會在括號內列出。若指定了多個聯結資料欄,則會以逗號分隔。USING 關鍵字必須放在清單前面。例如:

sales join listing using (listid,eventid)

使用須知

聯結資料欄必須採用可比較的資料類型。

NATURAL 或 USING 聯結只會針對中繼結果集內每個聯結資料欄配對保留一個。

使用 ON 語法的聯結則會保留其中繼結果集內的兩個聯結資料欄。

另請參閱WITH 子句