Neo4j 入门教程 - 查询语言 Cypher

Neo4j 有自己的查询语言称为 Cypher。Cypher 使用与 SQL(结构化查询语言)类似的语法。


举例

下边是一条 Cypher 语句:

1
2
MATCH (p:Person { name:"Homer Flinstone" })
RETURN p

这条 Cypher 语句返回属性 nameHomer FlinstonePerson 节点。

如果通过 SQL 来查询关系型数据库,看起来可能更像这样:

1
2
SELECT * FROM Person
WHERE name = "Homer Flinstone";

不过请记住,Neo4j 不像关系数据库模型那样将数据存储在表中,Neo4j 的所有数据都在节点和关系中存储。所以上边的 Cypher 语句查询的是节点、节点的标签和节点的属性,而 SQL 查询的是表、行和列。

SQL 被设计为适用于关系数据库管理系统(DBMS)。Neo4j 是一个 NoSQL DBMS,所以它不使用关系模型同样也不使用 SQL。

Cypher 是专门为 Neo4j 的数据模型而设计,用来查询节点及其相互关系的。

字符画语法

Cypher 使用字符画来表示模式,使得我们在第一次学习这门语言时很容易记住它。如果你忘记了如何编写,只需要想一想图的样子就会对你有所帮助。

1
(a)-[:KNOWS]->(b)

主要记住如下几点:

  • 节点由圆括号表示,看起来像是圆圈。就像这样:(node)
  • 关系用箭头来表示。像这样: ->
  • 关系相关的信息可以插入到方括号中。像这样:[:KNOWS]

定义数据

在使用 Cypher 时请记住以下几点:

  • 节点通常有标签(一个或多个)。比如:”Person”,”User”,”Actor”,”Customer”,”Employee”等
  • 节点通常有属性,属性提供有关节点的额外信息。比如:”name”,”age”,”born”等
  • 关系也可以有属性
  • 关系通常有一个类型(类似于节点的标签)。比如:”KNOWS”,”LIKES”,”WORKS_FOR”,”PURCHASED”等

让我们再来看一下上边的例子:

1
2
MATCH (p:Person { name:"Homer Flinstone" })
RETURN p

我们可以看到:

  • 节点被圆括号 () 包围
  • Person 是节点的标签
  • name 是节点的属性