Neo4j 有自己的查询语言称为 Cypher。Cypher 使用与 SQL(结构化查询语言)类似的语法。
举例
下边是一条 Cypher 语句:
1 | MATCH (p:Person { name:"Homer Flinstone" }) |
这条 Cypher 语句返回属性 name
为 Homer Flinstone
的 Person
节点。
如果通过 SQL 来查询关系型数据库,看起来可能更像这样:
1 | SELECT * FROM Person |
不过请记住,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 | MATCH (p:Person { name:"Homer Flinstone" }) |
我们可以看到:
- 节点被圆括号
()
包围 Person
是节点的标签name
是节点的属性