

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# FROM 子句
<a name="r_FROM_clause30"></a>

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

**Topics**
+ [語法](#r_FROM_clause30-synopsis)
+ [Parameters](#r_FROM_clause30-parameters)
+ [使用須知](#r_FROM_clause_usage_notes)
+ [PIVOT 和 UNPIVOT 範例](r_FROM_clause-pivot-unpivot-examples.md)
+ [JOIN 範例](r_Join_examples.md)
+ [UNNEST 範例](r_FROM_clause-unnest-examples.md)

## 語法
<a name="r_FROM_clause30-synopsis"></a>

```
FROM table_reference [, ...]
```

其中 *table\$1reference* 是下列其中一項：

```
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference  join_type super_expression 
   [ ON join_condition ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
( super_expression.attribute_name ) AS value_alias [ AT index_alias ]
UNNEST ( column_reference )
  [AS] table_alias ( unnested_column_name )
UNNEST ( column_reference ) WITH OFFSET
  [AS] table_alias ( unnested_column_name, [offset_column_name] )
```

選用的 *table\$1alias* 可用來為資料表和複雜資料表參考提供暫時的名稱，如有需要，也可以提供其欄的名稱，如下所示：

```
[ AS ] alias [ ( column_alias [, ...] ) ]
```

## Parameters
<a name="r_FROM_clause30-parameters"></a>

 *with\$1subquery\$1table\$1name*   
[WITH 子句](r_WITH_clause.md) 中子查詢所定義的資料表。

 *table\$1name*   
資料表或檢視的名稱。

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

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

 *column\$1alias*   
資料表或檢視中資料欄的暫時替代名稱。

 *subquery*   
判斷值為資料表的查詢表達式。資料表只會在查詢期間存在，通常會為其命名或提供*別名*。不過，不需要別名。您也可以為衍生自子查詢的資料表定義資料欄名稱。當您想要將子查詢的結果與其他資料表聯結時，以及您想要在查詢中的其他位置選取或限制這些資料欄時，為資料欄指定別名就很重要。  
子查詢可包含 ORDER BY 子句，但是，若未指定 LIMIT 或 OFFSET 子句，則此子句不一定有作用。

NATURAL   
定義聯結，此聯結會自動使用兩個資料表中所有同名資料欄的配對做為聯結資料欄。不需要明確的聯結條件。例如，若 CATEGORY 和 EVENT 資料表都有名為 CATID 的資料欄，則這兩個資料表的 natural 聯結會是透過其 CATID 資料欄的聯結。  
若已指定 NATURAL 聯結，但是要聯結的資料表中並沒有同名的資料欄配對，則查詢會預設為交叉聯結。

 *join\$1type*   
指定下列其中一種聯結類型：  
+ [INNER] JOIN 
+ LEFT [OUTER] JOIN 
+ RIGHT [OUTER] JOIN 
+ FULL [OUTER] JOIN 
+ CROSS JOIN 
交叉聯結是沒有限定的聯結，會傳回兩個資料表的笛卡兒乘積。  
內部和外部聯結為限定聯結。它們會以隱含方式 (在 natural 聯結中)、在 FROM 子句中使用 ON 或 USING 語法，或使用 WHERE 子句條件限定。  
內部聯結只會根據聯結條件或聯結資料欄清單傳回相符的資料列。外部聯結會傳回對等內部聯結傳回的所有資料列，加上「左側」資料表和/或「右側」資料表的不相符資料列。左側資料表是最先列出的資料表，右側資料表是其次列出的資料表。不相符的資料列包含要填入輸出資料欄中空處的 NULL 值。

ON *join\$1condition*   
聯結規格的類型，其中聯結資料欄會做為條件陳述，後面接著 ON 關鍵字。例如：  

```
sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
```

USING ( *join\$1column* [, ...] )   
聯結規格的類型，其中聯結資料欄會在括號內列出。若指定了多個聯結資料欄，則會以逗號分隔。USING 關鍵字必須放在清單前面。例如：  

```
sales join listing
using (listid,eventid)
```

PIVOT  
將輸出從資料列旋轉為資料欄，以便以易於閱讀的格式表示資料表資料。輸出會橫跨多個資料欄表示。PIVOT 類似於具使用彙總的 GROUP BY 查詢，並且會使用彙總運算式來指定輸出格式。但是，與 GROUP BY 相反，其結果會以資料欄傳回，而不是資料列。  
如需示範如何使用 PIVOT 和 UNPIVOT 進行查詢的範例，請參閱 [PIVOT 和 UNPIVOT 範例](r_FROM_clause-pivot-unpivot-examples.md)。

UNPIVOT  
*使用 UNPIVOT 將欄輪換到列中* - 運算子會將輸入資料表或查詢結果的結果欄轉換為列，讓輸出內容更容易閱讀。UNPIVOT 會將其輸入資料欄的資料合併為兩個結果資料欄：名稱資料欄和值資料欄。名稱資料欄包含來自輸入中做為資料列項目的資料欄名稱。值資料欄包含來自輸入資料欄的值，例如彙總的結果。例如，各種類別中的項目計數。  
*使用 UNPIVOT (SUPER) 取消樞紐的物件* - 您可以執行物件取消樞紐，其中 *expression* 是參考另一個 FROM 子句項目的 SUPER 表達式。如需詳細資訊，請參閱[物件取消樞紐](query-super.md#unpivoting)。另外也有範例示範如何查詢半結構化資料，例如 JSON 格式的資料。

*super\$1expression*  
有效的 SUPER 表達式。Amazon Redshift 會針對指定的屬性中的每個值傳回一列。如需 SUPER 資料類型的詳細資訊，請參閱 [SUPER 類型](r_SUPER_type.md)。如需非巢狀 SUPER 值的詳細資訊，請參閱 [解除巢狀化查詢](query-super.md#unnest)。

*屬性\$1名稱*  
SUPER 表達式中屬性的名稱。

*index\$1alias*  
索引的別名，表示 SUPER 表達式中值的位置。

UNNEST  
展開巢狀結構 (通常是 SUPER 陣列) 成為包含非巢狀元素的欄。如需解除巢狀化 SUPER 資料的詳細資訊，請參閱 [查詢半結構化資料](query-super.md)。如需範例，請參閱 [UNNEST 範例](r_FROM_clause-unnest-examples.md)。

*unnested\$1column\$1name*  
包含非巢狀元素的欄名稱。

UNNEST ... WITH OFFSET  
將位移欄新增至非巢狀輸出，其位移代表陣列中每個元素從零開始的索引。當您想要查看陣列內元素的位置時，此變體會很有用。如需解除巢狀化 SUPER 資料的詳細資訊，請參閱 [查詢半結構化資料](query-super.md)。如需範例，請參閱 [UNNEST 範例](r_FROM_clause-unnest-examples.md)。

*offset\$1column\$1name*  
位移欄的自訂名稱，可讓您明確定義索引欄在輸出中的顯示方式。此為選用參數。根據預設，位移欄名稱為 `offset_col`。

## 使用須知
<a name="r_FROM_clause_usage_notes"></a>

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

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

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

另請參閱[WITH 子句](r_WITH_clause.md)。