Neo4j CQL

文章来源:拉勾教育Java高薪训练营第3期,程道老师

1、CQL简介

CQL代表Cypher查询语言。 像关系型数据库具有查询语言SQLNeo4j使用CQL作为查询语言。
 
Cypher:密码 暗号的意思
 
Neo4j CQL
 
  • 它是Neo4j图形数据库的查询语言。
  • 它是一种声明性模式匹配语言。
  • 它遵循SQL语法。
  • 它的语法是非常简单且人性化、可读的格式。
常用的Neo4j CQL命令/条款如下:
NO. CQL命令/条 作用
1
CREATE 创建
创建节点,关系和属性
2
MATCH 匹配
检索有关节点,关系和属性数据
3
RETURN 返回
返回查询结果
4
WHERE 条件
提供条件过滤检索MATCH数据
5
DELETE 删除
删除节点和关系
6
REMOVE 移除
删除节点和关系的属性
7
SET 设置
添加或更新标签
8
ORDER BY 排序
对结果排序
9
SKIP LIMIT 分页
分页
10
DISTINCT 排重
排重

完成上面的语法 我们基于庆余年电视剧人物关系图片:

Neo4j CQL

 

2、CREATE

CREATE (
<node-name>:<label-name>
[{
<property1-name>:<property1-Value>
........
<propertyn-name>:<propertyn-Value>
}]
)
语法说明:
语法元素 描述
< node-name>
它是我们将要创建的节点名称。
< label-name>
它是一个节点标签名称
< property1-name>...< propertyn
name>
属性是键值对。 定义将分配给创建节点的属性的名
< property1-value>...< propertyn
value>
属性是键值对。 定义将分配给创建节点的属性的值

 

举例:

CREATE (person:Person)
 
CREATE (person:Person {cid:1,name:"
",age:24,gender:0,character:"A",money:1000});
 
CREATE (person:Person {cid:2,name:"林婉
",age:20,gender:1,character:"B",money:800});
 
CREATE (person:Person {cid:3,name:"
",age:49,gender:0,character:"A",money:8900});
 

3、MATCH RETURN 命令语法

MATCH
(
<node-name>:<label-name>
)
RETURN
<node-name>.<property1-name>,
...
<node-name>.<propertyn-name>
 
语法元素 描述
< node-name>
它是我们将要创建的节点名称。
< label-name>
它是一个节点标签名称
< property1-name>...< propertyn
name>
属性是键值对。 定义将分配给创建节点的属性的名

举例

MATCH (person:Person) return person
MATCH (person:Person) return person.name,person.age
 

4、关系创建

  • 使用现有节点创建没有属性的关系
 
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE
(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-
name>)
RETURN 相应的内容
 

语法说明

NO. 语法元素 描述
1
MATCH,CREATE,RETURN
他们是Neo4J CQL关键字。
2
< noode1-name>
它用于创建关系的“From Node”的名称。
3
< node1-label-name>
它用于创建关系的“From Node”的标签名称。
4
< node2-name>
它用于创建关系的“To Node”的名称。
5
< node2-label-name>
它用于创建关系的“To Node”的标签名称。
6
< relationship-name>
这是一个关系的名称。
7
< relationship-label-name>
它是一个关系的标签名称。
创建关系
 
match(person:Person {name:"范闲"}) ,(person2:Person {name:"林婉儿"})
create(person)-[r:Couple]->(person2);
 
查询关系
 
match p = (person:Person {name:"范闲"})-[r:Couple]->(person2:Person) return p
match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return p1,p2
match (p1:Person {name:"范闲"})-[r:Couple]-(p2:Person) return r
 
  • 使用现有节点创建有属性的关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
 (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
 {<define-properties-list>}]->(<node2-label-name>)
 RETURN <relationship-label-name>
其中<define-properties-list> 是分配给新创建关系的属性(名称 - 值对)的列表。
{
<property1-name>:<property1-value>,
<property2-name>:<property2-value>,
...
<propertyn-name>:<propertyn-value>
}
 
示例
match(person:Person {name:"范闲"}),(person2:Person {name:"林婉儿"})
create(person)-[r:Couple{mary_date:"12/12/2014",price:55000}]->(person2)
return r;
 
  • 使用新节点创建没有属性的关系 ​​​​​​​
CREATE
(<node1-label-name>:<node1-name>)
-[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
 
示例
 
create(person1:Person {cid:4,name:"长公
",age:49,gender:1,character:"A",money:5000})
-[r:Friend]->
(person2:Person {cid:7,name:"九品射手燕小
",age:48,gender:0,character:"B",money:1000})
 
  • 使用新节点创建有属性的关系 ​​​​​​​
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})
-[<relationship-label-name>:<relationship-name>{<define-properties-list>}] ->
(<node1-label-name>:<node1-name>{<define-properties-list>})
 
示例
create (person1:Person {cid:9,name:"靖王世
",age:23,gender:0,character:"A",money:3000})
-[r:Friend {date:"11-02-2000"}]->
(person2:Person {cid:8,name:"二皇子",age:24,gender:0,character:"B",money:6000})
 
关系和节点的属性可以使用的类型(与Java的8中基本类型+字符串对应)
 
Index CQL数据类型 作用
1 boolean
它用于表示布尔文字:true, false
2
byte
它用来表示8位整数。
3
short
它用于表示16位整数。
4 int
它用于表示32位整数。
5 long
它用于表示64位整数。
6 float
浮点数用于表示32位浮点数。
7 double
Double用于表示64位浮点数。
8 char
Cahr于表示16位字符。
9 String
字符串用于表示字符串。

5、CREAET创建多个标签

CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
:
CREATE (person:Person:Beauty:Picture {cid:20,name:"大美女"})
 

6、WHERE字句

简单的WHERE子句
WHERE <condition>
复杂的WHERE子句
WHERE <condition> <boolean-operator> <condition>
 
where 中的比较运算符 和 mysql的相同 如 = != <> > <
 
NO. 布尔运算符 描述
1 AND  与
2 OR
3 NOT
示例
 
MATCH (person:Person)
WHERE person.name = '范闲' OR person.name = '靖王世子'
RETURN person
 

7、DELETE字句和REMOVE字句

DELETE子句

  • 删除节点
  • 删除节点及相关节点和关系

示例

match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person) delete r    # 删除所有人和林婉儿的夫妻关系
 
REMOVE子句
 
  • 删除节点或关系的标签
  • 删除节点或关系的属性
示例
 
MATCH (person:Person {name:"大美女"})
REMOVE person.cid
 

8、SET子句

  • 向现有节点或关系添加新属性
  • 更新属性值

​​​​​​​示例

MATCH (person:Person {cid:1})
SET person.money = 3456,person.age=25

9、ORDER BY 子句

“ORDER BY”子句,对MATCH查询返回的结果进行排序。
我们可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。
 
示例:
 
MATCH (person:Person)
RETURN person.name,person.money
ORDER BY person.money DESC
 

10、SKIP和LIMIT

Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
 
Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。
 
示例:
 
MATCH (person:Person)
RETURN ID(person),person.name,person.money
ORDER BY person.money DESC skip 4 limit 2
 

11、DISTINCT排重

这个函数的用法对应SQL中的distinct关键字,返回的是所有不同值。
 
示例:
 
MATCH (p:Person) RETURN Distinct(p.age)