什么是 Cypher?
Cypher 是 Neo4j 的声明式图形查询语言。它由 Neo4j 工程师于 2011 年创建,是一种与 SQL 相当的图形数据库语言。与 SQL 类似,Cypher 让用户专注于从图形中检索什么,而不是如何检索。因此,Cypher 允许用户通过高效且富有表现力的查询来揭示以前未知的数据连接和集群,从而使用户能够充分发挥其属性图形数据库的潜力。
Cypher 提供了一种可视化的模式和关系匹配方法。它依赖于以下 ASCII 类型的语法: (nodes)-[:CONNECT_TO]→(otherNodes)。圆括号用于圆形节点,圆括号-[:ARROWS]→用于关系。编写查询实际上就像通过图形中的数据绘制图案一样。换句话说,节点等实体及其关系以可视化方式构建到查询中。这使得 Cypher 成为一种高度直观的语言,无论是阅读还是编写。
Cypher 和 SQL:主要区别
Cypher 和 SQL 在许多方面都很相似。例如,它们共享许多相同的关键字,例如WHERE和ORDER BY。但是,两者之间存在一些重要差异:
Cypher 具有模式灵活性
虽然使用索引和约束来强制执行部分架构是可能的,也是建议的,但 Cypher 和 Neo4j 提供了比 SQL 和关系数据库更高程度的架构灵活性。更具体地说,Neo4j 数据库中的节点和关系不必设置特定属性,因为同一图中的其他节点或关系具有该属性(除非对该特定属性创建了存在约束)。这意味着用户不需要使用固定的架构来表示数据,他们可以随着图表的发展添加新的属性和关系。
查询订单
SQL 查询以用户想要返回的内容开头,而 Cypher 查询以 return 子句结尾。例如,考虑以下两个查询(均在数据库中搜索评分大于 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 查询语言的使用扩展到数据集成、图形算法和数据转换等领域。
851

被折叠的 条评论
为什么被折叠?



