Query - aigodata/tangram GitHub Wiki

查询

属性

Type&Table

key为操作类型, value为数据表

操作类型

  1. detail:详细,单个结果
  2. query:查询,多个结果
  3. select:查询,同query

示例

{
    "query":"user"
}
// 表别名
{
    "query":"user as u" // 或者"user u"
}

Fields

查询字段,支持函数。数组类型, 如果是单个字段, 可以写成字符类型. 该属性可以省略,如果不指定,则默认查询所有字段

示例

{
  "fields":["column_a", "column_b"]
}

Distinct

行数据去重

示例

{
  "select.distinct":"user"
}

Join

多表关联Join操作, 需要在数据库表列配置中预先配置表的关联关系.

类型

{
    "join":[
        {
            连接类型:连接表名
        },
        {
            连接类型:连接表名
        }
        ...
    ]
}

如果只有一个关联表的情况下,可以使用对象形式

{
    "join":{
    	连接类型:连接表名
    }
}

如果关联关系是left,则left可以省略,简写为字符串形式

{
    "join":"连接表名"
}

中间关联表可省略,如A Join B Join C,如果不需要中间表B的信息,可省略B

{
	"select":"A",
	"join":"C"
}

示例

{
    "join":[
        {
            "left":"table_a"
        },
        {
            "right":"table_b"
        },
        "table_c"
    ]
}

Where

查询条件

类型

[condition1, condition2...] condition格式为{连接符:条件},连接符包括and和or 条件可以有多种格式 字符串:单个条件,表.字段+运算符+值,表可省略,省略情况下代表操作主表的值。 数组:多个条件,需要括号包裹 当连接符为and时,condition的连接符可以省略。即{连接符:条件} -> 条件

运算符

等于:= 不等于:!= 大于:> 大于等于:>= 小于:< 小于等于:<= in:, 逗号拼接多个值 between:~ 两边都包含边界,如果想要更精确的范围,请使用大于小于运算符 like:%= 字符串类型:==

示例

{
  "where":[
    "age=30", // age = 30
    "age!=30", // age <> 30
    "age>30", // age > 30
    "age<30", // age < 30
    "age>=30", // >= 30
    "age<=30", // age <= 30
    "age=30~40", // age between 30 and 40
    "username%=%ao%", // like '%ao%'
    "username=zhangsan,zhaosi", // username in ('zhangsan','zhaosi')
    "username!=zhangsan,zhaosi", // username not in ('zhangsan','zhaosi')
    "age==30", // age = '30'
  ]
}

连接符

and:{"and":"a=1"} 可简写成 ”a=1“ or:{"or":"a=1"} {"and":"a=1"}或{"or":"a=1"}是条件的最小单位。对象中的value不可以再是多个条件。如果需要多个条件,可以写多个对象 SQL中表达多个条件组合成的条件时通常用()包裹,这里用[]表示SQL中的(),将多个条件放在同一数组中

示例

Json:

{
  "where":[
    "sex=male",
    "character=optimism",
    {"or":"height=1.8"},
    ["job!=student", {"or":"hobby=football"}, {"or":"hobby=pingpang"}],
    {"or":"age=25~40"}
  ]
}

SQL:

where sex = 'male'
	and character = 'optimism'
	or height = 1.8
	and (job != 'student' or hobby = 'football' or hobby = 'pingpang')
	or (age >= 25 and age <= 40)
	or age between 25 40

Group

分组

类型

数组类型, 只有一个字段的时候可以写成字符.

示例

{
  "group":["username", "age"] // group by username, age
}

Order

排序 ###类型 数组类型, 每个数组元素是一个字段, 空格, 升序(asc)/降序(desc)连接的字符串. 默认为asc. 只有一个字段的时候可以直接写成字符串.

示例

{
  "order":["column_a desc", "column_b asc"] // order by age desc, username asc
}

简写形式

字段前面加上+,-符号。+代表升序,-代表降序

{
  "order":["-age", "+username"] // order by age desc, username asc
}

Limit

分页

类型

数组类型, [开始行数, 结束行数]

示例

{
  "limit":[6, 10]
}