FROM 子句 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

FROM 子句

FROM 子句是查询的行的源。

<from-clause> :=    FROM <table-reference> { , <table-reference> }... <table-reference> :=    <table-name> [ <table-name> ] [ <correlation> ] | <joined-table> <table-name> :=  <identifier> <table-over> :=  OVER <window-specification> <window-specification> := (   <window-name> | <query_partition_clause> | ORDER BY <order_by_clause> | <windowing_clause>    ) <windowing-clause> :=    { ROWS | RANGE }    { BETWEEN    { UNBOUNDED PRECEDING      | CURRENT ROW      | <value-expression> { PRECEDING | FOLLOWING }    }       AND    { UNBOUNDED FOLLOWING      | CURRENT ROW      | <value-expression> { PRECEDING | FOLLOWING }    }    | { UNBOUNDED { PRECEDING | FOLLOWING }      | CURRENT ROW      | <value-expression> { PRECEDING | FOLLOWING }    }    }

有关窗口规范和窗口化子句的图表,请参阅 Window 语句下的 WINDOW 子句 (滑动窗口)

<correlation> :=    [ AS ] <correlation-name> [ '(' <column> { , <column> }... ')' ] <joined-table> :=    <table-reference> CROSS JOIN <table-reference>  | <table-reference> NATURAL <join-type> JOIN <table-reference>  | <table-reference> <join-type> JOIN <table-reference>       [ USING '(' <column> { , <column>}... ')'       | ON <condition>       ] <join-type> :=    INNER  | <outer-join-type> [ OUTER ] <outer-join-type> :=    LEFT  | RIGHT  | FULL

关系

有几种类型的关系可出现在 FROM 子句中:

  • 命名关系 (表、流)

  • 用圆括号括起的子查询。

  • 将两种关系组合起来的联接 (请参阅本指南中的主题“JOIN”)。

  • 转换表达式。

子查询在本指南的主题“查询”中有详述。

下面是子查询的一些示例:

// set operation as subquery // (finds how many departments have no employees) SELECT COUNT(*) FROM (  SELECT deptno FROM Dept  EXCEPT  SELECT deptno FROM Emp); // table-constructor as a subquery, // combined with a regular table in a join SELECT * FROM Dept AS d  JOIN (VALUES ('Fred', 10), ('Bill', 20)) AS e (name, deptno)  ON d.deptno = e.deptno;

与 SELECT 语句的其他部分中的子查询不同 (如 WHERE 子句 子句 (WHERE 条件子句) 中的子查询),FROM 子句中的子查询不能包含相关变量。例如:

// Invalid query. Dept.deptno is an illegal reference to // a column of another table in the enclosing FROM clause. SELECT * FROM Dept,  (SELECT *   FROM Emp   WHERE Emp.deptno = Dept.Deptno)

具有多个关系的 FROM 子句

如果 FROM 子句包含多个以逗号分隔的关系,该查询将构成这些关系的笛卡儿积;也就是说,它将每个关系中的每个行与所有其他关系中的每个行组合。

因此,FROM 子句中的逗号等效于 CROSS JOIN 运算符。

相关性名称

FROM 子句中的每个关系都可以使用 AS 相关性名称分配一个相关性名称。此名称是在整个查询中用来在表达式中引用关系的替代名称。(即使该关系可以是子查询或流,它也通常称为“表别名”以便与 SELECT 子句中定义的列别名区分开。)

如果不使用 AS 子句,命名关系的名称将成为其默认别名。(在流式查询中,OVER 子句不会阻止此默认分配发生。)

如果某个查询多次使用同一命名关系,或者多个关系中有任何一个是子查询或表表达式,则别名是必需的。

例如,在以下查询中,命名关系 EMPS 使用了两次;一次用于其默认别名 EMPS,另一次用于已分配别名 MANAGERS:

SELECT EMPS.NAME || ' is managed by ' || MANAGERS.NAME FROM LOCALDB.Sales.EMPS,  LOCALDB.Sales.EMPS AS MANAGERS WHERE MANAGERS.EMPNO = EMPS.MGRNO

别名可以选择后跟一个列列表:

SELECT e.empname, FROM LOCALDB.Sales.EMPS AS e(empname, empmgrno)

OVER 子句

OVER 子句仅适用于流式联接。有关更多详细信息,请参阅本指南中的主题 JOIN 子句