Neo4j的简单使用(cypher语法)

  |   0 评论   |   0 浏览

一、新建数据库

我安装的是社区版,只能通过修改配置文件来新建数据库,而不能直接使用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