Neo4j CQL基础语法总结

参考网站:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html
本文仅为个人学习便于使用的总结。
使用环境:Neo4j Browser

节点

CREATE

  • 创建没有属性的节点
  • 使用属性创建节点
  • 一个节点名可以对应多个标签名
# 创建没有属性的节点
# 节点名:节点标签
CREATE (<node-name>:<label-name>)
CREATE (emp:Employee)
# 使用属性创建节点
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
# Movie,Cinema,Film,Picture是m节点的多个标签名称
CREATE (m:Movie:Cinema:Film:Picture)

MATCH + RETURN

MATCH 与 RETURN需一起使用,单独使用报错。

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点
# 检索节点的某些属性
MATCH (x: Dept)
RETURN x.deptno,x.dname,x.location
# 返回结果是各相关节点对应属性值的表格形式
# 检索节点
MATCH (x: Dept)
RETURN x
# 返回默认结果是UI界面下的相关节点,当然你可以查看该节点所有属性

关于node-name(节点名称)与 label-name(节点标签名称)

  • Neo4j数据库服务器使用此将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息
  • Neo4j数据库服务器创建一个作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息

CREATE节点和关系时,node-name和relationship-name的存在感很低,几乎无作用,你也可以多次创建相同name,相同label-name的节点和关系。

MATCH节点和关系时,label-name可以看做是数据表名,比如"singer";name则可以看做是满足你获取条件的那部分数据集合名——每次取你都可以起一个不同的name,比如"female_singer",“male_singer”。

关系

CREATE + MATCH + RETURN

  • 使用现有节点创建没有属性的关系
# 栗子:从已存在的customer节点到creditcard节点创建名为DO_SHOPPING_WITH,标签为r的关系
# 顺序重要——关系标签名:关系名
MATCH (e:Customer),(cc:CreditCard) 
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc) 
# 查询关系
MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc) 
RETURN r

代码语法

MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE  
	(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
# 这里的RETURN可省略不写
语法元素意义
relationship-name这是一个关系的名称
relationship-label-name它是一个关系的标签名称

注:与CREATE节点不同,在CREATE关系时,relationship-label-name在前,relationship-name在后。

  • 使用现有节点创建有属性的关系
# 和创建有属性节点的写法相似
MATCH (cust:Customer),(cc:CreditCard) 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r
  • 使用新节点创建没有属性的关系
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) 
  • 使用新节点创建有属性的关系
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

bool运算符

  • AND
  • OR
  • NOR
  • XOR

比较运算符

  • 等于 =
  • 不等于 < >
  • 小于 <
  • 大于 >
  • 小于等于 < =
  • 大于等于 > =

创建关系时使用WHERE

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

  • 删除节点
MATCH (e: Employee) DELETE e
  • 删除节点及相关节点和关系
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

REMOVE

REMOVER与DELETE的区别:

  • DELETE操作用于删除节点和关联关系
  • REMOVE操作用于删除标签和属性
# 删除某节点的属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book
# 删除节点或关系的标签或标签列表
MATCH (m:Movie) 
REMOVE m:Picture
# Picture是m节点的另一个标签

SET

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book

Sorting排序

ORDER BY

  • 对MATCH查询返回的结果进行排序
  • 默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC

UNION

UNION会过滤掉相同的行,UNION ALL不会过滤掉相同的行。

报错情况

原因:节点名不同

MATCH (cc:CreditCard) RETURN cc.id,cc.number
UNION
MATCH (dc:DebitCard) RETURN dc.id,dc.number

AS

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

SKIP

  • 减少返回结果的条数
MATCH (emp:Employee) 
RETURN emp
SKIP 2
# 跳过查询到的前两条,只显示第三条及后面的

MERGE

MERGE 与 CREATE的区别:

  • CREATE用来创建新节点,如果数据库中已存在该节点,仍会创建
  • MERGE用来检测某节点在数据库中是否可用,如果数据库中不存在该节点,则创造该节点,否则不进行其他操作。(所以MERGE用来合并新节点)
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})

NULL

如果之前创建的某标签下的节点是有属性的,那么之后创建的该标签下的节点,若最开始没有设置属性值,则会显示为NULL。

MATCH (e:Employee) 
WHERE e.id IS NOT NULL # 也可以写成 IS NULL找到值为null的
RETURN e.id,e.name,e.sal,e.deptno

IN

MATCH (e:Employee) 
WHERE e.id IN [123,124] # 属性值在in后的范围内
RETURN e.id,e.name,e.sal,e.deptno

CQL函数

字符串函数

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

MATCH (e:Employee) 
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
# e.name只显示前两个字符

AGGREGATION聚合函数

函数名功能
COUNT它返回由MATCH命令返回的行数。
MAX它从MATCH命令返回的一组行返回最大值。
MIN它返回由MATCH命令返回的一组行的最小值。
SUM它返回由MATCH命令返回的所有行的求和值。
AVG它返回由MATCH命令返回的所有行的平均值。

关系函数

函数名功能
STARTNODE它用于知道关系的开始节点。
ENDNODE它用于知道关系的结束节点。
ID它用于知道关系的ID。
TYPE它用于知道字符串表示中的一个关系的TYPE(标签名)。
MATCH (a)-[movie:ACTION_MOVIES]->(b) 
RETURN STARTNODE(movie) # 其他函数使用方式相同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值