neo4j 图数据库之 cypher常用语法
- cypher语言说明
-
- CQL数据类型
- 删除语句
- 创建节点语句
- 创建关系语句
- 查询库信息语句
- 查询数据语句
- 全文索引
- 配置文件
- 权限配置
- 清空数据库
cypher语言说明
cypher 是neo4j声明式声明式查询语言,简称CQL。它遵循SQL语法,非常简单并且具有可读性的结构化格式。
CQL数据类型
类型 | 说明 |
---|---|
boolean | 用于表示布尔文字:true,false。 |
byte | 用于表示8位整数。 |
short | 用于表示16位整数。 |
int | 用于表示32位整数。 |
long | 用于表示64位整数。 |
float | 用于表示32位浮点数。 |
double | 用于表示64位浮点数。 |
char | 用于表示16位字符。 |
String | 用于表示字符串。 |
删除语句
- 删除所有节点及其关系
MATCH (a) OPTIONAL MATCH (a)-[r]-() DELETE a,r
- 删除某个节点
MATCH (a:student) DELETE a
- 删除属性
- 删除属性
MATCH (a:student) REMOVE a.name
- 删除关系
MATCH (a:student1)-[r:test_graph]-(a:student2) DELETE r
创建节点语句
- 创建一个空节点
- 创建一个带有lable节点
- 创建节点并分配属性
CREATE (a:student{age:18,name:'张三'}) RETURN * //注意:在已有的节点且属性相同会重复创建
MERGE (a:student{age:18,name:'张三'}) RETURN * //注意:没有此节点会新建立,已有此节点且属性相同会融合,已有此节点且属性值包含创建语句的属性值不会新创建,已有此节点且属性不同会新建立
MERGE (a:student{age:18,name:'张三',nick:['三三','小三']}) RETURN *
- 批量创建节点并且分配属性
UNWIND [{name:"李四"},{name:"张三"}] AS nodes CREATE (student) SET student= nodes
- 新增、更新属性
MERGE (a:student{name:'张三'}) ON CREATE SET a.age='19' RETURN * //注意:已有节点时属性不会创建和更新,未有节点会创建
MERGE (a:student{name:'张三'}) SET a.age='19' RETURN * //新增、更新
//合并
MERGE (n:student{name: '张三'})
ON CREATE SET n.age = 20
ON MATCH SET n.age = 20
- 创建多lable
- 在已有节点上添加新lable
MATCH (a{name:'张三'}) SET a:person RETURN a //添加一个标签
MATCH (a{name:'张三'}) SET a:person:student RETURN a //添加一个标签
创建关系语句
- 创建两个节点同时创建一个关系,给两个节点建立关系,指定关系类型、方向和属性。
- 在已有两个节点基础上建立关系,指定关系类型、方向和属性。
//注意:多次执行该语句使用 `CREATE` 会重复建立关系, 非重复建立使用 `MERGE` 即可
MATCH (a:student{name:"李四"}),(b:student{name:"张三"}) CREATE (a)-[r:test_graph]->(b) return *
- 在已有两个节点基础上建立关系,关系上附加属性。
查询库信息语句
- 帮助
:help
- 查询所有关系类型、节点标签
call db.propertyKeys
call db.labels
- 查看数据库结构
- 查看连接信息
- 查看系统信息
:play sysinfo
- 查看所有lables
- 查询所有的type
- 查询库内有多少个节点
- 查询有多少关系,不带方向的话结果为2倍
MATCH ()-->() RETURN count(*);
MATCH ()-[r]->() RETURN count(r);
查询数据语句
- 查询(
)所有节点及其关系
- 查询(
)孤立节点,及无关系节点
- 查询(
)匹配结果集中如果有丢的部分,则会用null来补充
OPTIONAL MATCH (n)-[r]->(m) RETURN m
- 查询(
)所有标签为 student 的节点
- 查询(
)多标签节点
- 查询(
)标签为 student 并且属性为 age=18 的所有节点
MATCH (a:student) WHERE a.age = 18 RETURN *
//或者
MATCH (a:student{age:18}) RETURN *
- 查询(
)节点 Id
MATCH (a:student) WHERE id(a)=2 RETURN *
MATCH (a:student) RETURN ID(a)
- 查询(
)匹配属性字符串的开头关键词 STARTS WITH
MATCH (a) WHERE a.name STARTS WITH '张' RETURN a
- 查询(
)匹配属性字符串的结尾关键词 ENDS WITH
MATCH (a) WHERE a.name ENDS WITH '三' RETURN a
- 查询(
)匹配属性字符串的结尾关键词 ENDS WITH
MATCH (a) WHERE a.name ENDS WITH '三' RETURN a
- 查询(
)匹配属性字符串的不包含关键词 CONTAINS
MATCH (a) WHERE NOT a.name CONTAINS '三' RETURN a
- 查询(
)支持正则表达式
MATCH (a) WHERE a.name =~'.*三.*' RETURN a
- 查询(
)属性不为空
- 查询(
)Coalesce
- 查询(
)条件 IN、与、或、NOT、NULL
MATCH (a:student) WHERE a.age IN [18,17,20] AND a.name IS NOT NULL OR a.age IS NULL RETURN *
MATCH (a:student) WHERE NOT a.age IN [18,17,20] RETURN *
MATCH (a:student) WHERE NOT (a)-[]-() DELETE a
- 查询(
)排序
- 查询(
)分页
- 查询(
)计算 最大值、最小值、平均值、和、统计
//注意age为数值等可计算字段且不为空,如有为空请排除后计算
MATCH (a:student) RETURN max(a.age),min(a.age),avg(a.age),sum(a.age),count(a.age)
- 查询(
分组、聚类数量、相异去重
MATCH (a:student) WITH COLLECT(distinct a.name) as c WHERE SIZE(c)<20 RETURN *
MATCH (a:student) WITH TYPE(a.age) AS t,COLLECT(distinct a.name) as c WHERE SIZE(c)<20 RETURN *
- 查询(
)关系、过滤
//无指定方向和关系
MATCH (a:student)-[]-(b:student) RETURN *
//指定方向和关系
MATCH (a:student)-[:test_graph]->(b:student) RETURN *
//指定方向和关系,并且返回指定属性 name 和关系类型以 t 开头的关系数据
MATCH (a:student)-[]->(b:student) WHERE a.name ='李四' and TYPE(r)=~ 't.*' RETURN *
MATCH (a{ name: '张三' }),(b) WHERE b.name IN ['李四','王五'] AND (a)<--(b) RETURN b
//返回任意关系为 test_graph 和 belong 的所有节点关系
MATCH p=(a)-[:test_graph|:belong]->(b) RETURN p
//关系属性范围过滤
MATCH (a)-[r:test_graph]->(b) WHERE r.influence < 2000 RETURN *
- 查询(
)节点之间最短路径
MATCH n=allshortestPaths((a:student{name:"李四"})-[*]-(b:student{name:"张三"})) return n
- 查询(
)深度关系匹配
//可变长度的关系
START a=node(3), x=node(2, 4) MATCH p1=a-[r:test_graph*1..3]->x RETURN a,x,length(p1)
//匹配从a到b,任意关系,深度1到5的节点
MATCH p=(a)-[*1..5]->(b) RETURN p
//匹配从a到b,任意关系、任意深度的节点
MATCH p=(a)-[*]->(b) RETURN p
- 查询(
)关键词 All、Any、None、Single
//迭代测试集合中所有元素的判断
MATCH p=(a:student) WHERE ALL(x IN nodes(p) WHERE x.name='李四') RETURN a
MATCH (a:student) WHERE ANY(x IN a.array WHERE x.name='李四') RETURN *
//在迭代器中没有元素判断将返回true
MATCH p=(a:student)-[*1..3]-() WHERE NONE(x IN nodes(p) WHERE x.name= '李四') RETURN p
//如果迭代器中仅有一个元素则返回true
MATCH p=(a:student)-[*1..3]-() WHERE SINGLE(x in nodes(p) WHERE x.name= '李四') RETURN p
- 查询(
)Nodes、Relationships、Extract
//返回一个路径中的所有节点
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN nodes(p)
//返回一条路径中的所有关系
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN relationships(p)
//返回一个路径中的所有节点
MATCH p=(a:student)--(r:test_graph)--(b:student) RETURN extract(n in nodes(p):n.name)
- 查询(
)UNION 语句
//使用UNION结果去重,求并集
MATCH (a)-[:test_graph]->(b) RETURN b.name UNION MATCH (a)-[:belong]->(b) RETURN b.name
//使用UNION ALL结果不去重, 求和集
MATCH (a)-[:test_graph]->(b) RETURN b.name UNION ALL MATCH (a)-[:belong]->(b) RETURN b.name
//执行过程
EXPLAIN MATCH (n:LabelsTree) return *
全文索引
请跳转下期博客: (二)neo4j 之 全文索引
配置文件
请跳转下期博客: (三)neo4j 之 配置文件参数
权限配置
- 创建新用户及管理角色
功能 | 语句 |
---|---|
管理员账户创建一个用户 | |
分配用户一个角色 | |
改变用户密码 | |
删除用户的读写权限 | |
给用户分配读数据权限 | |
- 禁用和重新激活用户
功能 | 语句 |
---|---|
禁用 | |
重新激活 | |
-
通过控制台添加新用户
a.控制台输入栏输入
b.设置username,setPassword,ConfirmPassword,点击AddUser:server user add
清空数据库
删除数据 databases/graph.db