概述

本节概述了 Cypher® 并简要讨论了 Cypher 与 SQL 的不同之处。

什么是 Cypher?

Cypher 是 Neo4j 的声明式图查询语言。它由 Neo4j 工程师于 2011 年创建,旨在成为图数据库的 SQL 等效语言。与 SQL 类似,Cypher 让用户专注于从图中检索什么,而不是如何检索。因此,Cypher 通过支持高效且富有表现力的查询,揭示以前未知的数据连接和集群,从而帮助用户充分发挥其属性图数据库的潜力。

Cypher 提供了一种可视化匹配模式和关系的方式。它依赖于以下 ASCII 艺术风格的语法:(nodes)-[:CONNECT_TO]→(otherNodes)。圆括号用于圆形节点,-[:ARROWS]→ 用于关系。编写查询实际上就像在图中绘制数据模式。换句话说,节点及其关系等实体被可视化地构建到查询中。这使得 Cypher 成为一种非常直观的语言,易于阅读和编写。

Cypher 与 SQL:主要区别

Cypher 和 SQL 在许多方面相似。例如,它们共享许多相同的关键字,例如 WHEREORDER BY。然而,两者之间存在一些重要的差异

Cypher 模式灵活

虽然使用索引和约束来强制执行部分模式是可能且建议的,但 Cypher 和 Neo4j 比 SQL 和关系数据库提供了更大的模式灵活性。更具体地说,Neo4j 数据库中的节点和关系不必具有特定的属性集,因为同一图中的其他节点或关系具有该属性(除非在该特定属性上创建了属性存在约束)。这意味着用户无需使用固定模式来表示数据,并且他们可以随着图的演变添加新的属性和关系。

查询顺序

SQL 查询以用户想要返回的内容开始,而 Cypher 查询以返回子句结束。例如,考虑以下两个查询(都从数据库中搜索评级大于 7 的电影标题),第一个用 SQL 编写,第二个用 Cypher 编写

SELECT movie.name
FROM movie
WHERE movie.rating > 7
MATCH (movie:Movie)
WHERE movie.rating > 7
RETURN movie.title
Cypher 查询更简洁

由于其直观、类似白板的子句构建方法,Cypher 查询通常比等效的 SQL 查询更简洁。例如,考虑以下两个查询(都从数据库中搜索电影《黑客帝国》中演员的姓名),第一个用 SQL 编写,第二个用 Cypher 编写

SELECT actors.name
FROM actors
 	LEFT JOIN acted_in ON acted_in.actor_id = actors.id
	LEFT JOIN movies ON movies.id = acted_in.movie_id
WHERE movies.title = "The Matrix"
MATCH (actor:Actor)-[:ACTED_IN]->(movie:Movie {title: 'The Matrix'})
RETURN actor.name

Cypher 与 APOC

Neo4j 支持 APOC (Awesome Procedures on Cypher) 核心库。APOC 核心库提供了对用户定义的过程和函数的访问,这些过程和函数将 Cypher 查询语言的使用扩展到数据集成、图算法和数据转换等领域。

欲了解更多详情,请访问 APOC 核心页面

© . All rights reserved.