Neo4j-CQL
1. CQL简介
CQL代表Cypher查询语言。像关系型数据库具有查询语言SQL,Neo4j使用CQL作为查询语言。
Neo4jCQL:
- 它是Neo4j图形数据库的查询语言。
- 它是一种声明性模式匹配语言。
- 它遵循SQL语法。
- 它的语法是非常简单且人性化、可读的格式。
常用命令如下:
序号 | 命令 | 作用 |
---|---|---|
1 | CREATE 创建 | 创建节点,关系和属性 |
2 | MATCH 匹配 | 检索有关节点,关系和属性 |
3 | RETURN 返回 | 返回查询结果 |
4 | WHERE 条件 | 提供条件过滤检索match数据 |
5 | DELETE 删除 | 删除节点和关系 |
6 | REMOVE 移除 | 删除节点和关系的属性 |
7 | SET 设置 | 添加或更新标签 |
8 | ORDER BY 排序 | 对结果排序 |
9 | SKIP LIMIT 分页 | 分页 |
10 | DISTINCT 排重 | 排重 |
2. 语法详解
2.1 CREATE
CREATE (
<node-name>:<label-name>
[{
<property1-name>:<property1-Value>
........
<propertyn-name>:<propertyn-Value>
}]
)
语法元素 | 描述 |
---|---|
<node-name> |
要创建的节点名称 |
<label-name> |
节点标签名称 |
<property1-name> |
属性是键值对.定义将分配给创建节点的属性的名称 |
<property1-Value> |
属性是键值对。 定义将分配给创建节点的属性的值 |
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});
2.2 MATCH RETURN
MATCH (
<node-name>:<label-name>
)
RETURN <node-name>.<property1-name>, ... <node-name>.<propertyn-name>
MATCH (person:Person) return person
MATCH (person:Person) return person.name,person.age
2.3 关系创建
-
使用现有节点创建没有属性的关系
MATCH (<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>) CREATE( <node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2- name>) RETURN 相应的内容
-- 创建关系 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})
关系和节点的属性可以使用的类型
2.4 CREATE创建多个标签
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
如:
CREATE (person:Person:Beauty:Picture {cid:20,name:"小美女"})
2.5 WHERE子句
简单的WHERE子句
WHERE <condition>
复杂的WHERE子句
WHERE <condition> <boolean-operator> <condition>
where 中的比较运算符 和 之前mysql的相同 如 = != <> > < and or not 等
MATCH (person:Person) WHERE person.name = '范闲' OR person.name = '靖王世子' RETURN person
2.6 DELETE子句和REMOVE子句
-
DELETE
删除节点, 删除节点及相关节点和关系
match p = (:Person {name:"林婉儿"})-[r:Couple]-(:Person) delete r
-
REMOVE
删除节点或关系的标签/属性
MATCH (person:Person {name:"小美女"}) REMOVE person.cid
2.7 SET子句
向现有节点或关系添加新属性/更新属性值
MATCH (person:Person {cid:1})
SET person.money = 3456,person.age=25
2.8 ORDER BY 子句
ORDER BY
子句,对MATCH查询返回的结果进行排序
我们可以按升序或降序对行进行排序
默认情况下,它按升序对行进行排序。 如果我们要按降序对它们进行排序,我们需要使用DESC子句。
MATCH (person:Person)
RETURN person.name,person.money
ORDER BY person.money DESC
2.9 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
2.10 DISTINCT排重
这个函数的用法就像SQL中的distinct关键字,返回的是所有不同值
MATCH (p:Person) RETURN Distinct(p.character)