00287 Cypher基础教程


前言

以下是一份 Cypher 基础教程,适合图数据库(尤其是 Neo4j)的初学者快速掌握 Cypher 查询语言的核心语法和用法。

Operating System: Ubuntu 22.04.4 LTS

Cypher 简介

Cypher 是专为图数据库设计的声明式查询语言,语法直观,类似自然语言。它专注于描述“如何在图中查找数据”,而非“如何操作数据”(如 SQL 的 JOIN)。核心思想是通过模式匹配(Pattern Matching)描述图结构。

基本概念

  • 节点(Node):表示实体(如人、商品),用 () 表示。
  • 关系(Relationship):连接节点的边(如“购买”“朋友”),用 --><-- 表示。
  • 标签(Label):节点的分类(如 :Person:Product)。
  • 关系类型(Type):关系的分类(如 :FRIEND:BOUGHT)。
  • 属性(Property):节点或关系的键值对数据(如 {name: "Alice"})。

节点与关系语法

节点

  • 基础节点:()(匿名节点)
  • 带标签的节点:(:Label)
  • 带标签和属性的节点:(:Label {key: "value"})

关系

  • 基础关系:--><--
  • 带类型的关系:-[:TYPE]->
  • 带属性和类型的关系:-[:TYPE {key: "value"}]->

常用操作

创建数据

-- 创建节点
CREATE (:Person {name: "Alice", age: 30});

-- 创建关系(需先匹配节点)
MATCH (a:Person), (b:Person)
WHERE a.name = "Alice" AND b.name = "Bob"
CREATE (a)-[:FRIEND]->(b);

查询数据

-- 返回所有 Person 节点
MATCH (p:Person) RETURN p;

-- 返回特定属性的节点
MATCH (p:Person {name: "Alice"}) RETURN p.age;

-- 查询关系
MATCH (a:Person)-[:FRIEND]->(b:Person)
RETURN a.name, b.name;

更新数据

-- 修改属性
MATCH (p:Person {name: "Alice"})
SET p.age = 31;

-- 添加新属性
MATCH (p:Person {name: "Alice"})
SET p.city = "New York";

删除数据

-- 删除节点(需先删除其关系)
MATCH (p:Person {name: "Alice"})
DETACH DELETE p;

-- 删除所有数据(慎用!)
MATCH (n) DETACH DELETE n;

模式匹配

Cypher 的核心是通过模式匹配描述图结构:

-- 查找 Alice 的所有朋友
MATCH (alice:Person {name: "Alice"})-[:FRIEND]->(friend:Person)
RETURN friend.name;

-- 查找两跳关系
MATCH (a:Person)-[:FRIEND*2]->(c:Person)
RETURN a.name, c.name;

高级查询

聚合函数

-- 统计 Person 数量
MATCH (p:Person)
RETURN COUNT(p) AS total;

-- 按城市分组统计
MATCH (p:Person)
RETURN p.city, AVG(p.age) AS avg_age;

路径查询

-- 查找最短路径
MATCH (a:Person {name: "Alice"}),(b:Person {name: "Bob"}),
path = shortestPath((a)-[*]-(b))
RETURN path;

索引与约束

-- 创建索引(加速查询)
CREATE INDEX FOR (p:Person) ON (p.name);

-- 唯一性约束
CREATE CONSTRAINT FOR (p:Person) REQUIRE p.email IS UNIQUE;

总结

  • Cypher 核心:通过模式匹配描述图结构。
  • 关键语法MATCH(查询)、CREATE(创建)、SET(更新)、DELETE(删除)。
  • 优势:直观表达复杂关系查询(如社交网络、推荐系统)。

练习建议

  1. 使用 Neo4j Sandbox 在线环境实践。
  2. 尝试构建一个“社交网络”或“电影推荐”模型。

进一步学习

结语

第二百八十七篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录