所有运算符
分类 |
运算符 |
---|---|
属性运算符 | 引用属性:. 属性存在谓词: PROPERTY_EXISTS() |
逻辑运算符 | AND ,OR ,XOR ,NOT |
算术运算符 | + ,- ,* ,/ ,% ,^ |
比较运算符 | = ,<> ,> ,< ,>= ,<= |
字符运算符 | 字符串联:|| 规范化谓词: IS NORMALIZED , IS NOT NORMALIZED |
列表运算符 | 构建列表:[] 访问元素: [] 判断包含关系: IN 列表串联: || |
路径运算符 | 构建路径:PATH[] 路径串联: || |
记录运算符 | 构建记录:RECORD{} 引用字段: . |
Exists谓词 | EXISTS |
Null谓词 | IS NULL ,IS NOT NULL |
值类型谓词 | IS TYPED ,IS NOT TYPED |
标签谓词 | IS LABELED ,IS NOT LABELED ,: |
起/终谓词 | IS SOURCE OF , IS NOT SOURCE OF , IS DESTINATION OF , IS NOT DESTINATION OF |
有向谓词 | IS DIRECTED , IS NOT DIRECTED |
完全不同谓词 | ALL DIFFERENT() |
相同谓词 | SAME() |
属性存在谓词 | PROPERTY_EXISTS() |
布尔值谓词 | IS TRUE , IS FALSE |
属性运算符
引用属性
.
(句点)可用来引用图元素的属性。
MATCH (n)
RETURN n._id LIMIT 10
属性存在谓词
PROPERTY_EXISTS(<elemVar>, <propertyName>)
谓词用来确定引用的图元素属性是否存在。
详情
- 每个
<elemVar>
必须有单例引用度。
MATCH (n:User) LIMIT 1
RETURN PROPERTY_EXISTS(n, "uuid")
逻辑运算符
AND
将两个或多个条件结合在一起,当所有条件判断为真时,整个表达式判断为真。
AND
运算符的真值表:
AND |
真 | 假 |
---|---|---|
真 | 真 | 假 |
假 | 假 | 假 |
本条查询返回age
大于30,且incomeGroup
为4的用户:
MATCH (n:User)
WHERE n.age > 30 AND n.incomeGroup = 4
RETURN n
OR
将两个或多个条件结合在一起,只需满足其中一个条件,整个表达式判断为真。
OR
运算符的真值表:
OR |
真 | 假 |
---|---|---|
真 | 真 | 真 |
假 | 真 | 假 |
本条查询返回age
大于30,或incomeGroup
为4的用户:
MATCH (n:Person)
WHERE n.age > 30 OR n.incomeGroup = 4
RETURN n
XOR
将两个或多个条件结合在一起,每次对两个条件执行逻辑运算。若表达式只有两个条件,则有且仅有一个条件为真时,整个表达式判断为真。若两个条件均为真或均为假,则最终结果为假。若表达式涉及多个条件,XOR
先判断前两个条件,并将判断结果与下一个条件进行比较,以此类推,直至对全部条件判断完毕。
XOR
运算符的真值表:
XOR |
真 | 假 |
---|---|---|
真 | 假 | 真 |
假 | 真 | 假 |
本条查询返回age
大于30或incomeGroup
为4的用户,但会剔除同时满足两个条件的用户:
MATCH (n:Person)
WHERE n.age > 30 XOR n.incomeGroup = 4
RETURN n
NOT
对条件进行否定,当条件为假时,返回结果为真,反之亦然。
NOT
运算符的真值表:
NOT |
真 | 假 |
---|---|---|
假 | 真 |
本条查询返回age
不等于30的用户:
MATCH (n:Person)
WHERE NOT n.age = 30
RETURN n
算术运算符
对数值进行算术运算。GQL支持以下算术运算符:
- 加:
+
- 减:
-
- 乘:
*
- 除:
/
- 取余:
%
- 取幂:
^
RETURN (2+8)%3
结果:
(2+8)%3 |
---|
1 |
比较运算符
比较两个值或表达式,返回真或假。GQL支持以下比较运算符:
- 等于:
=
- 不等于:
<>
- 大于:
>
- 小于:
<
- 大于等于:
>=
- 小于等于:
<=
本条查询返回age
不等于30的用户:
MATCH (n:Person)
WHERE n.age <> 30
RETURN n
字符运算符
字符串联
串联运算符||
将多个字符串按顺序合并成单个字符串。
RETURN "data" || "base"
结果:
"data" || "base" |
---|
database |
规范化谓词
判断字符串是否规范化。GQL支持以下规范化谓词:
IS [ <normal form> ] NORMALIZED
IS NOT [ <normal form> ] NORMALIZED
详情
<normal form>
规范化形式默认为NFC
。其他可用规范化形式包括NFD
,NFKC
和NFKD
。
RETURN "Å" IS NORMALIZED AS normRes
结果:
normRes |
---|
1 |
RETURN "Å" IS NFD NORMALIZED AS normRes
结果:
normRes |
---|
0 |
列表运算符
构建列表
在[]
内放置逗号分隔的元素来创建列表。
LET items = [1,2,3]
RETURN items
结果:
items |
---|
[1,2,3] |
[]
也可用来构建嵌套列表:
LET items = [[1,2],[2,3]]
RETURN items
结果:
items |
---|
[[1,2],[2,3]] |
访问元素
使用[]
可通过索引来访问列表中的元素。列表索引从0开始,即第一个元素的索引为0
。
LET items = ["a", 1, "b"]
RETURN items[0]
结果:
items[0] |
---|
a |
判断包含关系
IN
用来判断特定元素是否在列表中存在。1
表示条件为真,0
表示条件为假。
RETURN 2 IN [1,2,3] AS inList
结果:
inList |
---|
1 |
运算符IN
可以根据元素是否属于指定列表来有效筛选图元素。例如,本条查询获取_id
为U01或U02的点:
MATCH (n) WHERE n._id IN ["U01", "U02"]
RETURN n
列表串联
串联运算符||
将多个列表按顺序合并成单个列表。
RETURN [1,2,3] || [3,4,5] AS newList
结果:
newList |
---|
[1,2,3,3,4,5] |
路径运算符
构建路径
PATH[]
通过按顺序枚举点和边创建路径。
<path value constructor> ::= "PATH[" <path element list> "]"
<path element list> ::= <node reference> [ <path element list step>... ]
<path element list step> ::= "," <edge reference> "," <node reference>
详情
- 如果
<path element list>
包含null值或未识别出路径,则会引发异常:路径格式错误。
MATCH (n1 {_id: "U01"}), (n2 {_id: "U02"}), -[e {_uuid:39}]->
RETURN PATH[n2, e, n1]
路径串联
串联运算符||
将多个路径连结成单个连续路径,即前一条路径的终点和后一条路径的起点相同时,两条路径会合并成一条。若前后路径不符合该条件,则会引发异常:路径格式错误。
MATCH p1 = ({_id: "U01"})->(n), p2 = (n)->()
RETURN p1 || p2
记录运算符
构建记录
RECORD{}
通过指定字段创建记录。
<record constructor> ::=
[ "RECORD" ] "{" [ <field> [ { "," <field> }... ] ] "}"
<field> ::= <field name> ":" <value expression>
LET rec = RECORD{length: 20, width: 59, height: 10}
RETURN rec.length
结果:
rec.length |
---|
20 |
引用字段
.
(句点)可用来引用记录的字段。
LET rec = RECORD{length: 20, width: 59, height: 10}
RETURN rec.length * rec.width * rec.height AS capacity
结果:
capacity |
---|
11800 |
Exists谓词
EXISTS
谓词用来判断指定的图模式或查询是否有结果返回。如果发现匹配数据,谓词判断结果为真,否则为假。请注意,MATCH
语句不支持使用EXISTS
。
<exists predicate> ::=
"EXISTS" {
"{" <graph pattern> "}"
| "(" <graph pattern> ")"
| "{" { <match statement>... } "}"
| "(" { <match statement>... } ")"
| <nested query specification>
}
<nested query specification> ::= "{" <query specification> "}"
本条查询判断图中是否存在以点A
为起点的路径,并以布尔值返回判断结果:
RETURN EXISTS {({_id:"A"})->()}
本条查询判断图中是否存在这样一条路径,其起点为A
,终点为B
,边的score
值大于2,并以布尔值返回判断结果:
RETURN EXISTS {
MATCH ({_id: "A"})-[e]->({_id: "B"})
WHERE e.score > 2
}
本条查询判断列表中是否有元素大于3,并以布尔值返回判断结果:
RETURN EXISTS {
FOR item in [1,2,3]
FILTER item > 3
RETURN item
}
Null谓词
用来测试是否为null值。GQL支持以下null谓词:
IS NULL
IS NOT NULL
本条查询获取每个点:Paper
的title
,前提是title
属性值非空;若无符合条件的点,则返回信息为TITLE NOT FOUND
。
MATCH (n:Paper)
RETURN CASE
WHEN n.title IS NOT NULL THEN n.title
ELSE "TITLE NOT FOUND"
END
值类型谓词
用来确认值是否符合某个特定类型。GQL支持以下值类型谓词:
IS TYPED <value type>
IS NOT TYPED <value type>
详情
- 目前
<value type>
支持以下数据类型关键字:STRING
,BOOL
。
RETURN "a" IS TYPED BOOL AS typeCheck
结果:
typeCheck |
---|
0 |
标签谓词
用来确认图元素是否满足标签表达式。GQL支持以下值类型谓词:
IS LABELED
IS NOT LABELED
:
MATCH (n) WHERE n IS NOT LABELED Paper
RETURN n
MATCH (n:Paper)
RETURN n
起/终谓词
确认点是否为边的起点或终点。GQL支持以下起/终谓词:
<node reference> IS SOURCE OF <edge reference>
<node reference> IS NOT SOURCE OF <edge reference>
<node reference> IS DESTINATION OF <edge reference>
<node reference> IS NOT DESTINATION OF <edge reference>
MATCH (n {_id: "P1"}), ()-[e:Cites]->() WHERE n IS SOURCE OF e
RETURN e
有向谓词
有向谓词用来确认边变量是否与右向边绑定。GQL支持以下有向谓词:
IS DIRECTED
IS NOT DIRECTED
详情
- 嬴图数据库中创建的所有边均为有向边。
MATCH ()-[e]-()
RETURN e IS DIRECTED
结果:
e IS DIRECTED |
---|
1 |
完全不同谓词
用来确认与元素变量列表绑定的所有图元素是否两两不同。GQL支持以下完全不同谓词:
ALL_DIFFERENT(<elemVar>, <elemVar>[{,<elemVar>}...])
详情
- 每个
<elemVar>
必须具有单例引用度。 <elemVar>
不能与null值绑定。- 与
<elemVar>
绑定的所有值必须有可比性。
MATCH (n1:User {_id: "U05"}), (n2)-[:Joins]->(n3)
RETURN n1._id, n2._id, n3._id, ALL_DIFFERENT(n1, n2, n3)
结果:
n1._id | n2._id | n3._id | ALL_DIFFERENT(n1, n2, n3) |
---|---|---|---|
U05 | U05 | C01 | 0 |
U05 | U04 | C02 | 1 |
U05 | U02 | C01 | 1 |
相同谓词
用来确认是否所有元素变量均绑定了相同的图元素。GQL支持以下相同谓词:
SAME(<elemVar>, <elemVar>[{,<elemVar>}...])
详情
- 每个
<elemVar>
必须具有单例引用度。 <elemVar>
不能与null值绑定。- 与
<elemVar>
绑定的所有值必须有可比性。
MATCH (n1:User {_id: "U05"}), ()-[:Follows]->(n2), (n3)-[:Joins]->()
RETURN n1._id, n2._id, n3._id, SAME(n1, n2, n3)
结果:
n1._id | n2._id | n3._id | SAME(n1, n2, n3) |
---|---|---|---|
U05 | U03 | U04 | 0 |
U05 | U03 | U05 | 0 |
U05 | U05 | U04 | 0 |
U05 | U05 | U05 | 1 |
布尔值谓词
用来判断布尔表达式或变量是否真实,即判断其为真还是为假。GQL支持一下布尔值谓词:
IS TRUE
IS FALSE
RETURN 1 > 2 IS TRUE
结果:
1 > 2 IS TRUE |
---|
0 |