【Cypher】语句有哪些: 创建、查询、更新、删除、索引和约束管理、事务控制、数据导入 等
·
在 Cypher 查询语言中,主要的语句类型包括数据创建、查询、更新、删除以及高级操作等。下面是 Cypher 语句的完整分类及详细解释:
一、数据创建语句
1.1 创建节点
CREATE (n:Person {name: 'Alice', age: 30})
CREATE:创建一个新的节点。(n:Person):创建一个Person标签的节点,并赋值给变量n。{name: 'Alice', age: 30}:添加属性name和age。
1.2 创建关系
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:KNOWS {since: 2020}]->(b)
MATCH:匹配Alice和Bob两个节点。CREATE:创建KNOWS关系,带有since属性。
1.3 使用 MERGE 创建或匹配数据
MERGE (n:Person {name: 'Alice'})
ON CREATE SET n.age = 30
ON MATCH SET n.lastLogin = timestamp()
MERGE:如果不存在Alice节点则创建,存在则更新。ON CREATE:在创建时设置age。ON MATCH:在匹配时更新lastLogin。
二、数据查询语句
2.1 基本 MATCH 语句
MATCH (n)
RETURN n
MATCH:匹配所有节点。RETURN:返回匹配到的节点。
2.2 匹配带有标签的节点
MATCH (n:Person)
RETURN n
- 匹配所有
Person标签的节点。
2.3 匹配节点和关系
MATCH (a:Person)-[r:KNOWS]->(b:Person)
RETURN a, b, r
MATCH:匹配Person节点之间的KNOWS关系。
2.4 条件过滤(WHERE 语句)
MATCH (n:Person)
WHERE n.name = 'Alice' AND n.age > 25
RETURN n
WHERE:用于属性过滤。AND和OR:逻辑条件组合。
2.5 路径匹配
MATCH p = (a:Person)-[:FRIENDS_WITH*1..3]->(b:Person)
RETURN p
p = ...:将路径赋值给p变量。[:FRIENDS_WITH*1..3]:匹配 1 到 3 跳之间的FRIENDS_WITH关系。
2.6 最短路径匹配
MATCH p = shortestPath((a:Person)-[:KNOWS*]-(b:Person))
RETURN p
shortestPath():查找最短路径。KNOWS*:匹配任意长度的KNOWS关系。
三、数据更新语句
3.1 更新节点属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 35, n.city = 'New York'
RETURN n
SET:更新节点的属性或创建新属性。
3.2 更新关系属性
MATCH (a:Person)-[r:KNOWS]->(b:Person)
WHERE a.name = 'Alice' AND b.name = 'Bob'
SET r.since = 2021
RETURN r
SET:更新关系的属性。
3.3 删除节点属性
MATCH (n:Person {name: 'Alice'})
REMOVE n.age
RETURN n
REMOVE:删除节点的属性。
3.4 删除节点标签
MATCH (n:Person {name: 'Alice'})
REMOVE n:Person
RETURN n
- 删除
Person标签,但节点本身不会被删除。
四、数据删除语句
4.1 删除节点和关系
MATCH (n:Person {name: 'Alice'})
DETACH DELETE n
DETACH DELETE:删除节点和与其关联的所有关系。
4.2 只删除关系
MATCH (a)-[r:KNOWS]->(b)
DELETE r
DELETE仅删除关系r,保留节点a和b。
五、索引与约束管理语句
5.1 创建索引
CREATE INDEX FOR (n:Person) ON (n.name)
- 为
Person节点的name属性创建索引。
5.2 创建唯一性约束
CREATE CONSTRAINT FOR (n:Person) REQUIRE n.name IS UNIQUE
- 确保
Person节点的name属性唯一。
5.3 删除索引
DROP INDEX index_name
- 删除指定的索引。
5.4 删除约束
DROP CONSTRAINT constraint_name
- 删除指定的约束。
六、事务与控制语句
6.1 开启、提交和回滚事务
BEGIN
MATCH (n:Person)
SET n.status = 'active'
COMMIT
BEGIN:开启一个事务。COMMIT:提交事务。
BEGIN
MATCH (n:Person)
SET n.status = 'inactive'
ROLLBACK
ROLLBACK:回滚事务,撤销所有更改。
七、CALL 语句与子查询
7.1 调用存储过程
CALL db.schema.visualization()
CALL语句用于调用 Neo4j 内置的存储过程。
7.2 使用子查询
MATCH (m:Movie)
CALL {
WITH m
MATCH (m)<-[:ACTED_IN]-(p:Person)
RETURN collect(p.name) AS actors
}
SET m.actors = actors
RETURN m
CALL {}子查询用于在主查询内部执行嵌套查询。WITH将外部变量传入子查询。
八、LOAD CSV 数据导入语句
8.1 导入 CSV 数据
LOAD CSV WITH HEADERS FROM 'file:///movies.csv' AS row
CREATE (:Movie {title: row.title, released: toInteger(row.released)})
LOAD CSV从指定路径加载 CSV 文件。WITH HEADERS表示 CSV 文件的第一行是列名。
8.2 更新节点数据
LOAD CSV WITH HEADERS FROM 'file:///actors.csv' AS row
MATCH (p:Person {name: row.name})
SET p.age = toInteger(row.age)
- 通过
MATCH查询匹配的节点,并使用SET更新数据。
九、特殊语句与高级用法
9.1 使用 OPTIONAL MATCH
MATCH (p:Person)
OPTIONAL MATCH (p)-[r:KNOWS]->(f:Person)
RETURN p.name, f.name
OPTIONAL MATCH:即使匹配失败,也不会过滤掉p,而是将f返回为NULL。
9.2 使用 UNION 合并多个查询
MATCH (n:Person) RETURN n.name AS name
UNION
MATCH (m:Movie) RETURN m.title AS name
UNION将多个查询的结果合并。
9.3 使用 EXPLAIN 和 PROFILE 进行查询优化
EXPLAIN MATCH (n:Person) WHERE n.name = 'Alice' RETURN n
EXPLAIN只显示查询计划,不实际执行查询。
PROFILE MATCH (n:Person) WHERE n.name = 'Alice' RETURN n
PROFILE执行查询,并返回详细的执行计划信息。
十、总结
- Cypher 语句主要包括 创建、查询、更新、删除、索引和约束管理、事务控制、数据导入 等部分。
MATCH和CREATE是最常用的语句,用于数据的匹配和创建。MERGE结合了创建和匹配的特性,确保数据的幂等性。- 使用
EXPLAIN和PROFILE进行性能分析,可以优化查询速度。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)