- 类别:
FROM¶
指定要在 SELECT 语句中使用的表、视图或表函数。
- 另请参阅:
AT | BEFORE、CHANGES、CONNECT BY、JOIN、ASOF JOIN、MATCH_RECOGNIZE、PIVOT、SAMPLE / TABLESAMPLE、UNPIVOT、使用联接、分析时间序列数据
语法¶
SELECT ...
FROM objectReference [ JOIN objectReference [ ... ] ]
[ ... ]
其中:
objectReference ::= { [<namespace>.]<object_name> [ AT | BEFORE ( <object_state> ) ] [ CHANGES ( <change_tracking_type> ) ] [ MATCH_RECOGNIZE ] [ PIVOT | UNPIVOT ] [ [ AS ] <alias_name> ] [ SAMPLE ] | <table_function> [ PIVOT | UNPIVOT ] [ [ AS ] <alias_name> ] [ SAMPLE ] | ( VALUES (...) ) [ SAMPLE ] | [ LATERAL ] ( <subquery> ) [ [ AS ] <alias_name> ] | @[<namespace>.]<stage_name>[/<path>] [ ( FILE_FORMAT => <format_name>, PATTERN => '<regex_pattern>' ) ] [ [AS] <alias_name> ] | DIRECTORY( @<stage_name> ) }
JOIN
此分子句指定在两个或多个表(或者视图或表函数)之间执行联接。联接可以是内部联接、外部联接或其他类型的联接。联接可以使用关键字 JOIN 或支持的替代联接语法。有关联接的更多详细信息,请参阅 JOIN 和 ASOF JOIN。
[ AS ] alias_name
指定一个名称,该名称将提供给它附加到的对象引用。可以与 FROM 子句中的任何其他分子句一起使用。
别名必须遵循 对象标识符 的规则。
VALUES
VALUES
子句可以指定要在FROM
子句中使用的字面量值或表达式。此子句可以包含表别名和列别名(上图中未显示)。有关 VALUES 子句的更多详细信息,请参阅 VALUES。
对象或表函数子句¶
[namespace.]object_name
指定要查询的对象(表或视图)的名称。
可以使用
namespace`(以 :samp:`db_name.schema_name.object_name
或schema_name.object_name
的形式)限定对象名称。如果上下文可以从会话的当前数据库和架构派生,则不需要命名空间。指定要查询的表/视图名称时,还可以指定以下可选分子句:
AT | BEFORE ( object_state )
可选分子句,为 Time Travel 指定表或视图的基于时间或基于事件的历史状态。有关更多详细信息,请参阅 AT | BEFORE。
MATCH_RECOGNIZE
用于查找与模式匹配的行序列的可选分子句。有关更多详细信息,请参阅 MATCH_RECOGNIZE。
table_function
PIVOT | UNPIVOT
SAMPLE
可选分子句,指定对表/视图中的行进行采样。有关更多详细信息,请参阅 SAMPLE / TABLESAMPLE。
内联视图子句¶
[ LATERAL ] ( subquery )
指定 FROM 子句中的内联视图。如果使用可选的
LATERAL
关键字,则subquery
可以引用当前 FROM 子句中和内联视图左侧的其他表(或者视图或表函数)中的列。有关子查询的更多一般信息,请参阅 使用子查询。
暂存文件子句¶
@[namespace.]stage_name[/path]
指定要查询的命名暂存区(或指定
~
以引用当前用户的暂存区,或指定后跟表名的%
以引用指定表的暂存区)。查询暂存区时,还可以选择指定命名文件格式和模式:
( FILE_FORMAT => format_name [ , PATTERN => 'regex_pattern' ] )
指定用于暂存区的命名文件格式对象,和用于筛选暂存区中的文件集的模式。
有关查询暂存区的更多详细信息,请参阅 查询暂存文件中的数据。
目录表子句¶
DIRECTORY( @<stage_name> )
指定包含 目录表 的暂存区的名称。
分层查询结果¶
hierarchical_query_result
分层查询结果是使用子句(例如 CONNECT BY )查询分层数据表所产生的结果集。有关更多详细信息,请参阅 CONNECT BY。
使用说明¶
对象名称是 SQL 标识符。默认情况下,它们不区分大小写。要保留大小写,请将它们放在双引号 (
" "
) 之间。
示例¶
创建一个表并将数据加载到其中:
CREATE TABLE ftable1 (retail_price FLOAT, wholesale_cost FLOAT, description VARCHAR); INSERT INTO ftable1 (retail_price, wholesale_cost, description) VALUES (14.00, 6.00, 'bling');
以下是使用 FROM 子句的基本示例:
SELECT description, retail_price, wholesale_cost FROM ftable1; +-------------+--------------+----------------+ | DESCRIPTION | RETAIL_PRICE | WHOLESALE_COST | |-------------+--------------+----------------| | bling | 14 | 6 | +-------------+--------------+----------------+
此示例与上一个示例相同,但指定由表的架构限定的表名:
SELECT description, retail_price, wholesale_cost FROM temporary_doc_test.ftable1; +-------------+--------------+----------------+ | DESCRIPTION | RETAIL_PRICE | WHOLESALE_COST | |-------------+--------------+----------------| | bling | 14 | 6 | +-------------+--------------+----------------+
此示例创建一个内联视图,然后在查询中使用它:
SELECT v.profit FROM (SELECT retail_price - wholesale_cost AS profit FROM ftable1) AS v; +--------+ | PROFIT | |--------| | 8 | +--------+
此示例查询表中 10% 数据的样本:
SELECT * FROM sales SAMPLE(10);
此示例执行 UDTF(用户定义的表函数):
SELECT * FROM TABLE(Fibonacci_Sequence_UDTF(6.0::FLOAT));
这些示例使用 AT
子句从过去的以下指定点返回历史数据:
比当前时间早一天 (
-86400 = -3600 * 24
)。特定时间和日期。
SELECT * FROM sales AT(OFFSET => -86400); SELECT * FROM sales AT(TIMESTAMP => '2018-07-27 12:00:00'::TIMESTAMP);有关
AT
的更多详细信息,请参阅 AT | BEFORE。
此示例查询位于命名暂存区中的文件:
SELECT v.$1, v.$2, ... FROM @my_stage( FILE_FORMAT => 'csv_format', PATTERN => '.*my_pattern.*') v;
以下示例检索名为 mystage
的暂存区 目录表 中的所有元数据列:
SELECT * FROM DIRECTORY(@mystage);
以下示例从大小超过 100 K 字节的文件中检索目录表的 FILE_URL 列值:
SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE SIZE > 100000;
以下示例从逗号分隔值文件中检索目录表的 FILE_URL 列值:
SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE RELATIVE_PATH LIKE '%.csv';