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号查得。

        img 说明:

        • 闪回查询不能跨越影响表结构或物理存储的语句,否则会报错。即闪回点和当前点之间,如果执行过修改表结构或影响物理存储的语句(TRUNCATE、DDL、DCL、VACUUM FULL),则闪回失败,报错:ERROR: The table definition of T1 has been changed。
        • 闪回点过旧时,因闪回版本被回收等导致无法获取旧版本会导致闪回失败,报错:Restore point too old。可通过将version_retention_agevacuum_defer_cleanup_age设置成同值,配置闪回功能旧版本保留期限,取值范围是0~1000000,值为0表示VACUUM不会延迟清除无效的行存记录。
        • 通过时间方式指定闪回点,闪回数据和实际时间点最多偏差为3秒。
posted @ 2024-07-29 17:22  openGauss-bot  阅读(90)  评论(0)    收藏  举报