SQL查询到JSONiq查询

时间:2016-12-11 17:56:43

标签: sql json jsoniq

我想将SQL查询转换为JSONiq查询,是否已经有了这个实现,如果不是,我需要知道什么才能创建可以执行此操作的程序?

1 个答案:

答案 0 :(得分:1)

我不了解实施情况,但技术上可行且简单明了。 JSONiq有90%的DNA来自XQuery,它本身也是由参与SQL的人设计的。

从数据模型的角度来看,表被映射到一个集合,表的每一行都映射到一个平面JSON对象,即所有字段都是原子值,如下所示:

{
  "Name" : "Turing",
  "First" : "Alan",
  "Job" : "Inventor"
}

然后,通过将SELECT-FROM-WHERE查询转换为FLWOR表达式来完成映射,这些表达式提供了SQL功能的超集。

例如:

SELECT Name, First
FROM people
WHERE Job = "Inventor"

可以映射到:

for $person in collection("people")
where $person.job eq "Inventor"
return project($person, ("Name", "First"))

更复杂的查询也可以非常直接地映射:

SELECT Name, COUNT(*)
FROM people
WHERE Job = "Inventor"
GROUP BY Name
HAVING COUNT(*) >= 2

为:

for $person in collection("people")
where $person.job eq "Inventor"
group by $name := $person.name
where count($person) ge 2
return {
  name: $name,
  count: count($person)
}

实际上,如果for被称为fromreturn被称为select,如果这些关键字是大写的,那么JSONiq的语法会非常相似对于SQL:它只是化妆品。