neo4j基本SQL操作

目录

一、图元素操作:查询、创建、删除

1、查询match

1.1 节点查询

1.2 关系查询 

1.3 路径查询

(1) 指定关系类型

 ① 全量查询

② 只针对特定的节点进行查询

(2)任意关系类型 

 ① 全量数据

② 只查看 通过指定层级 可相互关联的点:

③ id 去除重复的关系起始点和终结点,且对任意两点间的关系,只记录1次a--b

 2、创建create、merge

2.1 创建节点

(1) create:允许重复数据

(2)merge:重复数据会合并 

2.2 创建关系

(1)节点已存在,只创建关系

(2)新增两个节点,同时新增关系

3、删除图元素

3.1 delete:删除节点

3.2 detach delete:删除所有节点及关系

二、图元素属性操作

1、删除图元素的属性、标签:remove

1.1 删除指定属性

1.2 删除指定标签 

 2、更改节点标签:set


一、图元素操作:查询、创建、删除

1、查询match

1.1 节点查询
1、只查有限数量的点
MATCH (n:Person) RETURN n LIMIT 25

2、查询所有点(包括无关系的孤立点)以及 点间的关系
MATCH (n)
OPTIONAL MATCH (n)-[r]->()
RETURN n, r
1.2 关系查询 
1、无向查询(所有关系类型,包括a->b 和 b->a)
match (a:Company{name:"企业A"})-[r]-(b:Company{name:"企业C"}) return r

2、有向查询(只查a->b)
match (a:Company{name:"企业A"})-[r]->(b:Company{name:"企业C"}) return r
1.3 路径查询
(1) 指定关系类型

指定关系a-->b,就只能查询a-->b,不能查询b-->a

 ① 全量查询
MATCH (a:Company)-->(b:Company)
RETURN a.name AS 企业, b.name AS 关联企业, shortestPath((a)-[*]-(b)) AS 最短路径, length(shortestPath((a)-[*]-(b))) AS 最短路径长度
② 只针对特定的节点进行查询

可以在MATCH语句中添加更多的筛选条件,比如:

MATCH (a:企业 {name: '特定企业名'})-->(b:企业)
RETURN a.name AS 企业, b.name AS 关联企业, length(shortestPath((a)-[*]-(b))) AS 最短路径长度

如果点a在整个链路中与多个企业都有关系,那就会得到多条同一个a与不同b的数据。
只对节点a与其他企业节点之间的关系数量感兴趣,你可以通过计数这些记录来得到这个信息。例如:

MATCH (a:企业)-->(b:企业)
RETURN a.name AS 企业, count(b) AS 关联企业数量
(2)任意关系类型 

`a-[*..3]-b`关系中没有带箭头,且关系用*号表示,则代表查找任何类型的关系, 包括a->b 和 b->a。

数字3:表示最多通过3级关系连接的节点。

 ① 全量数据

查询所有2级路径可达的节点、及相互关系。

MATCH path=(a:Company)-[*..2]-(b:Company)
RETURN a.name AS 企业, b.name AS 关联企业, path

这种查询方式会查出很多无意义的路径,比如三点关系类型是a->b,b->a,a->c,但这个查询会查出:a->b,b->a,a->c, a->b->a->c, 很明显a->b->a->c里出现了“回转到自身”。

② 只查看 通过指定层级 可相互关联的点:

DISTINCT 去除重复的关系起始点和终结点,分别保留a->b和b->a。

比如,查询通过2级关系 可关联起来的所有Company节点:

MATCH p=(a:Company)-[*..2]-(b:Company)
RETURN DISTINCT a, b

`COLLECT()`函数在Cypher查询语言中是一个聚合函数,它用于将多个值组合成一个列表。

MATCH (a:Company)-[:竞争]-(b:Company)
<think>我们正在总结Neo4j的基础Cypher语法,参考了用户提供的引用内容。这些引用主要来自Cypher语法的不同部分,包括注释、节点创建、模式匹配、索引操作等。我们将按照以下结构组织总结: 1. 注释 2. 节点操作(创建、属性设置) 3. 关系操作 4. 查询(MATCH, OPTIONAL MATCH, WHERE等) 5. 导入数据 6. 索引与约束 注意:引用[1]到[5]提供了具体的语法示例,我们将直接引用这些内容。 开始总结:</think>### Neo4j 基础 Cypher 语法总结 #### 1. 注释与基本结构 - **单行注释**:使用双斜线 `//` ```cypher MATCH (n) RETURN n // 行尾注释 // 整行注释 RETURN n ``` - **节点表示**:`()` 表示节点,可添加变量名、标签和属性[^3] ```cypher () // 匿名节点 (movie:Movie) // 带标签的节点 (m:Movie {title:"Matrix"}) // 带属性的节点 (m:Movie:Action) // 多标签节点 ``` #### 2. 节点与关系操作 **节点创建**: ```cypher CREATE (:Person {name: "Tom", age: 30}) // 创建带属性节点 CREATE (p:Person $param) // 使用参数化属性[^2] ``` **关系创建**: ```cypher MATCH (a:Person), (b:Movie) CREATE (a)-[:ACTED_IN {role: "Neo"}]->(b) // 创建带属性的关系 ``` **唯一索引**: ```cypher CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE // 创建唯一索引[^5] DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE // 删除索引[^5] ``` #### 3. 数据查询(MATCH) **基础查询**: ```cypher MATCH (n) RETURN n // 查询所有节点 MATCH (m:Movie) RETURN m // 查询特定标签节点[^4] ``` **关系查询**: ```cypher // 查询与"Oliver Stone"关联的节点 MATCH (director {name:'Oliver Stone'})--(movie) RETURN movie.title[^4] // 查询关系类型为ACTED_IN的节点 MATCH (wallstreet {title:'Wall Street'})<-[:ACTED_IN]-(actor) RETURN actor[^4] // 带方向的关系查询 MATCH (martin {name:'Martin Sheen'})-[r]->(movie) RETURN r[^4] ``` **可选匹配**: ```cypher OPTIONAL MATCH (n)-[r]->(m) // 类似SQL的LEFT JOIN ``` #### 4. 数据导入与更新 **CSV导入**: ```cypher LOAD CSV WITH HEADERS FROM "url" AS csvLine CREATE (p:Person {id: toInt(csvLine.id), name: csvLine.name})[^4] ``` **属性更新**: ```cypher MATCH (p:Person {name: "Tom"}) SET p.age = 31 // 修改属性 REMOVE p.age // 删除属性 ``` #### 5. 条件过滤(WHERE) ```cypher MATCH (p:Person) WHERE p.name CONTAINS "Sheen" AND p.age > 40 RETURN p[^4] ``` #### 6. 聚合函数 ```cypher MATCH (d:Director)-[:DIRECTED]->(m:Movie) RETURN d.name, COUNT(m) AS movieCount // 统计导演作品数量 ``` --- ### 语法速查表 | 类型 | 关键词 | 示例 | |--------------|------------------------|--------------------------------------| | **节点操作** | `CREATE`, `MATCH` | `CREATE (n:Label {prop:value})` | | **关系操作** | `-[:TYPE]->`, `--` | `(a)-[:FRIEND]->(b)` | | **数据过滤** | `WHERE`, `CONTAINS` | `WHERE n.name = "Neo"` | | **聚合** | `COUNT`, `SUM` | `RETURN COUNT(n)` | | **索引** | `CREATE CONSTRAINT` | `ASSERT cc.number IS UNIQUE`[^5] | | **导入** | `LOAD CSV` | `WITH HEADERS FROM "url"`[^4] | --- ### 最佳实践建议 1. **节点标签**:始终为节点添加语义化标签(如 `:Movie`) 2. **属性索引**:对高频查询属性创建索引加速搜索 3. **参数化查询**:使用 `$param` 避免Cypher注入攻击[^2] 4. **关系方向**:明确指定关系方向(`-->` 或 `<--`)提高可读性 --- ### 相关问题 1. 如何在Cypher中实现多跳关系查询(如朋友的朋友)? 2. `LOAD CSV`导入大数据集时如何优化性能?[^4] 3. 如何通过Cypher实现图的路径查找(最短路径/全路径)? 4. 在属性图中,哪种场景适合使用`OPTIONAL MATCH`代替`MATCH`?[^4] > 注:实际开发中可结合 **Neo4j Browser** 实时验证语法,复杂查询建议先使用 `EXPLAIN` 分析执行计划[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值