Neo4j(4):Neo4j - CQL使用

1 Neo4j - CQL简介

Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。

  • 它是Neo4j图形数据库的查询语言。
  • 它是一种声明性模式匹配语言
  • 它遵循SQL语法。
  • 它的语法是非常简单且人性化、可读的格式。
CQL命令用法
CREATE创建节点,关系和属性
MATCH检索有关节点,关系和属性数据
RETURN返回查询结果
WHERE提供条件过滤检索数据
DELETE删除节点和关系
REMOVE删除节点和关系的属性
ORDER BY排序检索数据
SET添加或更新标签

三个共同朋友的社交图:

使用cypher语言来描述关系:

(fox)<-[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)

2 常用命令

官方说明地址:

Clauses - Neo4j Cypher Manual

2.1 LOAD CSV

后续教程都依赖于该csv的数据进行讲解,下载地址如下:

https://download.csdn.net/download/u013938578/86731836

导入csv到neo4j

(1)导入西游关系表

load csv from 'file:///triples.csv' as line 
create (:xiyouRelation {from:line[1],relation:line[3],to:line[0]})

(2)导入西游人物表

load csv from 'file:///people.csv' as line 
create (:person {name:line[0]})

注意:alt+enter为换行,直接enter为执行

2.2 CREATE创建

create语句是创建模型语句用来创建数据模型

创建节点

#创建简单节点 
create (n) 
#创建多个节点 
create (n),(m) 
#创建带标签和属性的节点并返回节点 
create (n:person {name:'如来'}) return n

创建关系

Neo4j图数据库遵循属性图模型来存储和管理其数据。

根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。

基于方向性,Neo4j关系被分为两种主要类型。

  • 单向关系
  • 双向关系
#使用新节点创建关系 
CREATE (n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'}) return type(r) 

#使用已知节点创建带属性的关系 
match (n:person {name:'沙僧'}),(m:person{name:'唐僧'}) 
create (n)-[r:`师傅`{relation:'师傅'}]->(m) return r 

#检索关系节点的详细信息 
match (n:person)-[r]-(m:person) return n,m

#创建复杂关系
MATCH (n:person {name:'孙悟空'}),(m:xiyouRelation),(s:person) where m.from=n.name and m.to=s.name 
create (n)-[:西游人物关系{relation:m.relation}]->(s) 
RETURN id(m),n.name,m.relation,s.name

创建全路径

create p=(:person{name:'蛟魔王'})-[:义兄]->(:person{name:'牛魔王'})<-[:义兄]- (:person {name:'鹏魔王'}) return p

2.3 MATCH查询

Neo4j CQL MATCH命令用于

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
MATCH (n:xiyouRelation) RETURN n LIMIT 25

MATCH (n:person{name:'孙悟空'}) RETURN n

查询孙悟空的所有关系:

MATCH (n:person {name:'孙悟空'}),(m:xiyouRelation) where m.from=n.name RETURN id(m),n.name,m.relation,m.to

2.4 RETURN返回

Neo4j CQL RETURN子句用于

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
MATCH (n:xiyouRelation) RETURN id(n),n.from,n.to,n.relation

2.5 WHERE子句

像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。

MATCH (n:person) where n.name='孙悟空' or n.name='猪八戒' RETURN n 

#创建关系 
match (n:person),(m:person) where n.name='孙悟空' and m.name='猪八戒'
create (n)-[r:师弟]->(m) return n.name,type(r),m.name

2.6 DELETE删除

Neo4j使用CQL DELETE子句

  • 删除节点。
  • 删除节点及相关节点和关系。
# 删除节点 (前提:节点不存在关系) 
MATCH (n:person{name:"白龙马"}) delete n 

# 删除关系 
MATCH (n:person{name:"沙僧"})<-[r]-(m) delete r return type(r)

2.7 REMOVE删除

有时基于客户端要求,我们需要向现有节点或关系添加或删除属性。我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

  • 删除节点或关系的标签
  • 删除节点或关系的属性
#删除属性 
MATCH (n:role {name:"fox"}) remove n.age return n 

#创建节点 
CREATE (m:role:person {name:"fox666"}) 

#删除标签 
match (m:role:person {name:"fox666"}) remove m:person return m

2.8 SET子句

有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。要做到这一点,Neo4j CQL提供了一个SET子句。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
MATCH (n:role {name:"fox"}) set n.age=32 return n

2.9 ORDER BY排序

Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。

我们可以按升序或降序对行进行排序。默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

MATCH (n:person) RETURN id(n),n.name order by id(n) desc

 

2.10 UNION子句

与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

  • UNION

        它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

        限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

  • UNION ALL

        它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。

        限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。

MATCH (n:role) RETURN n.name as name 
UNION 
MATCH (m:person) RETURN m.name as name 

MATCH (n:role) RETURN n.name as name 
UNION all 
MATCH (m:person) RETURN m.name as name

2.11 LIMIT和SKIP子句

Neo4j CQL已提供 LIMIT 子句和 SKIP 来过滤或限制查询返回的行数。

LIMIT返回前几行,SKIP忽略前几行。

# 前两行 
MATCH (n:person) RETURN n LIMIT 2 

# 忽略前两行 
MATCH (n:person) RETURN n SKIP 2

2.12 NULL值

Neo4j CQL将空值视为对节点或关系的属性的缺失值或未定义值。

当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

match (n:xiyouRelation) where n.relation is null return id(n),n.from,n.relation,n.to

2.13 IN操作符

与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

match (n:xiyouRelation) where n.from in['孙悟空','唐僧'] return id(n),n.from,n.relation,n.to

2.14 INDEX索引

Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。

我们可以为具有相同标签名称的所有节点的属性创建索引。

我们可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

Neo4J索引操作

  • Create Index 创建索引
  • Drop Index 丢弃索引
# 创建索引 
create index on :`西游` (name) 

# 删除索引 
drop index on :`西游` (name)

2.15 UNIQUE约束

在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。

像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束

UNIQUE约束的优点

  1. 避免重复记录。
  2. 强制执行数据完整性规则
#创建唯一约束
create constraint on (n:xiyou) assert n.name is unique 

#删除唯一约束
drop constraint on (n:xiyou) assert n.name is unique

2.16 DISTINCT

这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值。

match (n:`西游`) return distinct(n.name)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不死鸟.亚历山大.狼崽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值