概述
本节概述 Cypher® 并简要讨论 Cypher 与 SQL 的区别。
什么是 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 查询以返回子句结束。例如,考虑以下两个查询(都在数据库中搜索评分大于 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(Cypher 上的优秀过程)核心库。APOC 核心库提供对用户定义的过程和函数的访问,这些过程和函数将 Cypher 查询语言的使用扩展到数据集成、图算法和数据转换等领域。
有关更多详细信息,请访问 APOC 核心页面。