高级SQL关键字
除了支持标准SQL关键字外,Vastbase E100还支持常见地高级SQL关键字:
WITH关键字
WITH查询是Vastbase E100支持的高级SQL特性之一,使用WITH查询在复杂查询中定义一个辅助语句,可以简化SQL并且减少嵌套,因为可以预先定义辅助语句,之后在主查询中多次调用。这一特性常用于复杂查询或递归查询应用场景。
WITH regional_sales AS ( SELECT region, SUM(amount) AS total_sales FROM Orders GROUP BY Region ), top_regions AS ( SELECT region FROM regional_sales WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales) ) SELECT region, product, SUM(quantity) AS product_units, SUM(amount) AS product_sales FROM orders WHERE region IN (SELECT region FROM top_regions) GROUP BY region, product;
RETURNING关键字
Vastbase E100的RETURNING特性可以返回DML修改的数据,具体为三个场景:INSERT语句后接RETURNING属性返回插入的数据;UPDATE语句后接RETURNING属性返回更新后的新值;DELETE语句后接RETURNING属性返回删除的数据。这个特性的优点在于不需要额外的SQL获取这些值,能够方便应用开发。
UPSERT关键字
Vastbase E100的UPSERT特性是指INSERT…ON CONFLICT UPDATE,用来解决在数据插入过程中数据冲突的情况,比如违反用户自定义约束,在日志数据应用场景中,通常会在事务中批量插入日志数据,如果其中有一条数据违反表上的约束,则整个插入事务将会回滚,而Vastbase E100的UPSERT特性能解决这一问题。
INSERT INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] [ ON CONFLICT [ conflict_target ] conflict_action ] where conflict_target can be one of: ( { index_column_name | ( index_expression ) } [ COLLATE collation ] ON CONSTRAINT constraint_name and conflict_action is one of: DO NOTHING DO UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = [ ROW ] ( { expression | DE ( column_name [, ...] ) = ( sub-SELECT )} [, ...][ WHERE condition ]
CASE关键字
CASE表达式是一种通用的条件表达式,类似于其它编程语言中的 if/else 语句:
CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
CASE子句可以用于任何表达式可以出现的地方。每一个condition是一个返回boolean结果的表达式。如果结果为真,那么CASE表达式的结果就是符合条件的result,并且剩下的CASE表达式不会被处理。如果条件的结果不为真,那么以相同方式搜寻任何随后的WHEN子句。如果没有WHEN condition为真,那么CASE表达式的值就是在ELSE子句里的result。如果省略了ELSE子句而且没有条件为真,结果为空。
例子:
SELECT * FROM test; a --- 1 2 3 SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other