(二)Cypher语言常用方法举例

1、概述

Cypher是一个描述性Sql图操作语言。相当于关系数据库的Sql,可见其重要性!其语法针对图的特点而设计,非常方便和灵活。没有Join,是一大特点!学好Cypher是学好Neo4j的关键,也是核心所在!

2、Neo4j字段类型

Neo4j字段类型

3、Neo4j基本操作

3.1 增(create)

CREATE (erzi:Person {id:‘erzi’}),       //erzi是别名
(baba:Person {id:'baba'}),
(yeye:Person {id:'yeye',name:'zhangsan'}),
(nainai:Person {id:'nainai'}),
(mama:Person {id:'mama'}),
(bozi:Person {id:'bozi'}),
(erzi)-[:fathor]->(baba),
(baba)-[:fathor]->(yeye),
(baba)-[:mother]->(nainai),
(erzi)-[:mother]->(mama),
(erzi)-[:girlFrend]->(bozi)说明:
create (n:Person {id:'20140101',name:'王五',age:30,card:123456})
相当于关系Sql的:
Create table Person(id varchar2,name varchar2,age number,card number );
Insert into Person values(‘20140101’,’王五’,30,123456);

3.2 查(match)

Match查询语法Match 相当于selectMATCH (n:Person) RETURN n limit 25
等价于:
Select * from Person limit 25问题1:
如何给已经存在的人添加关系?
Match (n:Person {id:'erzi'}),(f:Person {id:'bozi'})
Merge (n)-[:fuqi]->(f)问题2:
儿子和柏之结婚了,relation如何修改?
Match (n:Person ),(f:Person)
where n.id='erzi' and f.id='bozi'
Merge (n)-[r:fuqi]->(f)
# 更Neo4j的一种写法
Match (n:Person{id:'erzi'}),(f:Person{id:'bozi'})
Merge (n)-[r:fuqi]->(f)
说明:merge用来创建关系,如果已经存在,则可以作为查询# 查询和baba这个节点是fathor关系的其它节点,并返回查看这两个节点
match (n:Person {id:'baba'})-[:fathor]-(f) return n,f
# 查询和baba这个节点的fathor,并返回查看这两个节点
match (n:Person {id:'baba'})-[:fathor]->(f) return n,f
# 查询和baba这个节点的fathor,只返回baba这个节点的fathor
match (n:Person {id:'baba'})-[:fathor]-(f) return f

3.3、改(set)

Cypher中无Update,用set代替# 更新属性
Match (n:Person {id:'baba'}) set n.name='张三' return n# 属性名是写数据时自动创建,无schme特性,这点同no-sql库;支持非结构化数据;非结构化:不同行的数据可以有不同的列个数;
Match (n:Person {id:'baba'}) set n.name='张三',n.age=50 return n说明:Cypher语言中,任意语法都可以有return 

3.4 删(delete,remove)

DELETE和REMOVE主要区别 :
① DELETE操作用于删除节点和relation(针对图结构)。
② REMOVE操作用于删除标签label和属性(针对关系型结构)。说明:Remove label 等同于drop table;两个命令都应该与MATCH命令一起使用。Match (n:Person {id:'baba'}) remove n.age return n
MATCH (s:Teacher)-[r:teach]->(d:Student) delete r,s,d   //删除与该关系相关的老师和学生及label 
MATCH (n:Test) remove n:Test   //删除label
# 如何仅仅删除一个relation?
Match (a:Person),(b:Person) where a.id='erzi' and b.id='bozi' merge (a)-[r:FUQI]->(b) DELETE r
# 或者更Neo4j的写为
Match (a:Person{id:'erzi'}),(b:Person{id:'bozi'})
merge (a)-[r:FUQI]->(b) DELETE r# 删除所有记录
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

3.5 排序(order by)

# 同关系sql
MATCH (n:Person) RETURN n order by n.id,n.name desc  LIMIT 25# 正序
MATCH (n:Person) RETURN n order by n.id LIMIT 25

3.6 限制显示(limit)

MATCH (n:Customer) RETURN n LIMIT 25

3.7 跳过前n条(skip)

MATCH (n:Person) RETURN n order by n.id desc skip 2  LIMIT 25

3.8 union和union all

# 同关系sql
# Union:把多段Match的return结果 上线组合成一个结果集,会自动去掉重复行;
# Union all:作用同union,但不去重;
MATCH (n:Person) where n.age>20 RETURN n.id,n.age 
union all
MATCH (n:Person) where n.id='erzi' RETURN n.id,n.age

3.9 Null

# Where 属性 is null,其实同关系sql语法,就是把结果进行“并”
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id='erzi' and n.age is not null  RETURN n.id,n.age

3.10 in

# 中括号标识某个字段的范围
MATCH (n:Person) where n.age>20 RETURN n.id,n.age union all MATCH (n:Person) where n.id in ['erzi','bozi','baba']  RETURN n.id,n.age

3.11 内置id

每个节点或relation都有个系统分配的id,从0开始递增,全局唯一!
Create (a:Person {id:’123’})   //这里的ID是一个属性,和内置ID是两码事
通过函数id(node/relation) 可以获取id值;
不透明,犹如Oracle里的rowid;
用户可定义id属性,与内置id无关;

3.12 Relation 具有方向性

# Create节点之间关系时,必须指定方向,否则会报错
# 查询时可以不指定方向,意思时哪个方向都可以
MATCH (n:Person)-[:FUQI]-(s:Person) RETURN distinct n,s

3.13 索引(index)

# 建立索引后前后的复杂度分别时O(n),O(1)
create index on :Person(id);
drop index on :Person(id);
给哪些字段创建索引呢?根据查询需要,把查询多的字段建索引。
create index on :Person(name);1、不需要给索引起名称,只需要设置索引字段即可;
2、通过该字段的查询都走索引whereinsubstring
关系DB中:索引字段套一层函数的话,基本不走索引了。

3.14 执行计划(explain)

# 用于跟踪显示查询的过程
explain MATCH p=()-[r:ORDERS]->() RETURN p LIMIT 25
explain

 

3.15 属性唯一约束  CONSTRAINT

# 给属性建立索引时,同一个属性值不能对应两条记录,其实就是属性的唯一性约束要求
# 通过CONSTRAINT可以给属性设置、取消唯一性要求
CREATE CONSTRAINT ON (a:Person) ASSERT a.id IS UNIQUE
Drop CONSTRAINT ON (a:Person) ASSERT a.id IS UNIQUE

3.16 常用函数

# 即用即查
功能函数	描述
UPPER	它用于将所有字母更改为大写字母。
LOWER	它用于将所有字母改为小写字母。
SUBSTRING	它用于获取给定String的子字符串。
REPLACE	它用于替换一个字符串的子字符串。
Match (n:Person) return SUBSTRING(n.id,2,0),n.id聚合函数	描述
COUNT	它返回由MATCH命令返回的行数。
MAX	它从MATCH命令返回的一组行返回最大值。
MIN	它返回由MATCH命令返回的一组行的最小值。
SUM	它返回由MATCH命令返回的所有行的求和值。
AVG	它返回由MATCH命令返回的所有行的平均值。# Neo4j无 group by,用以下方式执行
Match (n:Person) return count(*)
Match (n:Person) return avg(n.age)   只包含age不为空的node

3.17 查询最短路径(shortestPath)


# 返回所有最短路径
allShortestPaths # [*..n]  用于表示获取n层关系,下面的意思时获取奶奶和妈妈之间距离为<=3的最短路径,两个点相连
# 其距离是1,存在多个最短路径时,仅随机返回1个
match p=shortestPath((n:Person {id:'mama'})-[*..3]-(b:Person {id:'nainai'})) return p# 关系链路越短,代表这两个节点的关系越密切!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

github 人像卡通化探索项目

把项目下载到本地 下载地址 https://github.com/minivision-ai/photo2cartoon安装依赖库 python 3.7 # 3.x版本都可 pytorch 1.4 tensorflow-gpu 1.14 # tesorflow 得是1.0版本&#xff0c;2.0版本语法部分改变&#xff0c;不然项目运行会出错 face-alignment dlibpytorch …

CVE-2013-3897漏洞成因与利用分析

CVE-2013-3897漏洞成因与利用分析 1. 简介 此漏洞是UAF&#xff08;Use After Free&#xff09;类漏洞&#xff0c;即引用了已经释放的内存。攻击者可以利用此类漏洞实现远程代码执行。UAF漏洞的根源源于对对象引用计数的处理不当&#xff0c;比如在编写程序时忘记AddRef或者多…

(三)Neo4j自带northwind案例--Cypher语言应用

0、概述 通过该案例&#xff0c;应用Cypher查询语言&#xff0c;感受Neo4j套路。官方的用此案例的用意&#xff1a; The Northwind Graph demonstrates how to migrate&#xff08;迁移&#xff09; from a relational database to Neo4j&#xff08;把一个负责的多表关系数据…

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;给用户和开发者最佳的.Net框架部署方案。该框架以SOA范式作为指导思想&#xff0c;作为异质系统整合与互操…

(六)Neo4j综合项目

0、概述 本文以热播电视剧《人民的名义》中的人物关系为数据基础&#xff0c;抛开案例本身的内容&#xff0c;本项目的意义在于指出使用Neo4j数据库的一般流程是什么&#xff1f;包括数据的导入、操作、查询、展示&#xff0c;从而体会出与传统数据库相比Neo4j在处理图数据的巨…

过滤器filter,监听器listener

目录1. filter过滤器1.1 原理1.2 配置1.3 过滤掉脏话demo2. listener监听器2.1 作用2.2 ServletContextListener demo1. filter过滤器 作用:过滤servlet&#xff0c;jsp&#xff0c;js&#xff0c;css&#xff0c;图片对象&#xff0c;以及一切在服务器&#xff0c;客户端想访…

(一)elasticsearch6.1.1安装详细过程

1、配置java环境 检查java环境 满足elasticsearch6.1.1java环境要求&#xff1b; 2、安装ElasticSearch6.1.1 ①为es新生成用户、用户组 su root groupadd esgroup useradd ela -g esgroup -p 5tgbhu8[rootlocalhost fibonacci]# su ela Attempting to create directory /h…

使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

xml的创建&#xff0c;解析1. 什么是xml文件1.1 什么是xml文件1.2 解析xml的方式&#xff0c;优缺点2. 使用dom操作xml文件2.1 使用dom创建xml文件2.2 使用dom解析xml文件2.3 使用dom对xml文件增删改3. 使用SAX解析xml文件4. 使用DOM4J操作xml文件4.1 使用DOM4J创建xml文件4.2 …

(二)ElasticSearch6.1.1 Python API

0、准备开启数据库 ① 关闭Linux防火墙&#xff0c;这个很重要&#xff0c;否则API总是报错连不上。 # 查看防火墙状态 firewall-cmd --state# 关闭防护墙 systemctl stop firewalld.service# 开启防火墙 systemctl start firewalld.service# 重启防火墙 systemctl restart f…

sqlite3数据库使用

SQLite简介 SQLite是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&#xff0c;这是在普及方面的增长&#xff0c;与它的尺寸大小无关。SQLite 源代码不受版权限制。 什么是sqlite SQLite是一…

(三)ElasticSearch的基本概念

0、面向文档 应用中的对象很少只是简单的键值列表&#xff0c;更多时候它拥有复杂的数据结构&#xff0c;比如包含日期、地理位置、另一个对象或者数组。 总有一天你会想到把这些对象存储到数据库中。将这些数据保存到由行和列组成的关系数据库中&#xff0c;就好像是把一个丰…

ajax下拉框省市级联动

目录效果sql数据前后台代码实现效果 初始访问页面 选中省会&#xff0c;自动刷新页面 sql数据 -- 省市联动数据CREATE TABLE PROVINCE (PID NUMBER PRIMARY KEY,PNAME VARCHAR(20) NOT NULL )SELECT * FROM PROVINCEINSERT INTO province VALUES (1, 北京市); INSERT I…

python的with关键字

with语句适用于对资源进行访问的场合&#xff0c;确保不管使用过程中是否发生异常都会执行必要的“清理”操作&#xff0c;释放资源&#xff0c;比如文件使用后自动关闭、线程中锁的自动获取和释放等。with表达式其实是try-finally的简写形式。但是又不是全相同。 ""…

pgm2

MRF 笔记 我们先讨论引入 MRF 的必要性。经典的例子就是四个 r.v.s 连成一个正方形的结构的时候&#xff0c;我们没法通过 BN 获得给定对角线两个 r.v.s 而剩下的条件独立&#xff08;不都是 d-sep&#xff09;&#xff0c;反过来如果希望通过 MRF 刻画某些 BN 也是不可行的&am…

(六)ElasticSearch 6.1.1聚合查询

1 普通类型 1.1 基本操作 1.1.1 导入实战数据 数据字段如下&#xff1a; 字段类型作用pricelong汽车售价colortext汽车颜色maketext汽车品牌solddate销售日期 # 创建索引 PUT /cars {"mappings" : {"transactions" : {"properties" : {"…

12 Essential Bootstrap Tools for Web Designers

12 Essential Bootstrap Tools for Web Designers Posted by vikas on June 6, 2014, filed in: Tools, Web Design 原文地址&#xff1a;http://designzum.com/2014/06/06/12-best-bootstrap-tools-for-web-designers/Bootstrap is a great front end website development pla…