第 8 章:SQL 语句

本章涵盖了 SQL 语句在 DolphinDB 中访问、获取以及操作数据的使用方法。SQL 就是结构化查询语言。DolphinDB 的 SQL 格式与一些关系型数据库管理系统中的标准 SQL 语言十分相似,比如 MySQL, Oracle, SQL Server 等。

语法

select [top_clause] column_expressions
from table_name | table_expression
[where filtering_conditions]
[grouping_clause [having_clause] | order_clause]

支持标准的 SQL

  • 支持 select, insert, update, delete 语句分别用于查询、插入、更新、删除数据表中的记录。从 1.30.17 及 2.00.5 开始,DolphinDB 支持 create 语句创建数据库(表),alter 语句为表增加列。

  • 支持 where 条件。

  • 支持分组 (group by) 和排序 (order by) 子句。

  • 支持表连接:inner join, left join, left semijoin, full join。

区别

  • 通常标准 SQL 语句不区分字母的大小写,而 DolphinDB 的 SQL 语句区分大小写。DolphinDB 中的 SQL 关键字必须使用小写。

  • 可在 SQL 查询中直接使用绝大部分函数。

  • 其它区别如下表所示:

标准 SQL 语法 | DolphinDB 语法

解释

where sym='IBM'

where sym=`IBM ("IBM") or

where sym==`IBM ("IBM")

DolphinDB 中,单词上加上反引号,即可表示成字符串。

DolphinDB 中,一个单词或者一个句子上使用双引号或者单引号,即可将其表示成字符串。

where sym='IBM' and qty>2000

where sym==`IBM, qty>2000

where sym==`IBM and qty>2000

where sym=`IBM && qty>2000

DolphinDB 中,逗号 (,) 表示执行顺序,并且效率更高。只有在前一个条件通过后才会继续验证下一个条件。

where sym="IBM" or qty>2000

where sym==`IBM or qty>2000

where sym==`IBM || qty>2000

where x not in (1,2) and y not in (22,23)

where (not x in [1,2]) and (not y in (22,23))

DolphinDB 不支持 NOT IN 运算符。

select avg(price), sym from Dataset group by sym

select avg(price) from Dataset group by sym 或

select avg(price), sym from Dataset group by sym

DolphinDB 中,group by 的列名如果在 select 中未指定,则会自动添加到结果中。

N/A

context by

context by 是 DolphinDB 的独有的创新,它使得在处理各组内时间序列时非常方便。context by 与 group by

相似,但是 group by 的结果为每一组返回一个标量值,而 context by 的结果为 每一组返回一个与组内记录

数同样长度的向量。

N/A

pivot by

pivot by 将数据转换成二维视图。

N/A

cgroup by

N/A

map

将 SQL 语句在每个分区分别执行,然后将结果合并。

case .... when ....

iif

select column_name(s)

from table1 left join table 2

on table1.column_name=table2.column_name

select column_name(s) from lj(table1, table2, column_name)

DolphinDB 的语法更简洁。

LEFT JOIN

lj, lsj, left join, left semijoin

左连接和左半连接。左连接返回左表中所有与右表匹配的行。如果右表中如果右表中没有匹配的记录,

将会返回NULL。如果右表中有多条匹配记录,将会返回所有的匹配记录。与左连接不同的是如果右表中有

多条匹配记录,左半连接只返回第一条匹配的记录。

INNER JOIN

ej, sej, inner join

等值连接和有序等值连接。返回与匹配列相等的行。sej 和 ej 的区别 sej 对连接结果的表根据连接字段进

行排序。

FULL JOIN

fj, full join

完全连接。返回左表和右表的所有行。

N/A

aj

asof 连接。它把左表中的每一条记录作为标准,并且检查右表中是否有匹配行。如果没有完全匹配的行,将

会选择最近的行。如果有多个匹配行,将会选择最后一行。

N/A

wj, pwj

窗口连接和现行窗口连接。它们是 asof 连接的扩展。对于左表中的每一行,窗口连接把聚合函数应用到在滑

动窗口中右表的行。如果右表中没有与窗口匹配的值,现行窗口连接会选择滑动窗口的前一个值,并对它使

用聚合函数。