参考网站: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) # 其他函数使用方式相同
2227

被折叠的 条评论
为什么被折叠?



