CQL 简介
CQL(Cypher Query Language),作为 Neo4j 的查询语言。
CQL 常用关键字
CQL 的常用关键字如下:
CQL 关键字 | 用法 |
---|---|
CREATE | 创建节点,关系和属性 |
MATCH | 检索有关节点,关系和属性数据 |
RETURN | 返回查询结果 |
WHERE | 提供条件过滤检索数据 |
DELETE | 删除节点和关系 |
REMOVE | 删除节点和关系的属性 |
ORDER BY | 排序检索数据 |
SET | 添加或更新标签 |
IN | 过滤在集合中的值 |
IS NULL / IS NOT NULL | 过滤属性不为 NULL 或者为 NULL 的数据 |
MATCH 相当于 SQL 中的 FROM 关键字;
RETURN 相当于 SQL 中的 SELECT 关键字。
CQL 数据类型
Neo4j CQL 支持以下数据类型,这些数据类型与 Java 类似,用于定义节点或者关系的属性:
CQL 数据类型 | 用法 |
---|---|
boolean | 布尔:true,false |
byte | 8 位整数 |
short | 16 位整数 |
int | 32 位整数 |
long | 64 位整数 |
float | 32 位浮点数 |
double | 64 位浮点数 |
char | 16 位字符 |
String | 字符串 |
Cypher 语法详解
创建
在 Cypher 中,可以创建节点、创建关系、创建标签。主要用到的关键字是 CREATE 关键字。
创建节点
使用 CREATE 关键字创建节点,在创建节点的同时可以指定其属性。
1 | CREATE ( |
这里的 node-name 只是一个临时变量,相当于一个变量名字,在实际存储中并不存在也不会查询到 node-name。
创建关系
使用 CREATE 关键字创建关系,在创建关系的同时可以指定其属性。
1 | CREATE |
如:
1 | MATCH (cust:Customer),(cc:CreditCard) |
创建标签
可以为节点创建多个标签:
1 | CREATE ( |
MERGE 关键字
MERGE 关键字在图中搜索给定模式:
- 如果存在,不会创建新的节点/关系。
- 如果不存在,则会创建新的节点/关系。
也就是说,MERGE 只有数据在 neo4j 中不存在时,才会将这个新数据添加到数据库中。
1 | MERGE (gp:GoogleProfile{ Id: 201402,Name:"Nokia" }) |
查询
查询数据中,主要用到的关键字是 RETURN(RETURN 相当于 SQL 中的 SELECT 关键字)。比如:
1 | MATCH (emp:Employee) |
ORDER BY 排序
可以用 ORDER BY 进行排序(默认升序,DESC 指定为降序)。
1 | MATCH (emp:Employee) |
UNION 联合查询
UNION 将两组查询结果合并在一起,不返回两个结果集中重复的行。要求:
- 列名相同,可以使用 AS 关键字起别名。
- 数据类型相同。
1 | MATCH (cc:CreditCard) |
UNION ALL 关键字,返回两个结果集的全部行(包括重复行)。
LIMIT、SKIP 分页
使用 LIMIT 关键字来限制最大行数,使用 SKIP 关键字跳过头部的结果。
1 | MATCH (emp:Employee) |
删除
删除节点和关系
删除节点和关系主要用 DELETE 关键字:
1 | MATCH (cc: CreditCard)-[rel]-(c:Customer) |
删除属性和标签
删除属性和标签主要用 REMOVE 关键字。
- 删除属性:
1 | MATCH (book { id:122 }) |
- 删除标签:
1 | MATCH (m:Movie) |
更新
SET 关键字用于新增或者更新属性:
1 | MATCH (book:Book) |