neo4j 一些常用的cql

本文介绍如何使用Cypher语言在Neo4j图数据库中进行节点和关系的创建、查询、更新及删除等基本操作,并涵盖属性、关系、级次等多种查询方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建节点、关系

创建节点(小明):create (n:people{name:’小明’,age:’18’,sex:’男’}) return n;
创建节点(小红): create (n:people{name:’小红’,age:’18’,sex:’女’}) return n;
创建关系(小明送礼物给小红):小明节点id为0,小红节点id为1
start a =node(0),b=node(1) create (a)-[n:gift]->(b)return n

属性查询

查询18岁的人
Match (n: people) where n.age = 18 return n

查询大于18岁的人
Match (n: people) where n.age > 18 return n

查询大于等于18岁的人
Match (n: people) where n.age >= 18 return n

查询不等于18岁的人
Match (n: people) where n.age <> 18 return n

关系查询

正向查询
查询小明送礼物给了哪些人,有两种写法:(以下例子类似)
Match (n:people)-[: gift]->(end:people) where n.name=’小明’ return end
Match (n:people{name: ‘小明’})-[:gift]->(end:people) return end

反向查询
查询哪些人送了礼物给小明
Match (n:people{name: ‘小明’})<-[:gift]-(end:people) return end

无方向查询
查询和小明有礼物来往的人
Match (n:people{name: ‘小明’})-[:gift]-(end:people) return end

ID查询

在neo4j中,每一个节点,会自动有一个唯一Id。
查找id为1的节点,有两种方式:

Start n = node(1) return n
Match (n:people) where ID(n)=1 return n

级次查询(树形遍历)

这里写图片描述
这里写图片描述
以根部为条件,查询第二层的节点

Match (start:people{name:’小明’})-[:gift*2..2]->(end:people) return end

以根部为条件,查询第一层和第二层的节点

Match (start:people{name:’小明’})-[:gift*1..2]->(end:people) return end

以根部为条件,按级次查询出所有直接或间接获得过小明的礼物的人

Match (start:people{name:’小明’})-[:gift*]->(end:people) return end

Delete

删除2个节点之间的关系:

Match (x:people{name:’小明’})-[r:gift]->(y:people{name:’小红’}) delete r

删除节点,会删除和该节点有关的所有关系:

Match (n:people{name:’小红’}) delete n

Count

(不按属性)查询标签(people)中一共有多少节点(人):

Match (n:people) return count(n)

(按属性)查询标签(people)中年龄为18岁的一共有多少节点(人):
三种写法:

Match (n:people) where n.age=18 return count(n)
Match (n:people{age:’18’}) return count(n)
Match (n:people) return count(n.age=18)

Limit

查询标签(people)中的10个节点(人):

Match (n:people) return n limit 10

Distinct

查询标签(people)中所有的不同的age:

Match (n:people) return distinct(n.age)

Order by

根据标签(people)中的name 排序:

Match(n:people) return n order by name (默认升序)
Match(n:people) return n order by name asc (升序)
Match(n:people) return n order by name desc (降序)

Union all (Union)

求并集,不去重(去重用Union):

Match(n:people) where n.age=18 return n.name as name
Union all
Match(n:friend) where n.age=18 return n.name as name

In

查询id为0,5,8的节点:

Match (n) where ID(n) IN[0,5,8] return n

Exists

判断节点是否存在 name这个属性:

Match (n) where exists(n.name) return n

With

查询name以‘小’开头的节点:

Match (n) where n.name starts with ‘小’ return n

查询name以‘明’结尾的节点:

Match (n) where n.name ends with ‘明’ return n

Contains

查询name中含有 ‘小’的节点

Match (n) where n.name Contains ‘小’ return n

Neo4j的Cypher查询语言中,函数是构建查询的重要组成部分,它们可以用于处理字符串、数值、日期、地理空间数据等。以下是一些常用的Cypher函数及其使用方法。 ### 1. 聚合函数 聚合函数用于对一组值进行计算,并返回单个值。常见的聚合函数包括: - `count()`:计算匹配的行数。例如,`MATCH (n:Person) RETURN count(n)` 将返回所有`Person`节点的数量[^1]。 - `sum()`:计算所有值的总和。例如,`MATCH (n:Product) RETURN sum(n.price)` 将返回所有产品价格的总和。 - `avg()`:计算所有值的平均值。例如,`MATCH (n:Product) RETURN avg(n.price)` 将返回所有产品价格的平均值。 - `min()` 和 `max()`:分别返回最小值和最大值。例如,`MATCH (n:Product) RETURN min(n.price), max(n.price)` 将返回产品价格的最小值和最大值。 ### 2. 字符串函数 字符串函数用于操作和处理字符串数据。 - `split()`:将字符串按指定分隔符拆分为列表。例如,`RETURN split('hello,world', ',')` 将返回 `['hello', 'world']`。 - `replace()`:替换字符串中的部分。例如,`RETURN replace('hello world', 'world', 'Neo4j')` 将返回 `'hello Neo4j'`。 - `substring()`:提取子字符串。例如,`RETURN substring('hello world', 0, 5)` 将返回 `'hello'`。 - `toUpper()` 和 `toLower()`:将字符串转换为大写或小写。例如,`RETURN toUpper('hello')` 将返回 `'HELLO'`。 ### 3. 数值函数 数值函数用于处理数值数据。 - `abs()`:返回绝对值。例如,`RETURN abs(-5)` 将返回 `5`。 - `ceil()` 和 `floor()`:分别返回大于或等于给定数的最小整数和小于或等于给定数的最大整数。例如,`RETURN ceil(3.2)` 将返回 `4`。 - `round()`:四舍五入。例如,`RETURN round(3.5)` 将返回 `4`。 ### 4. 时间和日期函数 时间和日期函数用于处理日期和时间数据。 - `datetime()`:返回当前的日期和时间。例如,`RETURN datetime()` 将返回当前的日期和时间。 - `date()`:返回当前日期。例如,`RETURN date()` 将返回当前的日期。 - `duration()`:计算两个时间之间的持续时间。例如,`RETURN duration('2023-01-01', '2023-01-02')` 将返回 `P1D`,表示一天的时间差。 ### 5. 地理空间函数 地理空间函数用于处理地理坐标数据。 - `distance()`:计算两个地理坐标之间的距离。例如,`RETURN distance(point({latitude: 56.7, longitude: 12.78}), point({latitude: 56.7, longitude: 12.78}))` 将返回 `0`,因为两个点相同。 - `point()`:创建一个地理坐标点。例如,`RETURN point({latitude: 56.7, longitude: 12.78})` 将返回一个地理坐标点。 ### 示例代码 以下是一个简单的Cypher查询示例,展示如何使用一些常用函数: ```cypher MATCH (p:Person) RETURN p.name AS name, toUpper(p.name) AS upperName, length(p.name) AS nameLength, split(p.email, '@') AS emailParts ``` 此查询将返回`Person`节点的名称、大写名称、名称长度以及电子邮件地址的拆分部分。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值