一、创建与修改
1.1 create
- 创建图数据库中的节点、关系等元素:
CREATE (:Person {name: "Alice", age: 30})
CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})
- 批量创建元素
CREATE (n1:Node),(n2:Node),(n3:AnotherNode {prop: "value"})
1.2 merge
- 不存在再创建,如果存在则直接返回已有元素,常用来避免重复创建相同的数据。
(若数据库中没有 name 为 “David” 的Person 节点,就会创建一个;若已经存在,就返回这个已有的节点,可用于保证特定节点在数据库中的唯一性):
MERGE (p:Person {name: "David"})
- 检查公司与员工之间的 WORKS_AT 关系是否存在,不存在就创建:
MERGE (c:Company {name: "TechCo"})<-[r:WORKS_AT]-(e:Employee {name: "Eve"})
1.3 set
- 更新节点或关系的现有属性值:
MATCH (p:Person {name: "Alice"})
SET p.age = 35
- 添加新属性:
MATCH (p:Person {name: "Bob"})
SET p.address = "123 Main St"
二、查询
2.1 match
- 在图中查找符合特定模式的节点、关系等元素:
MATCH (p:Person)
WHERE p.age > 25
RETURN p
- 查找带有特定关系的节点:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person)
RETURN p1, r, p2
- 复杂模式匹配:可以构建包含多个节点、多种关系以及属性筛选条件等的复杂查询模式:
MATCH (p1:Person)-[r1:KNOWS]->(p2:Person)-[r2:WORKS_AT]->(c:Company)
WHERE p1.name = "Alice" AND c.name = "TechFirm"
RETURN p1, p2, r1, r2, c
2.2 return
- 指定查询结束后要返回的数据内容,可以返回节点、关系、属性值等各种元素:
MATCH (p:Person)
RETURN p.name, p.age
- 使用聚合函数返回结果:
MATCH (p:Person)
RETURN count(p)
- 返回不同类型元素:可以返回多种不同类型的元素混合在一起:
MATCH (p:Person)-[r:KNOWS]->(p2:Person)
RETURN p, r, p2.name
2.3 where
- 作为筛选条件的添加指令,常配合 MATCH 使用,用来限定查询结果需满足的条件:
MATCH (p:Person)
WHERE p.name STARTS WITH "A" AND p.age < 40
RETURN p
- 支持多种比较运算符(如 =、>、<、>=、<=、<> 等)以及逻辑运算符(AND、OR、NOT 等)来构建复杂的筛选条件。
MATCH (p:Person)
WHERE p.name STARTS WITH "A" AND p.age < 40
RETURN p
三、删除
3.1 delete
- 删除图数据库中的节点、关系等元素:
MATCH (p:Person {name: "Charlie"})
DELETE p
- 删除关系:
MATCH (p1:Person)-[r:KNOWS]->(p2:Person)
DELETE r
3.2 remove
- 移除节点或关系上的属性:
MATCH (p:Product)
REMOVE p.description
四、数据导入与加载
4.1 load csv
- 从 CSV 文件中加载数据到图数据库中,常配合 CREATE 等指令来基于导入的数据创建节点或关系:
(从本地 data.csv 文件(有表头的情况)读取每行数据,然后创建对应的 :User 节点并设置属性。)
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE (:User {name: row.name, email: row.email})
五、聚合与分组
5.1 group by
- 类似于关系型数据库中的分组功能,用于按照指定的属性或表达式对查询结果进行分组,常配合聚合函数使用。
MATCH (p:Person)
RETURN p.age, count(p)
GROUP BY p.age
5.2 order by
- 对查询返回的结果按照指定的属性或表达式进行排序,可以指定升序(ASC)或降序(DESC):
MATCH (p:Person)
RETURN p.name, p.age
ORDER BY p.age DESC
六、函数
6.1 聚合函数
- count():用于统计节点、关系等元素的数量;
- sum():对指定属性值进行求和;
- avg():计算属性值的平均值;
- min() 和 max():分别获取属性值的最小值和最大值。
MATCH (p:Person)
RETURN count(p)
MATCH (p:Product)
RETURN sum(p.price)
MATCH (p:Product)
RETURN avg(p.price)
MATCH (p:Product)
RETURN min(p.price), max(p.price)
6.2 字符串函数
- LEFT()、RIGHT():分别用于获取字符串左边或右边指定长度的子字符串;
- SUBSTRING():截取字符串中间的部分;
- UPPER()、LOWER():将字符串转换为大写或小写形式:
MATCH (p:Person)
RETURN LEFT(p.name, 3)
MATCH (p:Person)
RETURN SUBSTRING(p.name, 2, 4)
MATCH (p:Person)
RETURN UPPER(p.name)
6.3 数学函数
- ROUND():对数值进行四舍五入;
- ABS():求绝对值;
MATCH (p:Product)
RETURN ROUND(p.price)
MATCH (p:Product)
WHERE p.price < 0
RETURN ABS(p.price)
6.4 类型转换函数
- toFloat()、toInteger() 等:用于将属性值在不同数据类型之间进行转换:
MATCH (p:Product)
SET p.price = toFloat(p.price)
6.5 列表函数
- size():用于获取列表类型属性的元素个数:
MATCH (p:Person {hobbies: ["reading", "swimming"]})
RETURN size(p.hobbies)
七、路径操作与相关函数
7.1 路径查找与表示
- 使用路径表达式来描述节点之间的连接关系以及查找符合特定路径模式的元素:
(查找从一个 :Node 节点出发,通过 1 到 3 条关系能够到达另一个 :Node 节点的所有路径,并返回这些路径。)
MATCH p=(n:Node)-[*1..3]->(m:Node)
RETURN p
7.2 路径相关函数
- length():用于计算路径的长度(即路径中包含的关系数量):
MATCH p=(n:Node)-[*]->(m:Node)
RETURN length(p)
- nodes() 和 rels():分别用于获取路径中的节点列表和关系列表:
MATCH p=(n:Node)-[*]->(m:Node)
RETURN nodes(p), rels(p)
八、索引与约束
8.1 create index
- 创建索引,提高基于特定属性的查询效率:
(为 :Person 节点的 name 属性创建索引,后续查询中如果频繁通过 name 属性查找 :Person 节点,速度会更快。)
CREATE INDEX FOR (p:Person) ON (p.name)
8.2 create constraint
- 创建约束条件,常见的如唯一性约束,确保某个属性在特定标签的节点中具有唯一性。
(保证 :Person 节点的 email 属性值在整个数据库中是唯一的,避免重复创建具有相同 email 属性的 :Person 节点。)
CREATE CONSTRAINT ON (p:Person) ASSERT p.email IS UNIQUE
九、事务与执行控制
9.1 begin、commit、rollback
- BEGIN:用于开启一个事务,在事务内可以执行多条 Cypher 语句;
- COMMIT 用于提交事务,使事务内对数据的修改操作生效;
- ROLLBACK 用于回滚事务,撤销事务内已经执行的操作,恢复到事务开始前的数据状态。
BEGIN
CREATE (:TempNode {name: "Temp"})
// 其他操作
COMMIT
9.2 explain、profile
- EXPLAIN:用于获取查询语句的执行计划信息,展示数据库将如何执行该查询,帮助分析查询性能、优化查询逻辑,但并不实际执行查询。
EXPLAIN MATCH (p:Person)
RETURN p
- PROFILE:不仅能获取执行计划,还会实际执行查询,并展示查询执行过程中的性能相关数据,比如各操作花费的时间等,方便定位查询性能瓶颈。
PROFILE MATCH (p:Person)
RETURN p
以上涵盖了 Cypher 语言的大部分主要功能和指令,不过不同的图数据库系统在对 Cypher 语言的具体实现、支持程度以及语法细节等方面可能会存在一定差异,实际使用时需要结合具体的数据库平台来准确应用这些功能和指令。