Neo4j 第六篇: Cypher 语法
转载:https://www.cnblogs.com/ljhdo/p/10911426.html
参考:https://neo4j.com/docs/developer-manual/3.2/cypher/syntax/
Cypher 是图形数据库查询语言事实上的标准。
一 Cypher 类型系统
Cypher 支持的类型系统分为三类:属性类型,复合类型和结构类型。
1 属性类型
属性 类型:Integer、Float、String和Boolean
Boolean 类型:true, false, TRUE, FALSE
String 类型:'Hello', "World"
2 复合类型
复合类型: List 和 Map,List 是有序的值的集合,Map 是无序的 Key/Value 对的集合,通常用于存储节点和关系的属性。
List类型: ['a', 'b'], [1, 2, 3], ['a', 2, n.property, $param], [ ]
Map类型: n 是节点,prop 是节点的属性键,引用属性的值的格式: n.prop,
3 结构类型
结构类型:Node 类型、关系类型、Path 类型:
其中 Node 类型表示一个节点,由 Id、Label 和 Map 构成;
关系类型表示一个关系,由 Id、Type、Map 和 关系两端的两个节点的 Id 构成;
Path 类型表示路径,是节点和关系的序列。Path 模式:(a)-->()<--(b)
4 List类型
由标量类型构成的 List,例如,[‘a’, ‘b’], [1, 2, 3]
由函数 range 函数生成的 List 对象,例如,range(0,10),从start 到 end 的有序数字,Range 函数包含两端。
列表(List comprehension):[x IN range(0,10) WHERE x % 2 = 0 | x^3]
5 Map 类型
列表的常量表示: { key: ‘Value’, listKey: [{ inner: ‘Map1’ }, { inner: ‘Map2’ }]}
Map 投影,用于从节点、关系和其他 Map 对象中投影特定元素或变量的值,Map 投影的格式是:
1 | map_variable {map_element, [, …n]} |
参数注释:
map_variable:用于引用Map对象
map_element 有四种格式是:
属性选择器:格式是 .Key,用于引用 Map 对象中的属性
嵌入属性(Literal entry),是一个 Key/Value 对,例如,key: <expression>,表示嵌入到 Map 变量中的元素
变量选择器:把一个变量的名称作为 Key,变量的值作为 Key 的值,构建一个 Key/Value 对,作为 Map 变量中的元素
属性全选符号: .*
Map 投影的示例,actor 是 Map 变量,nrOfMovies 是变量,从 Map 变量中获取 name 属性,并添加额外的属性 nrOfMovies:
1 | MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie) |
二 命名规则和作用域
对变量进行命名,变量的命名要遵守一定的规则,并且变量具有特定的作用域。
1 命名规则
名称以英语字符开头,能够包含数字,但是数字不能作为首字符,除了下划线和$,不能包含其他符号,
名称是大小写敏感的,:PERSON 和 :Person 是不同的。
2 作用域
节点的 Lable、关系类型和属性键是不同的作用域(Scope),在相同的 Scope 下,名称是不允许重复的;但是,在不同的 Scope 中,名称是允许重复的,并且表示不同的含义。
1 | CREATE (a:a {a: 'a'})-[r:a]→(b:a {a: 'a'}) |
三 CASE 表达式
case 表达式根据条件对查询的结果进行处理:
1 | CASE |
四 查询的参数
参与的语法是 $Param,参数的名称是 Param,在传递参数时,必须保证传递的参数和 Query 中的参数名称相同。
有 Cypher 的 Query 是,参数是 $ids,
1 | MATCH (n) |
传递给Query的参数是:
1 | { |
五 操作符
操作符是对 Cypher 查询进行算术运算,逻辑运算等。
1 通用操作符
distinct 用于移除重复值, n.property 用于访问属性,[]是变量的列表
1 | CREATE (a:Person { name: 'Anne', eyeColor: 'blue' }),(b:Person { name: 'Bill', eyeColor: 'brown' }),(c:Person { name: 'Carol', eyeColor: 'blue' }) |
2 数学操作符
加减乘除:+,-,*,/
取模:%
取幂:^
3 比较运算符
等于:=
不等于:<>
小于、大于、小于等于、大于等于:<、>、<=、>=
IS NULL和 IS NOT NULL
4 逻辑运算符
与(AND),或(OR),异或(XOR),非(NOT)
1 | WITH [2, 4, 7, 9, 12] AS numberlist |
5 字符串
字符串拼接:+
匹配正则:=~
1 | WITH ['mouse', 'chair', 'door', 'house'] AS wordlist |
对于字符串,使用 STARTS WITH、ENDS WITH和CONTAINS 过滤字符串:
1 | WITH ['John', 'Mark', 'Jonathan', 'Bill'] AS somenames |
6 列表操作
+,列表追加
IN:检查成员
[]:索引,特殊地,[start .. end],从start开始,递增1,但是不包括end
1 | RETURN [1,2,3,4,5]+[6,7] AS myList |
7 访问属性
使用 . 号访问属性
1 | MATCH (n) WHERE 21 < n.age AND n.age <= 30 RETURN n |