Neo4j —— Cypher 查询语言
Posted 落落大方的发卡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j —— Cypher 查询语言相关的知识,希望对你有一定的参考价值。
CQL,即Cypher查询语言,是Neo4j图形数据库的查询语言。
整理自:https://www.w3cschool.cn/neo4...
Neo4j支持
boolean
包含:true
,false
。byte
用于表示8位整数。short
用于表示16位整数。int
用于表示32位整数。long
用于表示64位整数。float
用于表示32位浮点数。double
用于表示64位浮点数。char
用于表示16位字符。String
字符串。
等数据结构。
注意:CQL命令的关键字不区分大小写。
CREATE命令
CREATE (<node-name>:<label-name>)
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
<node-name> 是我们要创建的节点名称。
<label-name> 是一个节点标签名称。一个节点可以有多个标签名称。
如果<node-name>包含除下划线以外的特殊符号(包括空格),使用\\`\\`来包含它
创建具有属性的节点
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
比如:
CREATE (dept:Dept {deptno:10, dname:"Accounting", location:"Hyderabad" })
MATCH + RETURN 语句
MATCH
命令用于从数据库获取有关节点,关系和属性的数据。
注意:我们不能单独使用MATCH Command
从数据库检索数据,必须搭配RETURN
来指明返回什么数据。
MATCH (dept: Dept)
RETURN dept.deptno, dept.dname
返回所有Dept
类下节点的deptno
和dname
属性。
MATCH (dept: Dept)
RETURN dept
返回节点。
MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2)
RETURN movie
返回关系。
关系
Neo4j中的关系被分为两种主要类型。
- 单向关系
- 双向关系
可以使用CREATE
命令来创建两个节点和节点之间的关系:
注意这里会创建新的节点,如果要对已经存在的节点建立关系,可以使用MATCH
+WHERE
+CREATE
语句。
CREATE (p1:Profile1)-[r1:LIKES{shopdate:"12/12/2014",price:55000}]->(p2:Profile2)
r1是关系名称;LIKES是一个关系标签名称,它还可以拥有属性。
WHERE子句
WHERE
子句可以用来过滤MATCH
查询的结果。
连接符:AND
、OR
、NOT
、XOR
。
比较运算符:=
、<>
(不等于)、<
、>
、<=
、>=
。
判断是否是NULL
:IS NULL
、IS NOT NULL
。
判断存在:IN [<Collection-of-values>]
,使用逗号隔开。
通过WHERE
筛选特定属性的节点:
MATCH (emp:Employee)
WHERE emp.name = \'Abc\' OR emp.name = \'Xyz\'
RETURN emp
利用MATCH
+WHERE
筛选出特定节点,再用CREATE
为这两个节点添加关系。此处应该保证.id
属性的唯一性。
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
SET子句
SET
子句用于向现有节点或关系添加新属性。
MATCH (book:Book)
WHERE book.id = 2
SET book.title = \'superstar\'
RETURN book
为某个节点添加属性。
DELETE删除
DELETE
子句用来删除节点,和节点及相关节点的关系。
MATCH
子句筛选出要删除的东西,再用DELETE
删除。
MATCH (e: Employee) DELETE e
删除节点,以及节点之间的关系
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
注意,删除节点之前,必须删除它涉及到的所有关系。
REMOVE删除
REMOVE
子句来删除节点或关系的现有属性。
CQL中DELETE
和REMOVE
命令之间的主要区别:
DELETE
操作用于删除节点和关联关系。REMOVE
操作用于删除标签和属性。
这两个命令都应该与MATCH
命令一起使用!
删除属性:
MATCH (book {id:122})
REMOVE book.price
RETURN book
删除标签:
MATCH (m:Movie)
REMOVE m:Picture
ORDER BY子句
在MATCH
命令中使用ORDER BY
子句,可以对MATCH
查询返回的结果进行排序。
例:
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
加DESC
降序排列,跟SQL
非常类似。
UNION子句
UNION
或者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
UNION
过滤重复的数据,类似地,UNION ALL
不会剔除重复的数据。
LIMIT子句
LIMIT
子句用来限制查询返回的行数。
MATCH (emp:Employee)
RETURN emp
LIMIT 2
SKIP子句
SKIP
子句用来跳过前几行,用法跟LIMIT
相同。
MATCH (emp:Employee)
RETURN emp
SKIP 2
MERGE语句
CQL MERGE
命令语法与CQL CREATE
命令类似,可以用来创建节点,关系和属性。
MERGE (<node-name>:<label-name>
{
<Property1-name>:<Pro<rty1-Value>
.....
<Propertyn-name>:<Propertyn-Value>
})
如果要创建的节点已经存在于数据库中了(即数据库中存在一个这样的节点),就不再执行创建命令。
CQL 字符串函数
与SQL一样,Neo4J CQL提供了一组字符串函数,用于在CQL查询中获取所需的结果。
比如:UPPER
、LOWER
、SUBSTRING
、REPLACE
。
MATCH (e:Employee)
RETURN e.id, UPPER(e.name), e.sal, e.deptno
CQL 聚合函数
常用的CQL聚合函数有:COUNT
、MAX
、MIN
、SUM
、AVG
。可以对属性进行聚合。
MATCH (e:Employee)
RETURN COUNT(*)
MATCH (e:Employee)
RETURN MAX(e.sal), MIN(e.sal)
CQL 关系函数
CQL 中关系可以独立存在,Neo4J CQL提供了一组关系函数,以在获取开始节点,结束节点等细节时知道关系的细节。
常用的关系函数有:STARTNODE
、ENDNODE
、ID
、TYPE
。
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN STARTNODE(movie)
返回关系的开始节点。
索引
Neo4j CQL支持节点或关系属性上的索引,以提高应用程序的性能。
创建索引的语法:
CREATE INDEX ON :<label_name> (<property_name>)
上述语法描述它在节点或关系<label_name>
的<property_name>
属性上创建一个新索引。
如果要删除索引,使用DROP INDEX
语句。
CQL 还支持创建UNIQUE约束,规定某个属性的值不能有重复。
CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
注意在创建唯一索引的时候,如果已经有数据了,那么还要保证原来数据的那个属性值的唯一的,不然索引会创建失败。
删除UNIQUE约束:
DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
以上是关于Neo4j —— Cypher 查询语言的主要内容,如果未能解决你的问题,请参考以下文章