VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

支持ORDER BY后接表达式

功能描述

Vastbase G100在Oracle或者MySQL兼容模式下,SELECT DISTINCT | UNIQUE的查询列表中可以使用ORDER BY子句中未出现的列;ORDER BY子句中支持使用表达式。

注意事项

  • 该功能在数据库兼容模式为Oracle或者MySQL时能够使用(即创建DB时DBCOMPATIBILITY='A'或者'B'),在其他数据库兼容模式下不能使用该特性。

  • 在MySQL兼容模式下,此功能的使用受GUC参数vastbase_sql_mode的控制。MySQL兼容模式下的用法请参考DISTINCT列时可以使用非ORDER BY列,参数介绍请参考vastbase_sql_mode

语法格式

SELECT DISTINCT | UNIQUE
column_name [, ...]
FROM table_name
[WHERE condition]
ORDER BY expression [ASC|DESC];

参数说明

  • DISTINCT | UNIQUE

    从SELECT的结果集中删除所有重复的行,使结果集中的每行都是唯一的。

  • column_name

    指定子查询结果集中显示的列名。

  • table_name

    表名或视图名,名称前可加上模式名,如:schema_name.table_name。

  • [ WHERE condition ]

    WHERE子句构成一个行选择表达式,用来缩小SELECT查询的范围。

  • expression

    ORDER BY表达式,对SELECT语句检索得到的数据进行排序。

  • [ ASC | DESC ]

    查询结果的排序方式是升序(ASC)还是降序(DESC),默认是升序排列。

更多关于查询语法的详细说明请参考SELECT

示例

前置条件

1、使用vsql工具连接至客户端。

vsql -d vastbase -p 5432 -r

2、创建并切换至兼容模式为Oracle的数据库下。

CREATE DATABASE db_oracle dbcompatibility='A';    
\c db_oracle

示例1: 在ORDER BY子句中使用函数。

1、创建测试表并插入数据。

create table tmp(id int,id1 int);
insert into tmp values(5,15);
insert into tmp values(1,20);
insert into tmp values(null,10);
insert into tmp values(null,8);
insert into tmp values(20,7);
insert into tmp values(null,6);
insert into tmp values(null,4);
insert into tmp values(5,5);
insert into tmp values(null,null);
insert into tmp values(null,null);
insert into tmp values(2,2);
insert into tmp values(2,2);

2、查询测试表内容,并在ORDER BY子句中使用NVL函数。

select distinct id,id1 from tmp order by nvl(id,id1);

返回结果如下:

 id | id1
----+-----
  1 |  20
  2 |   2
    |   4
  5 |  15
  5 |   5
    |   6
    |   8
    |  10
 20 |   7
    |
(10 rows)

示例2: 在ORDER BY子句中使用算术表达式。

1、创建测试表并插入数据。

create table test_1009(id varchar(32),name varchar(32),source varchar(20));
insert into test_1009 values('1','zhangsan','100');
insert into test_1009 values('1','wanger','100');
insert into test_1009 values('12','lisi','98');
insert into test_1009 values('4','wangwu','78');
insert into test_1009 values('4','lisi','78');

2、查询测试表内容,在ORDER BY子句中使用算术表达式。

select distinct id from test_1009  order by (id+0),(source+0);

返回结果如下:

 id
----
 1
 4
 12
(3 rows)