SemDB 示例教程
数据变换:单表变换

这里我们介绍如何在 SemDB 系统内使用 SQL 语句对表格进行数据变换。

我们从一个已经导入数据的快照开始操作。系统内包含两个表格,如下图所示。

一个最简单的视图定义语句仅包含 select 和 from 两部分,在 from 部分指定表格时需采用 {目录名}.{表格名} 的格式, 在 select 部分包含若干表达式(以及指定所生成的列名称,如果不进行指定的话会自动生成名称)。 我们先考虑 from 部分仅包含一个表格的情形,对于这种简单的情形,整个视图相当于对一个表格的每一行做了一个变换。

{
  "select": ["id", "A + B AS sum", "A - B AS diff"],
  "from": ["dir.a"]
}

我们在 SemDB 系统内创建这个视图(可以在左侧的视图设置界面完成,也可以在右侧直接输入JSON代码),可以看到其结果如下所示。

当然,在视图定义时,from 部分所指向的表格也可以是定义出来的视图,我们可以在刚才创建的视图的基础上定义一个新的视图。

{
  "select": ["id", "sum + diff AS 2A", "sum - diff AS 2B"],
  "from": ["dir.single"]
}

其结果如下。

再考虑一个稍微复杂一点的语句,我们尝试加入 where 部分,where 部分的作用是对原始表格进行筛选,其内包含若干个表达式。我们来看一个简单的例子。

{
  "select": ["id", "A + B AS sum", "A - B AS diff"],
  "from": ["dir.a"],
  "where": ["A < 5"]
}

其结果如下所示。

where 语句的筛选条件可以任意复杂,而表达式撰写的详细说明可以在系统内的附录中查看。 这里举一个相对简单的例子,如果我们想查询至少满足两个条件之一的数据行,可以用 || 符号连接两个子条件。

{
  "select": ["id", "A + B AS sum", "A - B AS diff"],
  "from": ["dir.a"],
  "where": ["A < 5 || B < 3"]
}

结果如下。

如果 where 语句包含多个筛选条件,则会筛选出满足全部条件的数据点。如下例所示:

{
  "select": ["id", "A + B AS sum", "A - B AS diff"],
  "from": ["dir.a"],
  "where": ["A < 5", "B < 3"]
}

结果如下。

此外,如果需要保留原始数据表格的全部列,则可以在 select 部分填写单个星号,如下例所示:

 { "select": ["*"], "from": ["dir.a"], "where": ["A < 5", "B < 3"] } 

结果如下。

最后,如果视图定义语句的 from 部分为空,则会直接生成一个包含一行的表格。

 { "select": ["1 AS a", "2 AS b"], "from": [] } 

结果如下。

© 2025