Neo4j的简单使用(cypher语法)
一、新建数据库
我安装的是社区版,只能通过修改配置文件来新建数据库,而不能直接使用CREATE DATABASE语句,无语。。
首先找到neo4j安装路径.../neo4j-community-4.4.19-windows/conf,在此目录下用记事本打开neo4j.conf文件,找到#dbms.default_database=neo4j,不需要删掉,直接另起一行加一句dbms.default_database=mydatabase。(此处mydatabase为自定义的新数据库名称,可自行修改)。关闭并保存该文件,重启neo4j即可。此时原来的默认数据库neo4j暂时是不可用的,再次无语。。。
二、CREATE+MATCH+RETURN语句
CQL代表Cypher查询语言,是neo4j图形数据库的查询语言,它遵循SQL语法。
1. CREATE命令
- 创建没有属性的节点
CREATE命令语法:
CREATE (
<node-name>:<label-name>
)
语法说明
例如,创建一个没有任何属性的People节点:
- 创建有属性的节点
CREATE命令语法:
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
语法说明
例如,创建一个有属性的Dept节点:
- 在没有属性的节点之间创建关系
- 使用属性创建节点之间的关系
- 为节点或关系创建单个或多个标签
2. MATCH+RETURN命令
MATCH 命令语法:(语法说明同CREATE)
MATCH (
<node-name>:<label-name>
)
注意: 我们不能单独使用 MATCH 命令从数据库检索数据。 如果我们单独使用它,那么我们将 InvalidSyntax 错误。故要跟其他语句配合才可以使用,例如RETURN。
RETURN命令语法:
RETURN
<node-name>.<property1-name>,
........
<node-name>.<propertyn-name>
注意: 我们不能单独使用 RETURN 命令从数据库检索数据。 如果我们单独使用它,那么我们将 InvalidSyntax 错误。故要跟其他语句配合才可以使用,例如MATCH和CREATE。
MATCH+RETURN匹配和返回:
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
MATCH+RETURN命令语法:
MATCH Command
RETURN Command
例如,查找dept节点的属性deptno,dname:
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname
也可以不指定属性,直接查找dept节点:
MATCH (dept: Dept)
RETURN dept
3. CREATE+MATCH+RETURN命令
- 在两个现有节点之间创建无属性的关系
基于方向性,Neo4j关系被分为两种主要类型:单向关系和双向关系。
CREATE+MATCH+RETURN命令语法:
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE
(<node1l-name>)-[<relationship-name>:<relationship-label-name>{<define-properties-list>}]->(<node2-name>)
RETURN <relationship-name>
语法说明
注意: 在此语法中,RETURN子句是可选的。 如果我们想立即看到结果,那么使用它。 否则,我们可以省略这个子句。
例如,创建一个基于两个现有节点Customer和CreditCard的无属性的关系:
MATCH (e:Customer),(cc:CreditCard)
CREATE (e)-[r:DoShoppingWith]->(cc)
- 在两个现有节点之间创建有属性的关系
CREATE+MATCH+RETURN命令语法:
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE
(<node1-name>)-[<relationship-name>:<relationship-label-name>
{<define-properties-list>}]->(<node2-name>)
RETURN <relationship-name>
语法说明
例如,创建一个基于两个现有节点Customer和CreditCard的带有属性的关系:
MATCH (e:Customer),(cc:CreditCard)
CREATE (e)-[r:DoShoppingWith{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
- 在两个新节点之间创建无属性的关系
CREATE+RETURN命令语法:
CREATE
(<node1-name>:<node1-label-name>)-
[<relationship-name>:<relationship-label-name>]->
(<node1-name>:<node1-label-name>)
RETURN <relationship-name>
例如,同时创建没有属性的两个节点和一个关系:
CREATE (fb1:FaceBookProfile1)-[like:Likes]->(fb2:FaceBookProfile2)
- 在两个新节点之间创建有属性的关系
CREATE+RETURN命令语法:
CREATE
(<node1-name>:<node1-label-name>{<define-properties-list>})-
[<relationship-name>:<relationship-label-name>{<define-properties-list>}]
->(<node1-name>:<node1-label-name>{<define-properties-list>})
RETURN <relationship-name>
例如,同时创建带有属性的两个节点和一个关系:
CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
-[movie:ACTION_MOVIES{rating:1}]->
(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})
- 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
4. 多跳查询
下面的语句用于查询姚明的社会关系及以“主席”结尾的头衔。一些上文没介绍的关键字用法在这里说明一下:
- with……match的意思是此前提及的节点(例如n,r,p)/关系要用到当前的查询里(例如n,re,w)。
- ends with "***"顾名思义就是某一个字段以***结尾(记得加双引号,否则会报错)。
match (n:person)-[r]->(p:person)
where n.name = '姚明'
with n,r,p match (n:person)-[t:title]-(ps:position)
where ps.name ends with "主席"
return n, r, p, t, ps
正在学习中做的笔记,如果有写的不对的地方,欢迎各路大神指出~~
原文链接:https://zhuanlan.zhihu.com/p/631538568
标题:Neo4j的简单使用(cypher语法)
作者:michael
地址:https://blog.junxworks.cn/articles/2024/10/25/1729827844619.html