Loading

Neo4j - CQL


返回 我的技术栈(Technology Stack)



Neo4J提供了一个用户友好的web界面,以下是基于web端的操作。
首先是开启服务:
Win+R后cmd,注意是以管理员身份运行以下命令
neo4j.bat console
image
访问:
http://localhost:7474/
image
我们将在红框部分执行Cypher命令。

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


CREATE 创建

CREATE 表示创建。创建节点,关系和属性。

创建单个节点

CREATE (n:Person {name:'John'}) RETURN n

CREATE是创建操作,
n是一个节点名,这个节点名的作用给后面where或return使用,
Person是节点的标签名称,代表节点的类型,
{}代表节点的属性,属性类似Python的字典,
RETURN 是返回查询结果,
()代表的是一个节点。
这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是John。

创建多个节点

CREATE (:Person {name:'John'}), (:Person {name:'Lili'})

为节点创建多个标签名称

为节点创建多个标签名称:Cinema,Film,Movie,Picture。

CREATE (m:Movie:Cinema:Film:Picture)

创建标签关系

CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)

MATCH 匹配

MATCH 表示匹配。检索有关节点,关系和属性数据。MATCH 经常需要与其他的语句配合才可以使用。

查询节点

查询 Dept下的内容

MATCH (dept:Dept) return dept

查询带有属性的节点

查询Employee标签下 id=123,name="Lokesh"的节点

MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

结合where命令

查询Employee标签下name="Lokesh"的节点,使用(where命令)

MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN p

MATCH (emp:Employee)
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp

删除数据库中所有的图

MATCH (n) DETACH DELETE n
MATCH是匹配操作,而小括号()代表一个节点node(可理解为括号类似一个圆形),括号里面的 n 为标识符


DELETE 删除

DELETE 表示删除。删除节点和关系。

删除节点

使用“DELETE e”命令删除Employee节点

MATCH (e: Employee) DELETE e

MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

REMOVE 移除

REMOVE 表示移除。删除节点和关系的属性。

使用逗号(,)运算符来分隔标签名称列表。
使用dot(。)运算符来分隔节点名称和标签名称。

移除节点属性

“cvv”属性从“DebitCard”节点中删除。

MATCH (dc:DebitCard) 
REMOVE dc.cvv
RETURN dc

多标签移除

删除节点不需要的标签

MATCH (m:Movie) 
REMOVE m:Picture

ORDER BY 以…排序

ORDER BY 表示以…排序。排序检索数据。

根据某个属性排序

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

SET 设置

SET 表示设置。添加或更新标签

添加属性

MATCH (book:Book)
SET book.title = 'superstar'
RETURN book

UNION 合并

使用UNION子句从两个节点检索数据

UNION子句(过滤重复行)

它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。
要求:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

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

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 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

LIMIT和SKIP子句

LIMIT 限制行数

MATCH (emp:Employee) 
RETURN emp
LIMIT 2

因为我们定义了limit = 2。这意味着前两行。

SKIP 跳过几行

MATCH (emp:Employee) 
RETURN emp
SKIP 2

skip跳过两个节点,因此我们定义了skip = 2。这意味着最后两行。


MERGE命令

CQL MERGE命令将新的节点添加到数据库,只有当它不存在,如果存在,就不创建。

MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

NULL 处理

MATCH (e:Employee) 
RETURN e.id,e.name,e.sal,e.deptno

CREATE (e:Employee)

创建了两个Employee,但是第二个没有属性值,或者说属性值是空的

MATCH (e:Employee) 
RETURN e.id,e.name,e.sal,e.deptno)

这样直接查询就是出现NULL的存在

MATCH (e:Employee) 
WHERE e.id IS NOT NULL
RETURN e.id,e.name,e.sal,e.deptno

通过上面的命令,我们可以过滤掉含有NULL值的节点的返回。


IN操作符

MATCH (e:Employee) 
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno

此查询仅返回在IN运算符中指定的id匹配的两行。

Neo4j数据库服务器为关系分配一个默认Id属性:
节点的Id属性的最大值约为35亿。
Id的最大值关系的属性的大约35亿。


方向关系

() - [] → ()。 它表示从左侧节点到右侧节点的方向。
() - [] - (),这意味着没有方向的关系。 然后Neo4j DB服务器应该抛出一个错误消息

CREATE (:pig{name:"猪爸爸",age:12})-[:夫妻]->(:pig{name:"猪妈妈",age:10})

函数

UPPER()

它用于将所有字母更改为大写字母。

MATCH (e:Employee) 
RETURN e.id,UPPER(e.name),e.sal,e.deptno

LOWER()

它用于将所有字母改为小写字母。

MATCH (e:Employee) 
RETURN e.id,LOWER(e.name),e.sal,e.deptno

SUBSTRING()

它用于获取给定String的子字符串。

MATCH (e:Employee) 
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno

REPLACE()

它用于替换一个字符串的子字符串。

AGGREGATION聚合

MATCH (e:Employee) 
RETURN MAX(e.sal),MIN(e.sal)
从数据库中可用的所有Employee节点中查找最大和最小工资值。

MATCH (e:Employee) 
RETURN SUM(e.sal),AVG(e.sal)
从数据库中可用的所有Employee节点查找总和平均薪水值。

STARTNODE和ENDNODE

STARTNODE 用于知道关系的开始节点
ENDNODE 用于知道关系的结束节点

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN STARTNODE(movie)

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN ENDNODE(movie)

ID和TYPE

ID和TYPE关系函数来检索关系的Id和类型详细信息。

MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN ID(movie),TYPE(movie)

参考:
[1]https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html
[2]https://zhuanlan.zhihu.com/p/88745411?utm_source=wechat_session

posted @ 2021-07-30 16:58  言非  阅读(240)  评论(0编辑  收藏  举报