Neo4j语法教程

article/2025/9/15 17:54:34

neo4j简版教程

create (<node-name:<label-name2>:<label-name2>......>) return <node-name>

可以给一个节点创建多label的node

eg:

CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

Neo4j CQL创建具有属性的节点

CREATE (

   <node-name>:<label-name>

   {   

      <Property1-name>:<Property1-Value>

      ........

      <Propertyn-name>:<Propertyn-Value>

   }

)

Match命令

MATCH 
(<node-name>:<label-name>
)

Return命令

RETURN <node-name>.<property1-name>,........<node-name>.<propertyn-name>

Match Return

MATCH Command
RETURN Command

eg:

MATCH (dept: Dept)
RETURN dept.deptno,dept.dname

一个完整的命令

CREATE+MATCH+RETURN命令

Neo4j CQL中,我们不能单独使用MATCHRETURN命令,因此我们应该结合这两个命令从数据库检索数据。

neo4j关系

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

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

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

  • 单向关系
  • 双向关系

 

现有节点创建无属性的关系(关系也可以有属性)

语法:

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE  (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>

match 匹配现有节点,create创建现有关系,return返回关系语句。

现有节点创建有属性的关系(即给关系加上属性值)、

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE  (<node1-label-name>)-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
<define-properties-list>的定义如下:{ <property1-name>:<property1-value>,<property2-name>:<property2-value>,...<propertyn-name>:<propertyn-value>
}return语句是可以省略的(如果不想看到结果)

eg:

MATCH (cust:Customer),(cc:CreditCard)

CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)

RETURN r

创建新节点和属性:

一次性创建两个新节点并创建没有属性的关系

CREATE  (<node1-label-name>:<node1-name>)-[<relationship-label-name>:<relationship-name>]-> (<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>

eg:

CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) 

创建新节点并创建带属性的关系

CREATE  (<node1-label-name>:<node1-name>{<define-properties-list>})-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node1-label-name>:<node1-name>{<define-properties-list>})
RETURN <relationship-label-name>

<define-properties-list>语法

{ <property1-name>:<property1-value>,<property2-name>:<property2-value>,...<propertyn-name>:<propertyn-value>
}

获取(检查)节点或者关系的详细信息:

MATCH (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc) RETURN cust,cc

where字句

简单where字句:

WHERE <condition>

复杂WHERE子句语法

WHERE <condition> <boolean-operator> <condition>

<condition>语法

<property-name> <comparison-operator> <value>

boolean-operator运算符:

and or not xor

比较运算符:

=  ,  <>不等于,>,<,>=,<=

 

delete删除

分两类:

1、删除节点

2、删除节点及相关节点和关系

 

删除节点

         从数据库永久删除节点及其关联的属性。

DELETE <node-name-list>

eg:

MATCH (e: Employee) DELETE e

先用match匹配,然后用delete删除,删除单个节点

note:即先前用match匹配,然后return返回,现在只需要把return换成delete

 

delete节点和关系字句

DELETE <node1-name>,<node2-name>,<relationship-name>

note:这个delete只适合当前两个节点有关系,两个节点与其它节点均无关系。

当删除某个节点A时,若不一起删除与节点A相关的关系,将出现报错error并无法删除

这是属性图的限制--(这是删除的节点上有连接的关系)。

解决方法:

1、删除所有的关系,再删除节点

2、选择使用detach delete子句。detach delete字句允许你删除一个节点的同时删除与其相连的关系。

第2中方案的使用方法:

match (a:Artist {name:"张三"}) detach delete a

 

删除整个数据库:

MATCH (n) DETACH DELETE n

 

remove删除:

向现有节点或者关系删除属性

 

Neo4j CQL REMOVE命令用于

  • 删除节点或关系的标签
  • 删除节点或关系的属性

 

Neo4j CQL DELETEREMOVE命令之间的主要区别

  • DELETE操作用于删除节点和关联关系。
  • REMOVE操作用于删除标签和属性。

Neo4j CQL DELETEREMOVE命令之间的相似性

  • 这两个命令不应单独使用。
  • 两个命令都应该与MATCH命令一起使用。

REMOVE属性子句语法

REMOVE <property-name-list>

eg:

MATCH (book { id:122 })
REMOVE book.price
RETURN book

set字句

向现有节点或关系添加新属性

Neo4j CQL已提供SET子句来执行以下操作。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
  • SET  <property-name-list>

eg:

MATCH (dc:DebitCard)
SET dc.atm_pin = 3456
RETURN dc

sortging 排序:

order by排序,默认按照行进行升序的排序,若使用降序,则使用desc

ORDER BY子句语法

ORDER BY  <property-name-list>  [DESC]   

<property-name-list>语法:

<node-label-name>.<property1-name>,
<node-label-name>.<property2-name>, 
.... 
<node-label-name>.<propertyn-name> 

注意 -

应该使用逗号(,)运算符来分隔属性名列表。

eg:

MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
MATCH (emp:Employee) RETURN emp.empid,emp.name,emp.salary,emp.deptno ORDER BY emp.name DESC

UNION联盟

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

  • UNION
  • UNION ALL

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

限制:

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

UNION子句语法

<MATCH Command1> UNION
<MATCH Command2>

eg:

MATCH (cc:CreditCard) RETURN cc.id,cc.number UNION 
MATCH (dc:DebitCard) RETURN dc.id,dc.number

观察结果列(return返回的列),但是由于上述的句子具有不同的节点前缀,会报错,可以使用as子句来提供别名

eg:

MATCH (cc:CreditCard)  RETURN cc.id as id,cc.number as number,cc.name as name, cc.valid_from as valid_from,cc.valid_to as valid_to
UNION MATCH (dc:DebitCard) RETURN dc.id as id,dc.number as number,dc.name as name, dc.valid_from as valid_from,dc.valid_to as valid_to

UNION ALL子句

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

限制

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

UNION ALL子句语法

<MATCH Command1>UNION ALL
<MATCH Command2>

eg:

MATCH (cc:CreditCard) RETURN cc.id as id,cc.number as number,cc.name as name,  cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL MATCH (dc:DebitCard) RETURN dc.id as id,dc.number as number,dc.name as name, dc.valid_from as valid_from,dc.valid_to as valid_to

LIMITSKIP子句

CQL LIMIT子句

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

LIMIT子句语法

LIMIT <number>

eg:

MATCH (emp:Employee) RETURN emp LIMIT 2

CQL SKIP子句

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

即:跳过return结果集中前面的记录个数

MATCH (emp:Employee) RETURN emp SKIP 2

merge命令:

Neo4j使用CQL MERGE命令

  • 创建节点,关系和属性
  • 为从数据库检索数据
  • MERGE命令是CREATE命令和MATCH命令的组合。
  • MERGE = CREATE + MATCH
  • Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果
     
  • 如果它不存在于图中,则它创建新的节点/关系并返回结果。

 

Neo4j CQL MERGE语法

MERGE (<node-name>:<label-name> 
{<Property1-name>:<Pro<rty1-Value>.....<Propertyn-name>:<Propertyn-Value> })

解释:

比如create (张三:Person {age:18})

在使用create命令创建爱新节点时,若是相同的语句执行两个或者多个,那么每一次的执行都会创建新的节点,并且是相互独立的。
那么merge (张三:Person{age:18})

执行多个依然是一个节点。

merge命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。

 

NULL值:

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

比如在创建Person标签时,一般包含name,age,address

但是在创建一个Person新节点时,若未指定这些属性,则默认填充是null(这个是return返回的实例属性有关)

可以通过where字句来限制返回某些属性是否null

eg:

match (e:Employee) where e.name is not null return e.name,e.age

返回name不为null的记录

或者where字句设置成 where e.name is null,返回namenull的属性

 

In操作符

IN操作符语法

IN[<Collection-of-values>]

其中[,]是集合的开始和结束

 

eg:

MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno

图形字体

目的是更改UI中字体的大小和颜色

新版本的UI信息:

CQL函数:

字符串函数

包含:

UPPER

LOWER

SBUSTRING

REPLACE

 

函数语法

UPPER (<input-string>)

注意:-

<input-string>可以是来自Neo4J数据库的节点或关系的属性名称。

eg:

MATCH (e:Employee) 
RETURN e.id,UPPER(e.name),e.sal,e.deptno

SUBSTRING

它接受一个字符串作为输入和两个索引:一个是索引的开始,另一个是索引的结束,并返回从StartIndedEndIndex-1的子字符串。 所有CQL函数应使用()括号。

SUBSTRING(<input-string>,<startIndex> ,<endIndex>)

注意:-

Neo4J CQL中,如果一个字符串包含n个字母,则它的长度为n,索引从0开始,到n-1结束。

<startIndex>SUBSTRING函数的索引值。

<endIndex>是可选的。 如果我们省略它,那么它返回给定字符串的子串从startIndex到字符串的结尾。

 

聚合函数:

COUNT

MAX

MIN

SUM

AVG

 

函数语法

COUNT(<value>)

注意 -

<value>可以是*,节点或关系标签名称或属性名称。

ATCH (e:Employee) RETURN COUNT(*)

 

[MAX|MIN|AVG](<property-name>)

注意 -

<property-name>应该是节点或关系的名称。

MATCH (e:Employee) 
RETURN SUM(e.sal),AVG(e.sal)

比如,存在这样一个记录:

MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2) 
RETURN movie

检测关系的开始节点:

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN STARTNODE(movie)

 

检测关系的结束节点:

MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN ENDNODE(movie)
MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN ID(movie),TYPE(movie)

返回的是:movieIDmovie的类型typeACTION_MOVIES

CQL 索引

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

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

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

 

Neo4J索引操作

  • Create Index 创建索引
  • Drop Index 丢弃索引

创建索引的语法:

CREATE INDEX ON :<label_name> (<property_name>)

注意:-

冒号(:)运算符用于引用节点或关系标签名称。

上述语法描述它在节点或关系的<label_name><property_name>上创建一个新索引。

CREATE INDEX ON :Customer (name)

Drop Neo4j索引

Neo4j CQL已提供“DROP INDEX”命令删除NODERelationship的属性的现有索引。

Drop Index语法:

DROP INDEX ON :<label_name> (<property_name>)

注意:-

冒号(:)运算符用于引用节点或关系标签名称。

上述语法描述它删除在节点或关系的<label_name><property_name>上创建的现有索引。

 

CQL UNIQUE约束

Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据我们对某些节点或关系的应用需求,我们必须避免这种重复。 然后我们不能直接得到这个。 我们应该使用一些数据库约束来创建节点或关系的一个或多个属性的规则。Neo4j数据库也支持对NODERelationship的属性的UNIQUE约束

UNIQUE约束的优点

  • 避免重复记录。
  • 强制执行数据完整性规则。

 

Neo4j CQL UNIQUE约束操作

  • 创建UNIQUE约束
  • 丢弃UNIQUE约束。

 

创建UNIQUE约束

Neo4j CQL已提供“CREATE CONSTRAINT”命令,以在NODE或关系的属性上创建唯一约束。

创建唯一约束语法

CREATE CONSTRAINT ON (<label_name>) 
ASSERT <property_name> IS UNIQUE

assertneo4j的关键字

 

删除UNIQUE约束

Neo4j CQL提供了“DROP CONSTRAINT”命令,以从NODERelationship的属性中删除现有的Unique约束。

 

删除UNIQUE约束语法:

DROP CONSTRAINT ON (<label_name>) ASSERT <property_name> IS UNIQUE

neo4j的函数概括图:

https://neo4j.com/docs/cypher-refcard/current/

 

 

 


http://chatgpt.dhexx.cn/article/pXcbRc4F.shtml

相关文章

【数据库】linux安装neo4j教程(neo4j 4.x)

一.配置jdk neo4j 4.x版本依赖jdk11&#xff0c;需要安装jdk11才能正常启动&#xff08;安装高版本或低版本jdk都不行&#xff09; 1&#xff09;执行uname -a看下系统架构 2&#xff09;根据系统架构下载对应安装包 https://www.oracle.com/java/technologies/javase/jdk11…

linux neo4j 教程,Neo4j 入门教程 - 安装

本篇来简单介绍下如何下载并安装 Neo4j&#xff0c;篇目很短&#xff0c;因为真的很简单。 下载 Neo4j 首先在 https://neo4j.com/download/ 下载 Neo4j。你可以选择企业体验版或者免费的社区版&#xff0c;这里我是用的社区版。点击 Download 按钮即可开始下载。 网站会自动下…

使用Docker安装neo4j教程

拉取镜像源 docker pull neo4j(:版本号) //缺省 “:版本号” 时默认安装latest版本的查看本地镜像 docker images启动容器 docker run -d --name container_name -p 7474:7474 -p 7687:7687 -v /home/neo4j/data:/data -v /home/neo4j/logs:/logs -v /home/neo4j/conf:/var…

neo4j教程 java_neo4j 教程

Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。本教程将教你Neo4j的基础知识&#xff0c;Java与Neo4j和Spring DATA与Neo4j。 本教程分为Neo4j简介&#xff0c;Neo4j CQL&#xff0c;Neo4j CQL函数&#xff0c;Neo4j管理员&#xff0c;Neo4j与J…

最详细的Neo4J解读(附安装教程)

文章目录 一、Neo4j简介二、Neo4j - 特点和优势1.Neo4j的特点2.Neo4j的优点3.Neo4j的缺点或限制 三、Neo4j - 数据模型四、Neo4j安装及配置1.安装Java JDK2.下载安装Neo4j3.创建系统环境变量4.Neo4j的启动和停止5.切换数据库 五、Neo4j的CQL操作 一、Neo4j简介 Neo4j是一种流行…

图数据库Neo4j实战(全网最详细教程)

1.图数据库Neo4j介绍 1.1 什么是图数据库&#xff08;graph database&#xff09; 随着社交、电商、金融、零售、物联网等行业的快速发展&#xff0c;现实社会织起了了一张庞大而复杂的关系网&#xff0c;传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数…

neo4j入门

目录 一、安装 二、CQL使用 三、Springboot(2.4以上版本)整合neo4j 四、使用过程中的问题 1、自定义查询&#xff0c;cql无法接收变量 2、使用依赖去操作neo4j只有return才会执行 3、neo4j和mysql事务冲突 补充 一、安装 1、首先要配置jdk&#xff0c;默认电脑中有jdk…

Neo4j 安装、使用教程

文章目录 一、Neo4j 的安装与配置1、安装JDK2、安装Neo4j3、Neo4j环境变量配置4、启动服务器 二、Neo4j 使用教程 一、Neo4j 的安装与配置 1、安装JDK 由于Neo4j是基于Java的图形数据库&#xff0c;运行Neo4j需要启动JVM进程&#xff0c;因此必须安装JAVA SE的JDK。配置 JDK环…

neo4j新手教程

neo4j新手教程 本文通过一个实际的案例来一步一步使用Cypher来操作Neo4j。 这个案例的节点主要包括专业和课程两类&#xff0c;课程和课程之间有前置、并列等关系&#xff0c;专业和课程之间有包含等关系。 1、&#xff08;可选&#xff09;首先&#xff0c;我们删除数据库中…

微信开发者工具元素快速定位审查元素

一般浏览器里鼠标在元素上右键点击审查元素或检查元素即可快速打开开发者工具并定位到该元素&#xff0c;但在微信开发者工具中不支持&#xff0c; 解决方法 点击 elements左边的 小鼠标 图片&#xff0c;然后在主页面点击元素即可快速定位

代码审查规范(试用版)

目录 1、背景 2、目标 3、流程 4、指定代码审查规范 4.1、命名风格 4.2、常量定义 4.3、代码风格 4.4、注释风格 4.5、控制语句 5、执行代码审查规范 6、开展PR Bash活动 1、背景 2019年已成历史&#xff0c;2020年已经悄然到来。2019年&#xff0c;我们的研发团队经…

sonar代码审查

sonar代码审查 sonarqube简介七个方面检测代码质量sonarqube结构组件集成方式 sonar部署部署须知sonar搭建步骤1.查看本地环境2.查看java环境3.安装mysql4.安装及配置sonar5.启动sonar启动启动遇到的问题 sonar代码扫描一、使用sonar-scanner进行本地扫描二、使用Android studi…

代码审查

代码审查&#xff1a; 一种有效帮助提升代码质量的有效途径。 代码审查3W(what why when)常见的代码审查工具代码审查流程 1.代码审查3W(what why when)&#xff1a; 代码审查&#xff1a;对计算机源代码系统化的审查&#xff0c;常用软件同行评审的方式进行&#xff0c;目…

java 代码审查_代码审查(Code Review)清单

代码审查可以帮助提高代码质量,避免由于代码习惯而造成的 bug。下面列出的这些要点因该可以作为大部分代码审查的指导,如果是 Java 应用的话,这些建议应该被视作最佳实践。 文档 1. Javadoc 应该在每一个类和方法中添加。 2. 如果是修复某个 bug,应该添加 bug ID。 3. 走捷…

静态代码审查

本篇介绍静态代码审查的意义以及如何在Android studio中集成它们。需要注意的是&#xff0c;这些工具不是万能的&#xff0c;虽然它们能高效且全面地执行代码检查工作&#xff0c;但它们并不具备人类的“逻辑思维”优势。也就是说&#xff0c;静态代码审查工具是无法确保程序逻…

代码审查的必要性和最佳实践

目录 代码审查的流程 代码审查的争议 加班要累死了&#xff0c;完成项目都来不及&#xff0c;还做什么代码审查&#xff1f; 代码审查太费时间&#xff0c;改来改去无非是一些格式、注释、命名之类不痛不痒的问题。 团队的习惯和流程就是不做代码审查&#xff0c;大家都是…

如何审查网页元素

如何审查网页元素 对于一个优秀的爬虫工程师而言&#xff0c;要善于发现网页元素的规律&#xff0c;并且能从中提炼出有效的信息。因此&#xff0c;在动手编写爬虫程序前&#xff0c;必须要对网页元素进行审查。本节将讲解如何使用“浏览器”审查网页元素。 浏览器都自带检查…

代码审查(文档整理)

常用的代码审查工具 git/SUBVERSIONGerritUpsource显示代码变更√√√使用源码仓库√√在线代码讨论√√异步审查支持√√使用协议GPLv2/Apache License 2.0Apache License 2.0付费license 代码审查 范根检查法 轻量级的审查流程 结对编程同步代码审查异步代码审查 代码审查需…

代码审查“查”什么?

让我们来谈谈代码审查&#xff08;Code Review&#xff09;。如果花几秒钟去搜索有关内容&#xff0c;你会发现许多论述代码审查好处的文章&#xff08;例如&#xff0c;Jeff Atwood的这篇文章&#xff09;。你还会发现许多介绍如何使用代码审查工具的文档&#xff0c;比如我们…