Dawn's Blogs

分享技术 记录成长

0%

neo4j学习笔记 (2) CQL

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
2
3
4
5
6
7
8
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>,
// ........
<Propertyn-name>:Propertyn-Value>
}
)

这里的 node-name 只是一个临时变量,相当于一个变量名字,在实际存储中并不存在也不会查询到 node-name。

创建关系

使用 CREATE 关键字创建关系,在创建关系的同时可以指定其属性。

1
2
3
4
5
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>})
RETURN <relationship-label-name>

如:

1
2
3
4
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

创建标签

可以为节点创建多个标签:

1
2
3
CREATE (
<node-name>:<label-name1>:<label-name2>.....:<label-namen>
)

MERGE 关键字

MERGE 关键字在图中搜索给定模式:

  • 如果存在,不会创建新的节点/关系。
  • 如果不存在,则会创建新的节点/关系。

也就是说,MERGE 只有数据在 neo4j 中不存在时,才会将这个新数据添加到数据库中。

1
MERGE (gp:GoogleProfile{ Id: 201402,Name:"Nokia" })

查询

查询数据中,主要用到的关键字是 RETURN(RETURN 相当于 SQL 中的 SELECT 关键字)。比如:

1
2
3
MATCH (emp:Employee) 
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp

ORDER BY 排序

可以用 ORDER BY 进行排序(默认升序,DESC 指定为降序)。

1
2
3
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.salary,emp.name DESC

UNION 联合查询

UNION 将两组查询结果合并在一起,不返回两个结果集中重复的行。要求:

  • 列名相同,可以使用 AS 关键字起别名。
  • 数据类型相同。
1
2
3
4
5
6
7
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 关键字,返回两个结果集的全部行(包括重复行)。

LIMIT、SKIP 分页

使用 LIMIT 关键字来限制最大行数,使用 SKIP 关键字跳过头部的结果。

1
2
3
MATCH (emp:Employee) 
RETURN emp
SKIP 2 LIMIT 10

删除

删除节点和关系

删除节点和关系主要用 DELETE 关键字

1
2
MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel

删除属性和标签

删除属性和标签主要用 REMOVE 关键字

  • 删除属性:
1
2
MATCH (book { id:122 })
REMOVE book.price
  • 删除标签:
1
2
MATCH (m:Movie) 
REMOVE m:Picture

更新

SET 关键字用于新增或者更新属性:

1
2
3
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book