Neo4J 与 Cypher 查询语言基础

前言

图数据库,存储的是节点和关系,而不是表。在Neo4j中,节点和关系都由属性和标签描述。
在 Cypher 查询语句中,节点和关系的表述一般为:

  • 节点:(Variable:Label1:Label2{properties})
  • 关系:-[Variable:Label1:Label2{properties}]-> 其中,箭头可以向左(<-[]-),向右(-[]->),或没有(-[]-),分别表示不同的关系方向和无方向的关系。

其中,Variable 表示当前 cql 语句中,代表该节点(或边)的变量名称。Label 表示标签,可以理解为一个类型。properties 是多个键值对(类似json格式,只是key不能加引号,并且其值类型只能为日期类型和简单类型)。

如下图:
在这里插入图片描述其中:

  • (:Person{name:“Dan”}) 表示一个节点,Person 是他的标签。{name:“Dan”} 是他的属性。
  • -[:LOVES]-> 代表一个关系,LOVES 是关系的标签。

安装:
1、docker:

docker run -d --name neo4j\  //-d表示容器后台运行 --name指定容器名字
	-p 7474:7474 -p 7687:7687 \  //映射容器的端口号到宿主机的端口号
	-v /home/neo4j/data:/data \  //把容器内的数据目录挂载到宿主机的对应目录下
	-v /home/neo4j/logs:/logs \  //挂载日志目录
	-v /home/neo4j/conf:/var/lib/neo4j/conf   //挂载配置目录
	-v /home/neo4j/import:/var/lib/neo4j/import \  //挂载数据导入目录
	neo4j //指定使用的镜像
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -v /home/develop/neo4j/data:/data -v /home/develop/neo4j/logs:/logs -v /home/develop/neo4j/conf:/var/lib/neo4j/conf -v /home/develop/neo4j/import:/var/lib/neo4j/import   neo4j

2、直接下载解压
默认用户密码为:neo4j/neo4j

1、创建

1.1 创建节点

语法:

CREATE <nodeDes>

nodeDes:即上文提到的 (Variable:Label1:Label2{properties})

比如:

CREATE (:Person) 
CREATE (:Person{name:'罗辑'}) 

也可以在语句后添加 RETURN 子句返回创建的节点(在游览器操作时,能直接查看创建的节点):

CREATE (p:Civilization{name:'三体'}) RETURN p

在这里插入图片描述
注:属性格式的内容限制:
在这里插入图片描述

1.2 创建关系

在两个新节点之间创建关系
语法:

CREATE <NodeDes_1> <RelationDes> <NodeDes_2>

其中:

  • NodeDes:(Variable:Label1:Label2{properties})
  • RelationDes:-[Variable:Label1:Label2{properties}]->

向右关系详细版:

CREATE  
   (<from-name>:<from-label>)-
   [<relationship-name>:<relationship-label>{{<properties>}}]->
   (<to-name>:<to-label>)
RETURN <from-name>,<relationship-label-name>,<to-name>

例如:
没有properties属性:

CREATE (p:Person{name:'罗辑'})-[r:THREATEN]->(c:Civilization{name:'三体'}) 
RETURN p,r,c

有properties属性:

CREATE (p:Person{name:'罗辑'})-[r:THREATEN{des:'利用雪地工程'}]->(c:Civilization{name:'三体'}) 
RETURN p,r,c

在已有节点上创建属性
语法:

MATCH <NodeDes_1>, <NodeDes_2>
CREATE <NodeDes_1_Variable> <RelationDes> <NodeDes_2_Variable>

向右关系完整版本:

MATCH (<from-name>:<from-label>{properties}),(<to-name>:<to-label>{properties})
CREATE  
	(<from-name>)-[<relationship-name>:<relationship-label>{<properties>}]->(<to-name>)
RETURN <relationship-label-name>

其中 CREATE 可以替换为 MERGE 指令


例如:
1、创建节点

CREATE (p:Person{name:'叶文洁'}) RETURN p;
CREATE (p:Person{name:'杨卫宁'}) RETURN p;

2、创建关系

MATCH (from:Person {name:'叶文洁'}),(to:Person {name:'杨卫宁'})
CREATE (from)-[kill:KILL{address:'第一红岸'}]->(to)
RETURN from,kill,to

或者:

MATCH (from:Person),(to:Person)
WHERE from.name = '叶文洁' AND to.name = '杨卫宁'
CREATE (from)-[kill:KILL{address:'第一红岸'}]->(to)
RETURN from,kill,to

或者:

MATCH (from:Person {name:'叶文洁'}),(to:Person {name:'杨卫宁'})
MERGE (from)-[kill:KILL{address:'第一红岸'}]->(to)
RETURN from,kill,to

2、查询

MATCH
语法:

MATCH  command
[WHERE condition]
RETURN x
[ORDER BY xxx]
[LIMIT num]

说明:

  • WHERE 子句和 sql 类似。
  • 在语句中可以使用一些方法:
    • exists() 判断属性是否存在
    • count() 计数
    • collect() 将值聚合到列表中
    • size() 计算列表大小
    • UNWIND collect() 遍历列表值

查询所有节点:

MATCH (n) RETURN n
MATCH (p:Person{name:'罗辑'}) RETURN p

上句也等价于:

MATCH (p:Person) 
WHERE p.name = '罗辑'
RETURN p

3、删除

语法:

MATCH  command
WHERE condition
(DETACH) DELETE x

删除边:

MATCH (from:Person{name:'罗辑'})-[r]-(to:Civilization{name:'三体')
DELETE r

删除节点(必须相关的边都被删除了):

MATCH (p:Person{name:'罗辑'})
DELETE p

强制删除节点和边:

MATCH (p:Person{name:'罗辑'})
DETACH DELETE p

同时删除节点和边:

MATCH (from:Person{name:'叶文洁'})-[r]-(to:Person{name:'杨卫宁'})
DELETE from,r,to

清空节点和边:

MATCH (n) DETACH DELETE n

4、修改属性

SET语法:

SET  <property-key>=<property-value>

例如:

MATCH (p:Person{name:'罗辑'}) 
SET p.description='混吃等死清华教授'

在这里插入图片描述


REMOVE语法:

REMOVE <property-name-list>

例如:

MATCH (p:Person{name:'罗辑'}) 
REMOVE p.description

在这里插入图片描述

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

非理性地界生物

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

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

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

打赏作者

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

抵扣说明:

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

余额充值