SELECT

从一个或多个数据源返回结果集:视图联接表和已命名查询

语法

[ AT epoch ] [ WITH-clause ] SELECT [ ALL | DISTINCT ]
    { * | { MATCH_COLUMNS('pattern') | expression [ [AS] alias ] }[,...] }
    [ into-table-clause ]
    [ from-clause ]
    [ where-clause ]
    [ time-series-clause ]
    [ group-by-clause[,...] ]
    [ having-clause[,...] ]
    [ match-clause ]
    [ union-clause ]
    [ intersect-clause ]
    [ except-clause ]
    [ order-by-clause [ offset-clause ]]
    [ limit-clause ]
    [ FOR UPDATE [ OF table-name[,...] ] ]

参数

AT epoch
返回指定时期的数据,其中 epoch 为以下几项之一:
  • EPOCH LATEST:返回数据直到当前时期(但不包括当前时期)。结果集包括来自最新提交的 DML 事务的数据。

  • EPOCH integer:返回数据直到 integer 指定的时期(包括该指定时期)。

  • TIME 'timestamp':从 timestamp 指定的时期返回数据。

有关 Vertica 如何使用时期的详细信息,请参阅时期

有关详细信息,请参阅历史查询

ALL | DISTINCT
  • ALL (默认值):保留结果集或组中的重复行。

  • DISTINCT:移除结果集或组中的重复行。

ALLDISTINCT 限定符必须紧跟在 SELECT 关键字后。只能有一个关键字实例出现在选择列表中。
*
列出查询的表中的所有列。
MATCH_COLUMNS('pattern')
返回查询的表中与模式匹配的所有列。
expression [[AS] alias]
一个表达式,通常解析为查询的表中的列数据,例如,在 FROM 子句中指定的 的名称;此外:

您可以选择性地为每个列表达式分配一个临时别名,并在 SELECT 语句的其他位置(例如,在查询谓词或 ORDER BY 子句中)引用该别名。Vertica 使用别名作为查询输出中的列标题。

FOR UPDATE
指定对查询中指定的所有表获取 X 锁定,最常在 READ COMMITTED 隔离中使用。

FOR UPDATE 需要对查询的表具有更新/删除权限,且无法从只读事务中发出。

特权

非超级用户:

  • 对架构的 USAGE 权限

  • 对表或视图的 SELECT 权限

示例

当多个客户端在以下示例查询中运行事务时,如果未使用 FOR UPDATE,则将发生死锁。两个事务获取 S 锁,当两者尝试升级到 X 锁时,将遇到死锁:

=> SELECT balance FROM accounts WHERE account_id=3476 FOR UPDATE;
    ...
=> UPDATE accounts SET balance = balance+10 WHERE account_id=3476;
=> COMMIT;

另请参阅