FROM 子句 - Amazon Redshift

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

FROM 子句

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

Syntax (語法)

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 進行查詢的範例,請參透視和不透視表示例

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

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 聯結中)、在 FROM 子句中使用 ON 或 USING 語法,或使用 WHERE 子句條件限定。

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

使用須知

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

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

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

另請參閱 WITH 子句