Skip to content

Cypher 简介

Cypher 语法特点

Cypher 是 Neo4j 的查询语言,设计灵感来自 SQL,但专为图数据库优化。

主要特点:

  1. 声明式语法:描述要查询的模式,而不是如何执行查询
  2. 直观的模式匹配:使用 ASCII 艺术风格的语法表示图结构
  3. 表达能力强:支持复杂的图模式查询
  4. 可读性高:语法简洁明了,易于理解
  5. 功能丰富:支持创建、读取、更新、删除操作

基本语法结构

1. 模式语法

  • 节点:使用括号表示,如 (n)
  • 关系:使用箭头表示,如 (a)-[r]->(b)
  • 标签:使用冒号表示,如 (n:Person)
  • 属性:使用大括号表示,如 (n:Person {name: 'John'})

2. 子句结构

Cypher 查询通常由多个子句组成:

  • MATCH:指定要匹配的图模式
  • WHERE:添加过滤条件
  • RETURN:指定要返回的结果
  • CREATE:创建节点和关系
  • UPDATE:更新节点和关系的属性
  • DELETE:删除节点和关系
  • SET:设置属性值
  • REMOVE:移除属性或标签

3. 数据类型

Cypher 支持多种数据类型:

  • 字符串'Hello'
  • 数字42, 3.14
  • 布尔值true, false
  • 数组[1, 2, 3]
  • 映射{name: 'John', age: 30}
  • 日期/时间date(), datetime()

常用关键字

1. 查询关键字

  • MATCH:匹配图模式
  • WHERE:过滤条件
  • RETURN:返回结果
  • WITH:传递中间结果
  • ORDER BY:排序结果
  • LIMIT:限制结果数量
  • SKIP:跳过结果数量
  • DISTINCT:去重结果

2. 修改关键字

  • CREATE:创建节点和关系
  • MERGE:创建或匹配节点和关系
  • SET:设置属性
  • REMOVE:移除属性或标签
  • DELETE:删除节点和关系

3. 其他关键字

  • AS:别名
  • IN:检查值是否在集合中
  • IS NULL:检查值是否为 null
  • AND/OR/NOT:逻辑运算符
  • =, <, >, <=, >=:比较运算符

示例查询

1. 基本查询

cypher
// 匹配所有 Person 节点
MATCH (p:Person)
RETURN p

// 匹配指定名称的 Person 节点
MATCH (p:Person {name: 'John'})
RETURN p

// 匹配具有朋友关系的节点
MATCH (a:Person)-[:FRIENDS_WITH]->(b:Person)
RETURN a, b

2. 创建操作

cypher
// 创建一个 Person 节点
CREATE (p:Person {name: 'John', age: 30})

// 创建两个节点和它们之间的关系
CREATE (a:Person {name: 'John'})-[r:FRIENDS_WITH {since: 2010}]->(b:Person {name: 'Alice'})

3. 更新操作

cypher
// 更新节点属性
MATCH (p:Person {name: 'John'})
SET p.age = 31
RETURN p

// 添加标签
MATCH (p:Person {name: 'John'})
SET p:Employee
RETURN p

4. 删除操作

cypher
// 删除节点
MATCH (p:Person {name: 'John'})
DELETE p

// 删除关系
MATCH (a:Person)-[r:FRIENDS_WITH]->(b:Person)
DELETE r

小结

Cypher 是一种强大而直观的查询语言,专为图数据库设计。通过本文的介绍,您应该对 Cypher 的基本语法和特点有了初步了解。在接下来的章节中,我们将详细介绍如何使用 Cypher 进行节点操作、关系操作和属性操作。