neo4j学习笔记1

neo4j是什么

neo4j是一种graph数据库,适用于超大量数据的增删改查。其默认语言为cypher。

学习资料

中文社区
官网
w3cschool

国内下载地址

微云数聚

使用

解压,用cmd进入解压后的安装路径下。然后
windows:bin\neo4j console
linux or mac:./bin/neo4j console

浏览器访问:http://localhost:7474/

初始用户名和密码都是neo4j

终止服务:在cmd使用ctrl+C

清空数据库

找到安装目录的data\databases\数据库名\和data\transactions\数据库名
将该文件夹下所有文件删除
然后重新启动数据库服务即可

注意:如果通过这种手动方式删除,若有残留项未删除干净将会导致数据库无法连接(不可用)。

CQL

CREATE

Neo4j使用CQL“CREATE”命令

  • 创建没有属性的节点
  • 使用属性创建节点
  • 在没有属性的节点之间创建关系
  • 使用属性创建节点之间的关系
  • 为节点或关系创建单个或多个标签
CREATE (<node-name>:<label-name>)
例如
CREATE (emp:Employee)

<node-name>是节点名称,不可用于直接访问,这个名称指的是当前节点<label-name>属于的节点类别。
因此,<label-name>可以被用于直接访问一个节点。

添加多个标签到节点

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)

创建节点的完整用法:

CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)
语法元素描述
<node-name>它是我们将要创建的节点名称。
<label-name>它是一个节点标签名称
<Property1-name>...<Propertyn-name>属性是键值对。 定义将分配给创建节点的属性的名称
<Property1-value>...<Propertyn-value>属性是键值对。 定义将分配给创建节点的属性的值

创建边关系的完整用法:

CREATE (<node1-name>:<label1-name>)-
	[(<relationship-name>:<relationship-label-name>)]
	->(<node2-name>:<label2-name>)
语法元素描述
<relationship-name>边类型名称
<relationship-label-name>边标签

MATCH

Neo4j CQL MATCH命令用于:

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
MATCH 
(
   <node-name>:<label-name>
)

RETURN

Neo4j CQL RETURN子句用于

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
RETURN 
   <node-name>.<property1-name>,
   ........
   <node-name>.<propertyn-name>

WHERE

WHERE <condition> <boolean-operator> <condition>
语法元素描述
<condition>布尔运算
<boolean-operator>and,or,>,<>等等

布尔运算符:AND, OR, NOT, XOR

对数据库中特定的两个节点之间创建边关系:

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) 
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
       {<relationship-properties>}]->(<node2-label-name>) 

举例:

MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp
以及
MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r

DELETE

Neo4j使用CQL DELETE子句

  • 删除节点。
  • 删除节点及相关节点和关系。

删除节点

DELETE <node-name-list>

例如

MATCH (e: Employee) RETURN e

删除边关系

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

例如

MATCH (cc:CreditCard)-[r]-(c:Customer)RETURN r 
以及
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

REMOVE

我们使用Neo4j CQL SET子句向现有节点或关系添加新属性。

我们使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

Neo4j CQL REMOVE命令用于

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

Neo4j CQL DELETE和REMOVE命令之间的主要区别

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

Neo4j CQL DELETE和REMOVE命令之间的相似性

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

总结:DELETE用于删除实体(点和边),REMOVE用于删除属性(标签)。

使用REMOVE删除属性:

REMOVE <property-name-list>

<property-name-list>可以写成如下形式:

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

例如

MATCH (book { id:122 })
REMOVE book.price
RETURN book
或者
MATCH (dc:DebitCard) 
REMOVE dc.cvv
RETURN dc

使用REMOVE删除标签:

REMOVE <label-name-list> 

<label-name-list>可以写成如下形式:

<node-name>:<label2-name>, 
.... 
<node-name>:<labeln-name> 

例如

MATCH (m:Movie) 
REMOVE m:Picture

SET

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

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

<property-name-list>可以写成如下形式:

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

举例

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

ORDER BY(Sorting排序)

默认情况下,它按升序ASC对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。

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

<property-name-list>可以写成如下形式:

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

例如

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

UNION

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

  • UNION
  • UNION ALL

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

<MATCH Command1>
   UNION
<MATCH Command2>
以及
<MATCH Command1>
   UNION ALL
<MATCH Command2>

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

例如

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

以及

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

注意:首先查询有:cc.id,cc.number。
第二个查询有:dc.id,dc.number。
这里既有信用卡式和借记卡具有相同的属性名:身份证和号码,但他们有不同的节点名称前缀。这就是为什么UNION命令显示此错误消息。为了避免这种错误,Neo4j的CQL提供“AS”子句。像CQL,CQL Neo4j的“AS”子句用于给一些别名。

LIMIT和SKIP

  • LIMIT x用于返回前x行结果
  • SKIP x用于返回最后x行结果

例如

MATCH (emp:Employee) 
RETURN emp
LIMIT 2

以及

MATCH (emp:Employee) 
RETURN emp
SKIP 2

MERGE

Neo4j使用CQL MERGE命令

  • 创建节点,关系和属性
  • 为从数据库检索数据

MERGE命令是CREATE命令和MATCH命令的组合。

MERGE = CREATE + MATCH

MERGE用法

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

注意:Neo4j CQL MERGE命令语法与CQL CREATE命令类似。但区别在于,CREATE可以添加重复的节点,而MERGE添加节点时会自动检查该节点是否已经存在于当前数据库,若存在,则不添加,否则添加。

NULL和IN

MATCH (e:Employee) 
WHERE e.id IS NOT NULL
RETURN e.id,e.name,e.sal,e.deptno
MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值