Neo4j —— Cypher 查询语言

Posted 落落大方的发卡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neo4j —— Cypher 查询语言相关的知识,希望对你有一定的参考价值。

CQL,即Cypher查询语言,是Neo4j图形数据库的查询语言。

整理自:https://www.w3cschool.cn/neo4...

Neo4j支持

  1. boolean 包含:truefalse
  2. byte 用于表示8位整数。
  3. short 用于表示16位整数。
  4. int 用于表示32位整数。
  5. long 用于表示64位整数。
  6. float 用于表示32位浮点数。
  7. double 用于表示64位浮点数。
  8. char 用于表示16位字符。
  9. 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类下节点的deptnodname属性。

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查询的结果。

连接符:ANDORNOTXOR
比较运算符:=<>(不等于)、<><=>=
判断是否是NULLIS NULLIS 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中DELETEREMOVE命令之间的主要区别:

  • 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查询中获取所需的结果。

比如:UPPERLOWERSUBSTRINGREPLACE

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

CQL 聚合函数

常用的CQL聚合函数有:COUNTMAXMINSUMAVG。可以对属性进行聚合。

MATCH (e:Employee) 
RETURN COUNT(*)
MATCH (e:Employee) 
RETURN MAX(e.sal), MIN(e.sal)

CQL 关系函数

CQL 中关系可以独立存在,Neo4J CQL提供了一组关系函数,以在获取开始节点,结束节点等细节时知道关系的细节。

常用的关系函数有:STARTNODEENDNODEIDTYPE

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 查询语言的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j 第三篇:Cypher查询入门

Neo4j Cypher查询语言总结

知识图谱Neo4j Cypher查询语言详解

Neo4j 使用cypher语言进行查询

快速入门知识图谱 - Neo4J Cypher查询语言教程

快速入门知识图谱 - Neo4J Cypher查询语言教程