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[,...] ] ]
注意
SELECT 语句还可以嵌入各种指令或*提示*,可用于控制给定查询的处理方式,例如,联接提示(如强制执行联接类型(合并或哈希联接)的 JTYPE)。
有关使用 Vertica 提示的详细信息,请参阅提示。
参数
-
AT epoch
- 返回指定时期的数据,其中 epoch 为以下几项之一:
-
EPOCH LATEST:返回数据直到当前时期(但不包括当前时期)。结果集包括来自最新提交的 DML 事务的数据。
-
EPOCH integer:返回数据直到 integer 指定的时期(包括该指定时期)。
-
TIME 'timestamp':从 timestamp 指定的时期返回数据。
注意
这些选项用于查询临时表或外部表。有关 Vertica 如何使用时期的详细信息,请参阅时期。
有关详细信息,请参阅历史查询。
-
ALL | DISTINCT
-
ALL
(默认值):保留结果集或组中的重复行。 -
DISTINCT
:移除结果集或组中的重复行。
ALL
或DISTINCT
限定符必须紧跟在SELECT
关键字后。只能有一个关键字实例出现在选择列表中。-
*
- 列出查询的表中的所有列。
当心
选择查询的表中的所有列会产生一个极大和极宽的结果集,这会对性能产生不利影响。 -
MATCH_COLUMNS('pattern')
- 返回查询的表中与模式匹配的所有列。
-
expression [[AS] alias]
- 一个表达式,通常解析为查询的表中的列数据,例如,在 FROM 子句中指定的 列的名称;此外:
您可以选择性地为每个列表达式分配一个临时别名,并在 SELECT 语句的其他位置(例如,在查询谓词或 ORDER BY 子句中)引用该别名。Vertica 使用别名作为查询输出中的列标题。
FOR UPDATE
- 指定对查询中指定的所有表获取 X 锁定,最常在
READ COMMITTED
隔离中使用。FOR UPDATE
需要对查询的表具有更新/删除权限,且无法从只读事务中发出。
特权
非超级用户:
-
对架构的 USAGE 权限
-
对表或视图的 SELECT 权限
注意
作为视图所有者,只有在以下情况之一为真时,您才能授予其他用户对视图的 SELECT 权限:
-
您拥有视图的基表。
-
您对视图的基表具有 SELECT...WITH GRANT OPTION 权限。
示例
当多个客户端在以下示例查询中运行事务时,如果未使用 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;