Neo4j CQL

1. CQL简介

CQL代表 Cypher 查询语言。 像关系型数据库具有查询语言 SQLNeo4j使用 CQL 作为查询语言。

Neo4j CQL

  • 它是 Neo4j 图形数据库的查询语言。
  • 它是一种声明性模式匹配语言。
  • 它遵循 SQL 语法。
  • 它的语法是非常简单且人性化、可读的格式。

常用的 Neo4j CQL 命令/条款如下:

序号CQL命令/条作用
1CREATE 创建创建节点,关系和属性
2MATCH 匹配检索有关节点,关系和属性数据
3RETURN 返回返回查询结果
4WHERE 条件提供条件过滤检索MATCH数据
5DELETE 删除删除节点和关系
6REMOVE 移除删除节点和关系的属性
7SET 设置添加或更新标签
8ORDER BY 排序对结果排序
9SKIP LIMIT 分页分页
10DISTINCT 排重排重

基于庆余年电视剧人物关系图片,完成上面的语法:

2. CREATE

CREATE ( 
	<node-name>:<label-name>
	 [{ 
	 	<property1-name>:<property1-Value>
	  	........ 
	  	<propertyn-name>:<propertyn-Value> 
	  }]
)

注: [ ] 中的内容为可选

语法说明:

语法元素描述
< node-name>它是我们将要创建的节点名称。
< label-name>它是一个节点标签名称。
< property1-name>…< propertynname>属性是键值对。 定义将分配给创建节点的属性的名称
< property1-value>…< propertynvalue>属性是键值对。 定义将分配给创建节点的属性的值

举例:

CREATE (person:Person)
CREATE (person:Person {cid:1,name:"范 闲",age:24,gender:0,character:"A",money:1000}); 
CREATE (person:Person {cid:2,name:"林婉 儿",age:20,gender:1,character:"B",money:800}); 
CREATE (person:Person {cid:3,name:"庆 帝",age:49,gender:0,character:"A",money:8900});

3. MATCH RETURN 命令语法

MATCH 
( 
	<node-name>:<label-name> 
)
RETURN
	<node-name>.<property1-name>,
	 ... 
	 <node-name>.<propertyn-name>
语法元素描述
< node-name>它是我们将要创建的节点名称。
< label-name>它是一个节点标签名称。
< property1-name>…< propertynname>属性是键值对。 定义将分配给创建节点的属性的名称

举例:

MATCH (person:Person) return person
MATCH (person:Person) return ID(person),person.name,person.age

4. 关系创建

4.1 使用现有节点创建没有属性的关系

MATCH 
	(<node1-name>:<node1-label-name>),
	(<node2-name>:<node2-label-name>)
CREATE
(
	<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2- name>
)
RETURN 相应的内容

语法说明:

序号语法元素描述
1MATCH,CREATE,RETURN他们是Neo4J CQL关键字。
2< noode1-name>它用于创建关系的“From Node”的名称。
3< node1-label-name>它用于创建关系的“From Node”的标签名称。
4< node2-name>它用于创建关系的“To Node”的名称。
5< node2-label-name>它用于创建关系的“To Node”的标签名称。
6< relationship-name>这是一个关系的名称。
7< relationship-label-name>它是一个关系的标签名称。
创建关系
match(person1:person{name:"范闲"}),(person2:person{name:"林婉儿"}) create (person1) - [r:Couple] -> (person2)

查询关系
match p=(person1:person{name:"范闲"}) - [r:Couple] -> (person2:person) return p
match(p1:person{name:"范闲"}) - [r:Couple] -> (p2:person) return p1,p2
match(p1:person{name:"范闲"}) - [r:Couple] -> (p2:person) return r

4.2 使用现有节点创建有属性的关系

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>
}
match(person1:person{name:"范闲"}),(person2:person{name:"林婉儿"}) 
create (person1) - [r:Couple{mary_date:"12/12/2020",money:55000}] -> (person2) 
return r

4.3 使用新节点创建没有属性的关系

CREATE 
	(<node1-label-name>:<node1-name>) 
	-[<relationship-label-name>:<relationship-name>]
	-> (<node1-label-name>:<node1-name>)
create 
	(person1:person{cid:4,name:"长公主",age:49,gender:1,character:"A",money:5000}) 
	- [r:Friend] 
	-> (person2:person{cid:5,name:"九品射手燕小乙",age:48,gender:0,character:"B",money:1000})

4.4 使用新节点创建有属性的关系

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>})
create 
	(p1:person{cid:6,name:"靖王世子",age:23,gender:0,character:"A",money:3000}) 
	- [r:Friend{date:"2021-07-09"}] 
	-> (p2:person{cid:7,name:"二皇子",age:24,gender:0,character:"B",money:6000})

4.5 关系和节点的属性可以使用的类型

序号CQL数据类型作用
1boolean它用于表示布尔文字:true, false。
2byte它用来表示8位整数。
3short它用于表示16位整数。
4int它用于表示32位整数。
5long它用于表示64位整数。
6float浮点数用于表示32位浮点数。
7doubleDouble用于表示64位浮点数。
8charChar用于表示16位字符。
9String字符串用于表示字符串。

5. CREATE 创建多个标签

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

如:

create(person:person:beauty:picture{cid:8,name:"小美女"})

6. WHERE 子句

简单的 WHERE 子句 
	WHERE <condition>

复杂的 WHERE 子句
	WHERE <condition> <boolean-operator> <condition>

where 中的比较运算符和 mysql 的相同,如 = != <> > <

序号布尔运算符描述
1AND
2OR
3NOT
match(person:person) where person.name = "范闲" OR person.money > 1000 return person

7. DELETE 子句和 REMOVE 子句

7.1 DELETE 子句

  • 删除节点
  • 删除节点及相关节点和关系
删除所有节点和关系
match(n) optional match(n) - [r] - () delete n,r

删除指定关系
match p=(:person{name:"范闲"}) - [r:Couple] -> (:person) delete r

7.2 REMOVE 子句

  • 删除节点或关系的标签
  • 删除节点或关系的属性
match(p:person{name:"小美女"}) remove p:beauty
match(p:person{name:"小美女"}) remove p.cid

8. SET 子句

  • 向现有节点或关系添加新属性
  • 更新属性值
match(p:person{name:"小美女"}) set p.cid=10

9. ORDER BY 子句

“ORDER BY” 子句,对 MATCH 查询返回的结果进行排序。
我们可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用 DESC 子句。

match(p:person) return p.cid,p.name,p.money order by p.cid desc

10. SKIP 和 LIMIT

Neo4j CQL已提供 “SKIP” 子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
Neo4j CQL已提供 “LIMIT” 子句来过滤或限制查询返回的行数。 它修剪 CQL 查询结果集底部的结果。

match(p:person) return ID(p),p.name,p.money order by p.money desc skip 4 limit 2

11. DISTINCT 排重

这个函数的用法就像 SQL中的 distinct 关键字,返回的是所有不同值。

match (p:person) return distinct(p.gender)

多字段去重
match (p:person) return distinct(p.gender),p.character

Neo4j入门和基本操作教程地址:https://mall.csdn.net/item/85530

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值