第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

  • 支持SQL语句: select, insert, update, delete分别用于查询、插入、更新、删除数据表中的记录。

  • 支持where条件。

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

  • 支持表连接。

区别

  • 通常标准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, slj

左连接和有序左连接。返回左表中所有与右表匹配的行。左连接返回的行数与左表的行数相同。如果右表中

有多个匹配的行,将会选择第一个匹配行。如果右表中没有匹配行,将返回NULL.左连接和有序左连接的唯

一区别是有序左连接的结果会根据连接字段排序。

INNER JOIN

ej, sej

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

行排序。

N/A

aj

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

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

N/A

wj, pwj

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

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

用聚合函数。