类别:

查询语法

FROM

指定要在 SELECT 语句中使用的表、视图或表函数。

另请参阅:

AT | BEFORECHANGESCONNECT BYJOINASOF JOINMATCH_RECOGNIZEPIVOTSAMPLE / TABLESAMPLEUNPIVOT使用联接分析时间序列数据

语法

SELECT ...
FROM objectReference [ JOIN objectReference [ ... ] ]
[ ... ]
Copy

其中:

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> )
   }
Copy
JOIN

此分子句指定在两个或多个表(或者视图或表函数)之间执行联接。联接可以是内部联接、外部联接或其他类型的联接。联接可以使用关键字 JOIN 或支持的替代联接语法。有关联接的更多详细信息,请参阅 JOINASOF JOIN

[ AS ] alias_name

指定一个名称,该名称将提供给它附加到的对象引用。可以与 FROM 子句中的任何其他分子句一起使用。

别名必须遵循 对象标识符 的规则。

VALUES

VALUES 子句可以指定要在 FROM 子句中使用的字面量值或表达式。此子句可以包含表别名和列别名(上图中未显示)。有关 VALUES 子句的更多详细信息,请参阅 VALUES

对象或表函数子句

[namespace.]object_name

指定要查询的对象(表或视图)的名称。

可以使用 namespace`(以 :samp:`db_name.schema_name.object_nameschema_name.object_name 的形式)限定对象名称。如果上下文可以从会话的当前数据库和架构派生,则不需要命名空间。

指定要查询的表/视图名称时,还可以指定以下可选分子句:

AT | BEFORE ( object_state )

可选分子句,为 Time Travel 指定表或视图的基于时间或基于事件的历史状态。有关更多详细信息,请参阅 AT | BEFORE

MATCH_RECOGNIZE

用于查找与模式匹配的行序列的可选分子句。有关更多详细信息,请参阅 MATCH_RECOGNIZE

table_function

指定要在 FROM 子句中调用的系统定义的或 UDF 表函数。有关更多详细信息,请参阅 表函数用户定义函数概述

PIVOT | UNPIVOT

可选分子句,指定透视或取消透视 FROM 子句的结果。有关更多详细信息,请参阅 PIVOTUNPIVOT

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');
Copy

以下是使用 FROM 子句的基本示例:

SELECT description, retail_price, wholesale_cost 
    FROM ftable1;
+-------------+--------------+----------------+
| DESCRIPTION | RETAIL_PRICE | WHOLESALE_COST |
|-------------+--------------+----------------|
| bling       |           14 |              6 |
+-------------+--------------+----------------+
Copy

此示例与上一个示例相同,但指定由表的架构限定的表名:

SELECT description, retail_price, wholesale_cost 
    FROM temporary_doc_test.ftable1;
+-------------+--------------+----------------+
| DESCRIPTION | RETAIL_PRICE | WHOLESALE_COST |
|-------------+--------------+----------------|
| bling       |           14 |              6 |
+-------------+--------------+----------------+
Copy

此示例创建一个内联视图,然后在查询中使用它:

SELECT v.profit 
    FROM (SELECT retail_price - wholesale_cost AS profit FROM ftable1) AS v;
+--------+
| PROFIT |
|--------|
|      8 |
+--------+
Copy

此示例查询表中 10% 数据的样本:

SELECT *
    FROM sales SAMPLE(10);
Copy

此示例执行 UDTF(用户定义的表函数):

SELECT *
    FROM TABLE(Fibonacci_Sequence_UDTF(6.0::FLOAT));
Copy

这些示例使用 AT 子句从过去的以下指定点返回历史数据:

  • 比当前时间早一天 (-86400 = -3600 * 24)。

  • 特定时间和日期。

SELECT *
    FROM sales AT(OFFSET => -86400);
SELECT *
    FROM sales AT(TIMESTAMP => '2018-07-27 12:00:00'::TIMESTAMP);
Copy

有关 AT 的更多详细信息,请参阅 AT | BEFORE

此示例查询位于命名暂存区中的文件:

SELECT
    v.$1, v.$2, ...
  FROM
    @my_stage( FILE_FORMAT => 'csv_format', PATTERN => '.*my_pattern.*') v;
Copy

以下示例检索名为 mystage 的暂存区 目录表 中的所有元数据列:

SELECT * FROM DIRECTORY(@mystage);
Copy

以下示例从大小超过 100 K 字节的文件中检索目录表的 FILE_URL 列值:

SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE SIZE > 100000;
Copy

以下示例从逗号分隔值文件中检索目录表的 FILE_URL 列值:

SELECT FILE_URL FROM DIRECTORY(@mystage) WHERE RELATIVE_PATH LIKE '%.csv';
Copy
语言: 中文