openGauss插件使用指南:SQL语法—SELECT(1)

SELECT

功能描述

SELECT用于从表或视图中取出数据。

SELECT语句就像叠加在数据库表上的过滤器,利用SQL关键字从数据表中过滤出用户需要的数据。

注意事项

  • 对比原openGauss的SELECT语法,新增了WHERE子句下的sounds like语法。

  • 新增join不带on/using,效果与cross join一致。

  • 新增PARTITION子句可指定多个分区。

  • 新增UNION子句列如果没有相似的数据类型,会采取转换为text类型的方式进行处理。

  • 新增FROM DUAL 语法,含义等同于不写FROM子句,是为了满足那些要求所有SELECT语句都应该包含FROM的情况。

  • SELECT语法的output_name部分名称,可以在不带引号不使用AS的情况下,使用关键字作为别名。此处关键字可用范围由于实现差异与MySQL比较尚存差异,详细的不一致列表参考文末说明。

  • 在openGauss中,支持a!作为阶乘计算,这种计算在MySQL并未支持,与关键字不带引号作为别名存在实现冲突,后续dolphin中放弃支持。

  • SELECT语法中的from_item部分,表的别名也可以在不带引号不使用AS的情况下,使用关键字作为别名。此处关键字可用范围由于实现差异与MySQL比较尚存差异,详细的不一致列表参考文末说明。

语法格式

  • 查询数据
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [/*+ plan_hint */] [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
{ * | {expression [ [ AS ] output_name ]} [, ...] }
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ [ START WITH condition ] CONNECT BY [NOCYCLE] condition [ ORDER SIBLINGS BY expression ] ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW {window_name AS ( window_definition )} [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ]
[ LIMIT { [offset,] count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ {FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT ]} [...] ];
  • 其中指定查询源from_item为:

    {[ (ONLY) ] table_name [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    [ TABLESAMPLE sampling_method ( argument [, ...] ) [ REPEATABLE ( seed ) ] ]
    [TIMECAPSULE {TIMESTAMP|CSN} expression]
    |( select ) [ AS ] alias [ ( column_alias [, ...] ) ]
    |with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
    |function_name ( [ argument [, ...] ] ) [ AS ] alias [ ( column_alias [, ...] | column_definition [, ...] ) ]
    |function_name ( [ argument [, ...] ] ) AS ( column_definition [, ...] )
    |from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]
    |(from_item [, ...], from_item)}
    

     说明: 当开启dolphin.b_compatibility_mode时,table_name后不带as的场景下,只允许接alias,不允许接alias(column_alias)。 即[ (ONLY) ] table_name [ * ] [ partition_clause ] [ AS alias [ ( column_alias [, …] ) ] | alias ]

  • 其中不写FROM 子句的情况等价于:

    FROM DUAL
    
  • 其中group子句为:

    ( )
    | expression
    | ( expression [, ...] )
    | rollup_clause
    | CUBE ( { expression | ( expression [, ...] ) } [, ...] )
    | GROUPING SETS ( grouping_element [, ...] )
    
  • 其中指定分区partition_clause为:

    PARTITION { ( partition_name [, ...] ) | 
            FOR (  partition_value [, ...] ) }
    

     说明: 指定分区只适合分区表。

    rollup_clause子句为:

    ROLLUP ( { expression | ( expression [, ...] ) } [, ...] )
    | { expression | ( expression [, ...] ) } WITH ROLLUP
    
  • JOIN语法

[JOIN | INNER JOIN] {ON join_condition | USING ( join_column [, ...] ) }

参数说明

  • WHERE子句

    sounds like是condition的一种语法,用法如:column_name sounds like '字符'; 相当于soundex(column_name) = soundex('字符')的对比结果,是一个boolean的值。用于通过soundex处理来查询满足条件的数据。

    where 子句可以包含兼容MySQL全文索引的查询语法。match(column_name [, …]) against ('匹配字符')也是condition的一种语法。

    where match(column_name [, ...]) against ('匹配字符');
    

    column_name可以是多列,列名之间用逗号分隔。 against()的匹配字符只能是字符内容(即全文索引支持字段类型只能是这三种char, varchar, text),不包含int, bool, 特殊字符(!,#,空格等)与正规功能。 注意: mysql的全文索引查询语法match(column_name)允许无序,但该功能底层用的是opengauss的to_tsvector(),他的要求是字段顺序必须有序(与表的字段顺序一致)。

    用于安装了dolphin插件,处于MySQL兼容性场景下的全文索引查询。其语法结构相当于

    to_tsvector('ngram', col_name [|| col_name]) @@ to_tsquery('字符串')
    
  • UNION子句 UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列,列如果没有相似的数据类型或者为UNKNOWN类型,会采取转换为text类型的方式进行处理。

    UNION子句有如下约束条件:

    • 除非声明了ALL子句,否则缺省的UNION结果不包含重复的行。
    • 同一个SELECT语句中的多个UNION操作符是从左向右计算的,除非用圆括弧进行了标识。
    • FOR UPDATE,FOR NO KEY UPDATE,FOR SHARE和FOR KEY SHARE不能在UNION的结果或输入中声明。

    一般表达式:

    select_statement UNION [ALL] select_statement

    • select_statement可以是任何没有ORDER BY、LIMIT、FOR UPDATE,FOR NO KEY UPDATE,FOR SHARE或FOR KEY SHARE子句的SELECT语句。
    • 如果用圆括弧包围,ORDER BY和LIMIT可以附着在子表达式里。

 说明:

涉及的其它参数说明可见SELECT

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值