openGauss SQL参考—SQL语法:SELECT(3)
参数说明
-
WITH [ RECURSIVE ] with_query [, …]
用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于只在主查询中存在的临时表,其可以将复杂的查询简化。
其中with_query的详细格式为:
with_query_name [ ( column_name [, ...] ) ] AS ( {select | values | insert | update | delete} )- with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。
- column_name指定子查询结果集中显示的列名。
- 每个子查询可以是SELECT、VALUES、INSERT、UPDATE或DELETE语句。
如果声明了RECURSIVE,那么允许AS后的SELECT子查询通过名称引用自己,详细格式为:
non_recursive_term UNION [ ALL | DISTINCT ] recursive_term- 即由非递归项、UNION、递归项组成
- 只有递归项中可以引用自己
- 每个查询中只允许一个递归自引用
-
plan_hint子句
以/*+ */的形式在SELECT关键字后,用于对SELECT对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。
-
ALL
声明返回所有符合条件的行,是默认行为,可以省略该关键字。
-
DISTINCT [ ON ( expression [, …] ) ]
从SELECT的结果集中删除所有重复的行,使结果集中的每行都是唯一的。
ON ( expression [, …] ) 只保留那些在给出的表达式上运算出相同结果的行集合中的第一行。
须知: DISTINCT ON表达式是使用与ORDER BY相同的规则进行解释的。除非使用了ORDER BY来保证需要的行首先出现,否则,“第一行” 是不可预测的。 -
SELECT列表
指定查询表中列名,可以是部分列或者是全部(使用通配符*表示)。
通过使用子句AS output_name可以为输出字段取个别名,这个别名通常用于输出字段的显示。支持关键字name、value和type作为列别名。
列名可以用下面几种形式表达:
- 手动输入列名,多个列之间用英文逗号(,)分隔。
- 可以是FROM子句里面计算出来的字段。
-
INTO子句
将select出的结果输出到指定用户自定义变量或文件。
-
var_name
用户自定义的变量名。详见SET章节中的var_name。
-
OUTFILE
-
CHARACTER SET 指定编码格式。
-
FIELDS 指定每个字段的属性:
TERMINATED 指定间隔符。
[OPTIONALLY] ENCLOSED 指定引号符,指定OPTIONALLY时只对字符串数据类型起作用。
ESCAPED 指定转义符。
-
LINES 指定行属性:
STARTING 指定行开头。
TERMINATED 指定行结尾。
-
-
DUMPFILE
导出无间隔符,无换行符的单行数据到文件。
-
file_name
指定文件的绝对路径。
into_option三处位置: --在from子句之前。 openGauss=# select * into @my_var from t; --在锁定子句之前。 openGauss=# select * from t into @my_var for update; --在select语句结尾。 openGauss=# select * from t for update into @my_var;
导出到文件: openGauss=# select * from t; a | b —+— 1 | a (1 row) --导出数据到outfile文件。 openGauss=# select * from t into outfile '/home/openGauss/t.txt'FIELDS TERMINATED BY '~' ENCLOSED BY 't' ESCAPED BY '^' LINES STARTING BY '$' TERMINATED BY '&\n'; 文件内容:$t1t~tat&,其中LINES STARTING BY($),FIELDS TERMINATED BY(~),ENCLOSED BY(t),LINES TERMINATED BY(&\n)。 --导出数据到dumpfile文件。 openGauss=# select * from t into dumpfile '/home/openGauss/t.txt'; 文件内容:1a
-
-
FROM子句
为SELECT声明一个或者多个源表。
FROM子句涉及的元素如下所示。
-
table_name
表名或视图名,名称前可加上模式名,如:schema_name.table_name。
-
alias
给表或复杂的表引用起一个临时的表别名,以便被其余的查询引用。
别名用于缩写或者在自连接中消除歧义。如果提供了别名,它就会完全隐藏表的实际名称。
-
TABLESAMPLE sampling_method ( argument [, …] ) [ REPEATABLE ( seed ) ]
table_name 之后的 TABLESAMPLE 子句表示应该用指定的 sampling_method 来检索表中行的子集。sampling_method 可以被指定为以下方法:
- bernoulli,按行采样。
- system,按块(页)采样。
- hybrid,混合采样,argument 可以分别指定按行采样和按块(页)采样的百分比。
argument 部分用来指定采样百分比,是一个非空数值表达式(如10或'10'),取值范围是
[0.000001,100)。可选的 REPEATABLE 部分指定一个用于产生采样方法中随机数的种子值 seed,是一个非空数值表达式(如10或'10'),种子值的取值范围是
[0,4294967295]。如果查询时表没有被更改,指定相同 seed 和 argument 值的两个查询将会选择该表相同的采样。但是不同的种子值通常将会产生不同的采样。如果没有给出 REPEATABLE,则会基于一个系统产生的种子为每一个查询选择一个新的随机采样。table_name 可以是普通表,分区表,普通视图,物化视图和键保留(key-preserved)的连接视图;普通视图指在单表上查询创建的视图;键保留的连接视图指对键保留表进行连接操作后创建的视图,但不支持对包含超过一个非键保留表的连接视图进行数据采样。
-
TIMECAPSULE { TIMESTAMP | CSN } expression
查询指定CSN点或者指定时间点表的内容。
目前不支持闪回查询的表:系统表、列存表、内存表、DFS表、全局临时表、本地临时表、UNLOGGED表、分区表、视图、序列表、Hbkt表、共享表、继承表、带有PARTIAL CLUSTER KEY约束的表。
-
TIMECAPSULE TIMESTAMP
关键字,闪回查询的标识,根据date日期,闪回查找指定时间点的结果集。date日期必须是一个过去有效的时间戳。
-
TIMECAPSULE CSN
关键字,闪回查询的标识,根据表的CSN闪回查询指定CSN点的结果集。其中CSN可从gs_txn_snapshot记录的snpcsn号查得。
说明:- 闪回查询不能跨越影响表结构或物理存储的语句,否则会报错。即闪回点和当前点之间,如果执行过修改表结构或影响物理存储的语句(TRUNCATE、DDL、DCL、VACUUM FULL),则闪回失败,报错:ERROR: The table definition of T1 has been changed。
- 闪回点过旧时,因闪回版本被回收等导致无法获取旧版本会导致闪回失败,报错:Restore point too old。可通过将version_retention_age和vacuum_defer_cleanup_age设置成同值,配置闪回功能旧版本保留期限,取值范围是0~1000000,值为0表示VACUUM不会延迟清除无效的行存记录。
- 通过时间方式指定闪回点,闪回数据和实际时间点最多偏差为3秒。
-
-

浙公网安备 33010602011771号