图数据库——Neo4j

目录

不积跬步,无以至千里;不积小流,无以成江海。要沉下心来,诗和远方的路费真的很贵!

学习网站:W3Cschool Neo4j 教程

图数据库——Neo4j

Neo4j的下载

  1. 先在 cmd界面中输入 java -version命令判断是否存在 Java JDK,不存在则先下载。
  2. 官网中下载Neo4j压缩包。(https://neo4j.com/download-center/)

图数据库——Neo4j
注:我下载的是3.5.30版本,Windows 系统下的。
  1. 将下载的压缩包解压 ,得到一个文件夹

图数据库——Neo4j
  1. 配置系统环境变量

图数据库——Neo4j
然后在 Path中加入 %NEO4J_HOME%\bin
  1. 启动Neo4j

  2. bin目录进入 cmd界面

图数据库——Neo4j
  • 输入 neo4j.bat console命令,出现下述语句,成功。

图数据库——Neo4j
  • 在浏览器中输入 http://localhost:7474/browser/网址,进入界面。

图数据库——Neo4j
注:第一次进入需要用户名和密码,初始的都是neo4j,进入后需要改密码。

; Neo4j CQL

CQL代表 Cypher查询语言。 像 Oracle数据库具有查询语言 SQLNeo4j具有 CQL作为查询语言。

  • 它是 Neo4j图形数据库的查询语言。
  • 它是一种声明性模式匹配语言
  • 它遵循 SQL语法。
  • 它的语法是非常简单且人性化、可读的格式。
  • Neo4j CQL 以命令来执行数据库操作。
  • Neo4j CQL 支持多个子句像在哪里,顺序等,以非常简单的方式编写非常复杂的查询。
  • NNeo4j CQL 支持一些功能,如字符串, Aggregation.In 加入他们,它还支持一些关系功能。

Neo4j CQL数据类型

这些数据类型与 Java语言类似。 它们用于定义节点或关系的属性。

Neo4j CQL支持以下数据类型:

S.NoCQL数据类型用法1boolean用于表示布尔文字:true,false2byte用于表示8位整数3short用于表示16位整数4int用于表示32位整数5long用于表示64位整数6float用于表示32位浮点数7double用于表示64位浮点数8char用于表示16位字符9String用于表示字符串

Neo4j CQL命令

结尾的 ;可有可无。

CREATE命令

  1. 创建没有属性的节点
  2. 使用属性创建节点
  3. 在没有属性的节点之间创建关系
  4. 使用属性创建节点之间的关系
  5. 为节点或关系创建单个或多个标签

  6. 创建没有属性的节点(复制粘贴把<>和里面的内容删除才是正确的)

create (emp:Employee) return emp
create (dept:Dept) return dept
  • 创建具有属性的节点
CREATE (
   :
   {
      :
      ........

      :
   }
)
CREATE (dept:Dept
{
deptno:10,
dname:"Accounting",
location:"Hyderabad"
})
return dept
CREATE (emp:Employee
{
id:123,
name:"Lokesh",
sal:35000,
deptno:10
})
return emp

MATCH命令

  1. 从数据库获取有关节点和属性的数据
  2. 从数据库获取有关节点,关系和属性的数据

  3. 检索没有属性的节点

MATCH
(
   :
)
MATCH (dept:Dept)

MATCH (dept:Dept) 使用后报错了,Match命令,必须有返回,需要和return命令一起使用,不可单独使用。

MATCH (dept:Dept) return dept

没有报错,出现两个节点,正确!

  • 查找全部节点
match (n) return n
  • 检索有属性的节点
match (emp:Employee
{
id:123,
name:"Lokesh"
}) return emp
MATCH (emp:Employee)
WHERE emp.name = "Lokesh"
RETURN emp
match (dept:Dept
{
location:"Hyderabad"
}) return dept;

RETURN命令

  1. 检索节点的某些属性
  2. 检索节点的所有属性
  3. 检索节点和关联关系的某些属性
  4. 检索节点和关联关系的所有属性

  5. 检索节点属性

RETURN
   .,
   ........

   .
RETURN dept.deptno

报错了!说明return命令不能单独使用,要和match或者create命令一起使用。

match (dept:Dept) return dept.deptno

两个数据,一个null,一个10,正确!

MATCH & RETURN命令

  • 查看节点属性
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname,dept.location
  • 查看节点
MATCH (dept: Dept)
RETURN dept

CREATE & MATCH & RETURN命令

以客户节点和信用卡节点为例进行学习。

  • 创建客户节点
CREATE (c:Customer{id:"1001",name:"KG",dob:"2000/02/05"}) return c;
  • 创建信用卡节点
CREATE (cd:Card
{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"}
       ) return cd
  • 查看信用卡节点和客户节点的详细信息
MATCH (c:Customer)
RETURN c.id,c.name,c.dob
MATCH (cd:Card)
RETURN cd.id,cd.number,cd.cvv,cd.expiredate

关系基础

根据属性图模型,关系应该是 &#x5B9A;&#x5411;的。 否则, Neo4j将抛出一个错误消息。

Neo4j 关系的类型:

  • 单向关系
  • 双向关系

创建关系场景:

  • 在两个现有节点之间创建无属性的关系
  • 在两个现有节点之间创建有属性的关系
  • 在两个新节点之间创建无属性的关系
  • 在两个新节点之间创建有属性的关系
  • 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系

创建关系

创建客户节点和信用卡节点之间的关系

  • 在两个现有节点之间创建无属性的关系
//创建关系语句格式
MATCH (:),(:)
CREATE
    ()-
    [:
     {}]
     ->()
RETURN
//创建客户节点和信用卡节点之间无属性的关系
match (c:Customer),(cd:Card)
create (c) - [r:DO_SHOPPING_WITH] -> (cd)
return r
  • 在两个现有节点之间创建有属性的关系
//创建客户节点和信用卡节点之间有属性的关系
MATCH (c:Customer),(cd:Card)
CREATE (c)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cd)
RETURN r
//创建信用卡节点和客户节点之间有属性的关系
MATCH (cd:Card),(c:Customer)
CREATE (cd)-[r:ASSOCIATED_WITH{sale:50000}]->(c)
RETURN r
  • 查看关系的详细信息
MATCH (c)-[r:DO_SHOPPING_WITH ]->(cd)
RETURN r //查看客户节点到信用卡节点之间的关系
  • 查看关系的节点的详细信息
//查看这个关系的两边节点的详细信息
MATCH (c)-[r:DO_SHOPPING_WITH]->(cd)
RETURN c,cd

创建标签

标签,简单理解,就是类型。就好比 Java中的自定义类,标签名,就是类型名。

  • 为节点创建单个标签
CREATE (:)
CREATE (g:GooglePlusProfile) return g
  • 为节点创建多个标签
CREATE (::.....:)
CREATE (m:Movie:Cinema:Film:Picture) return m
  • 为关系创建单个标签
CREATE (:)-
    [:]
    ->(:)
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2) return p1,p2,r1

WHERE子句

作用: &#x63D0;&#x4F9B;match&#x67E5;&#x8BE2;&#x7684;&#x6761;&#x4EF6;&#xFF0C;&#x8FC7;&#x6EE4;&#x67E5;&#x8BE2;&#x7ED3;&#x679C;

  • 简单 WHERE语法
WHERE
  • 复杂 WHERE语法
WHERE
  • 条件语法

以员工数据为例进行学习

  • 检索所有员工信息
match (emp:Employee) return emp.empid,emp.name,emp.salary,emp.deptno;
  • 根据员工姓名进行检索
MATCH (emp:Employee)
WHERE emp.name = 'KK' OR emp.name = 'JK'
RETURN emp

使用WHERE子句创建关系

Neo4j中可以用不同的方式创建关系:

  1. 创建两个现有节点之间的关系
  2. 一次创建两个节点和它们之间的关系
  3. 使用WHERE子句创建两个现有节点之间的关系(当小节重点)

  4. 语法

MATCH (:),(:)  //查找到这两个节点
WHERE   //查找过滤条件
CREATE ()-
[:
       {}]  //创建两个节点间的关系
       ->()
  • 利用 WHERE子句创建客户节点和信用卡节点之间的关系
MATCH (c:Customer),(cd:Card)  //找到两个节点
WHERE c.id = "1001" AND cd.id= "5001"  //具体的两个
CREATE (c)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cd)  //创建有属性的关系
RETURN r  //返回

DELETE命令

  1. 删除节点
  2. 删除节点及相关节点和关系

  3. 语法

DELETE
  • 删除节点
MATCH (emp: Employee) where emp.name = "KK" delete emp
  • 删除节点和关系
DELETE ,,
MATCH (c:Customer)-[r]->(cd:Card)
DELETE cd,c,r

注:关系中的第二个 -符号,是不是箭头都行,可以是 -,也可以是 ->

REMOVE命令

  1. 删除节点或关系的标签
  2. 删除节点或关系的属性

  3. 语法

REMOVE
  • 属性名语法
.,
.,
....

.

以书本节点的属性为例子,进行学习

  • 创建一本书
CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250})
RETURN book
  • 删除价格属性
MATCH (book { id:122 }) //找到书
REMOVE book.price  //去掉价格
RETURN book //返回
  • 删除标签
REMOVE
:,
....

:
MATCH (m:Movie)
REMOVE m:Picture
return m

REMOVE和DELETE命令的区别

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

SET子句

  1. 向现有节点或关系添加新属性
  2. 添加或更新属性值

  3. 语法

SET
.,
.,
....

.

以书本节点为例进行学习

  • 修改书本标题
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
  • 添加书本价格
MATCH (book:Book)
SET book.price = '25'
RETURN book

ORDER BY排序

作用: &#x5BF9;&#x8FD4;&#x56DE;&#x7ED3;&#x679C;&#x8FDB;&#x884C;&#x6392;&#x5E8F;

  • 语法
ORDER BY    [DESC]
  • 属性名语法
.,
.,
....

.
  • 将员工按名字升序排列
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子句

UNION

作用:它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。 &#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;&#x5C31;&#x662F;&#x5C06;&#x4E24;&#x4E2A;&#x7ED3;&#x679C;&#x7684;&#x6240;&#x6709;&#x5185;&#x5BB9;&#x5408;&#x5E76;&#x8F93;&#x51FA;&#xFF0C;&#x82E5;&#x662F;&#x6709;&#x91CD;&#x590D;&#xFF0C;&#x8F93;&#x51FA;&#x4E00;&#x4E2A;&#x3002;

限制:结果列类型和来自两组结果的名称必须匹配,这意味着 &#x5217;&#x540D;&#x79F0;&#x5E94;&#x8BE5;&#x76F8;&#x540C;&#xFF0C;&#x5217;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x5E94;&#x8BE5;&#x76F8;&#x540C;

  • 语法

   UNION

  • 返回雇员节点和雇主节点的 empidname
MATCH (emp:Employee) RETURN emp.empid,emp.name
UNION
MATCH (e:Employer) RETURN e.empid,e.name

注: 这个会报错,因为合并的两个节点要有相同的列名。这里的属性名相同,但是前缀不同,因此会报错。所以需要采用 AS 子句加一些别名。

MATCH (emp:Employee) RETURN emp.empid as empid,emp.name as name
UNION
MATCH (e:Employer) RETURN e.empid as empid,e.name as name

UNION ALL

作用:它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。 &#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;&#x5C31;&#x662F;&#x5C06;&#x4E24;&#x4E2A;&#x7ED3;&#x679C;&#x7684;&#x6240;&#x6709;&#x5185;&#x5BB9;&#x5408;&#x5E76;&#x8F93;&#x51FA;&#xFF0C;&#x65E0;&#x8BBA;&#x662F;&#x5426;&#x91CD;&#x590D;&#xFF0C;&#x5168;&#x90E8;&#x8F93;&#x51FA;

限制:和 NUION的使用限制一样。

  • 语法

UNION ALL

  • 返回雇员节点和雇主节点的 empidname
MATCH (emp:Employee) RETURN emp.empid as empid,emp.name as name
UNION ALL
MATCH (e:Employer) RETURN e.empid as empid,e.name as name

LIMIT和SKIP子句

LIMIT子句

作用:过滤或限制查询返回的行数,它修剪CQL查询结果集 &#x5E95;&#x90E8;的结果。

  • 语法
LIMIT
  • 返回n条记录(n为可变数)
MATCH (emp:Employee)
RETURN emp
LIMIT n

注: 若n小于数据总条数,则返回前面的n条数据。

SKIP子句

作用:过滤或限制查询返回的行数,它修整了CQL查询结果集 &#x9876;&#x90E8;的结果。

  • 语法
SKIP
  • 跳过n条记录,返回后面的所有记录(n为可变数)
MATCH (emp:Employee)
RETURN emp
SKIP n

注: n只有小于数据总条数时,才会返回数据

MERGE命令

  1. 创建节点,关系和属性
  2. 从数据库检索数据
MERGE = CREATE + MATCH

注: MERGE命令是CREATE命令和MATCH命令的组合。采用它进行检索时,如果有存在结果,直接返回;如果没有结果,则它创建新的节点或关系并返回结果。

  • 语法
MERGE (:
{
   :
   .....

   :
})

MERGE命令和CREATE命令的区别

  1. CREATE命令只向数据库中新增节点,无论这个节点是否存在。
  2. MERGE命令从数据库中检索这个节点,如果存在,则不新建这个节点;如果不存在,再创建这个节点,并将其返回。

NULL值

NULL值:节点或关系的属性的缺失值或未定义值。

当我们创建一个具有现有节点标签名称但未指定其属性值的节点时,它将创建一个具有NULL属性值的新节点。

  • 创建一个属性值为 NULL的雇主节点
create (e:Employer)  return e
  • 检索所有雇主节点
MATCH (e:Employer)
RETURN e.empid,e.name

发现存在一个所有属性值都为 NULL 的节点。

  • 检索 name不为空的雇主节点
MATCH (e:Employer)
WHERE e.name is not null
RETURN e.empid,e.name
  • 检索 name为空的雇主节点
MATCH (e:Employer)
WHERE e.name is null
RETURN e.empid,e.name

IN操作符

作用:为 CQL命令提供值的集合。

  • 语法
IN[]
  • 查找 empid13的雇员节点
MATCH (emp:Employee)
where emp.empid in ["1","3"]
RETURN emp.empid,emp.name,emp.salary,emp.deptno

Neo4j CQL函数

字符串函数

S.No.功能描述1UPPER它用于将所有字母更改为大写字母。2LOWER它用于将所有字母改为小写字母。3SUBSTRING它用于获取给定String的子字符串。4REPLACE它用于替换一个字符串的子字符串。

UPPER

  • 语法
UPPER ()
  • 将雇员节点的姓名输出大写表示
MATCH (e:Employee)
RETURN e.empid,UPPER(e.name),e.salary,e.deptno

LOWER

  • 语法
LOWER ()
  • 将雇员节点的姓名输出小写表示
MATCH (e:Employee)
RETURN e.empid,LOWER(e.name),e.salary,e.deptno

SUBSTRING

  • 语法
SUBSTRING(, ,)
  • 返回雇员节点的名字,从第 i个开始,长度为 n
MATCH (e:Employee)
RETURN e.empid,SUBSTRING(e.name,i,n),e.salary,e.deptno

REPLACE

  • 语法
REPALCE(,,)
  • 将名字为 OPEN的雇员节点的名字修改为 LJK
match (e:Employee)
return e.empid,REPLACE(e.name,"OPEN","LJK"),e.salary,e.deptno

AGGREGATION聚合

S.No.聚集功能描述1COUNT它返回由MATCH命令返回的行数。2MAX它从MATCH命令返回的一组行返回最大值。3MIN它返回由MATCH命令返回的一组行的最小值。4SUM它返回由MATCH命令返回的所有行的求和值。5AVG它返回由MATCH命令返回的所有行的平均值。

COUNT

  • 语法
COUNT()
  • 返回雇员节点数目
MATCH (e:Employee) RETURN COUNT(*)

MAX & MIN

  • 语法
MAX( )

MIN( )
  • 返回雇员中最大工资和最小工资
MATCH (e:Employee)
RETURN MAX(e.salary),MIN(e.salary)

SUM & AVG

  • 语法
AVG( )

SUM( )
  • 返回雇员的平均工资和所有工资总和
MATCH (e:Employee)
RETURN SUM(e.salary),AVG(e.salary)

关系函数

S.No.功能描述1STARTNODE它用于知道关系的开始节点。2ENDNODE它用于知道关系的结束节点。3ID它用于知道关系的ID。4TYPE它用于知道字符串表示中的一个关系的TYPE。

STARTNODE & ENDNODE

  • 语法
STARTNODE ()
ENDNODE ()
  • 找到客户节点和信用卡节点之间关系的开始节点
MATCH (c) - [r:DO_SHOPPING_WITH] -> (cd)
RETURN STARTNODE(r)
  • 找到客户节点和信用卡节点之间关系的结束节点
MATCH (c) - [r:DO_SHOPPING_WITH] -> (cd)
RETURN ENDNODE(r)

ID & TYPE

  • 语法
ID ()
TYPE ()
  • 返回客户节点和信用卡节点之间关系的 IDTYPE
match (c) - [r:DO_SHOPPING_WITH] - (cd)
return ID(r),TYPE(r)

总结

  1. 图数据库对于具有关联的数据查询具有优势。
  2. 图数据库比关系型数据库更适合知识图谱的搭建。
  3. 学完以上知识,可以基本使用 Neo4j图数据库了。

Original: https://blog.csdn.net/qq_46546793/article/details/121908271
Author: 小叮当不懒
Title: 图数据库——Neo4j

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/557773/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球