Cypher语言介绍
Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据。Cypher借鉴了SQL语言的结构——查询可由各种各样的语句组合。
在Cypher语言中一个在图G上的查询Q可以认为是从空表到结果关系表的转换。一个Cypher 查询语言包括四部分:表达式、图模式、子句和查询。针对一个属性图而言,Cypher 语句既包括查询也包括数据更新和操作等功能。
基础语句
创建一个节点
CREATE (n:SIGN {PROPERTY}) RETURN n
CREATE (n:Person {name:'John'}) RETURN n //示例1
CREATE (n:Location {city:'Miami', state:'FL'}) //示例2
- CREATE 是创建操作,SIGN是标签,代表节点得类型。花括号中代表节点的属性。
- 示例1语句表示的是创建一个标签为Person的节点,其中节点具有一个name属性,属性值为John。
- 花括号中可以创建多个属性,示例2语句表示的是创建一个标签为Location的节点,其中节点具有2个属性,第一个为city属性,属性值为Miami;第二个为state属性,属性值为FL
创建关系
MATCH (a:SIGN {PROPERTY}),
(b:SIGN {PROPERTY})
MERGE (a)-[:RELATION]->(b)
//示例
MATCH (a:Person {name:'Liz'}),
(b:Person {name:'Mike'})
MERGE (a)-[:FRIENDS]->(b)
- MATCH语句是查询操作,用来匹配一定模式,可以是简单的节点、关联,也可以是复杂的路径。
- MERGE语句是创建关系的操作,建立一条由a到b的边,边的关系类型是RELATION
- 示例语句表示的是找到两个标签为Person,name属性分别为Liz和Mike的节点,分别记为a和b;然后创建一条由a到b的边,边的关系类型为FRIENDS
- 边也可以添加属性,例如:
MATCH (a:Person {name:'Shawn'}),
(b:Person {name:'Sally'})
MERGE (a)-[:FRIENDS {since:2001}]->(b)
这里给FRIENDS添加了since属性,属性值为2001
- 此外,不同节点类型的节点也可以创建关系,例如:
MATCH (a:Person {name:'John'}),
(b:Location {city:'Boston'})
MERGE (a)-[:BORN_IN {year:1978}]->(b)
查询操作
1、查询所有对外有关系的节点
MATCH (a)-->() RETURN a
2、查询所有有关系的节点
MATCH (a)--() RETURN a
3、查询所有对外有关系的节点,以及关系类型
MATCH (a)-[r]->() RETURN a.name, type(r)
4、查询所有具有某种关系的节点
MATCH (n)-[:RELATION]-() RETURN n
MATCH (n)-[:MARRIED]-() RETURN n //示例
示例语句表示的是查询所有有结婚关系的节点
修改与删除
1、增加/修改节点的属性
MATCH (a:SIGN {PROPERTY_1}) SET a.PROPERTY_1=x
MATCH (a:SIGN {PROPERTY_1}) SET a.PROPERTY_2=x
MATCH (a:Person {name:'Liz'}) SET a.age=34 //示例
- 在这里,SET表示修改操作,如果属性不存在,则新建该属性并赋值
- 示例语句表示的是对标签类型为Person,name属性为Liz的节点新增属性age,属性值为34
2、删除节点的属性
MATCH (a:SIGN {PROPERTY}) REMOVE a.PROPERTY
//示例
MATCH (a:Person {name:'Mike'}) SET a.test='test'
MATCH (a:Person {name:'Mike'}) REMOVE a.test
- 删除节点的属性操作主要通过REMOVE
- 示例语句表示的是新建一个test属性并赋值test,随后删除该属性
3、删除节点
MATCH (a:SIGN {PROPERTY}) DELETE a
MATCH (a:Location {city:'Portland'}) DELETE a //示例
- 删除节点操作是DELETE
- 示例语句表示的是删除标签类型为Location,city属性为Portland的节点
4、删除所有内容
MATCH (n) DETACH DELETE n
示例演示
1、创建人物节点
CREATE (n:Person {name:'Mike', sex:'male'}) RETURN n
CREATE (n:Person {name:'Jenny', sex:'female'}) RETURN n
CREATE (n:Person {name:'White', sex:'male'}) RETURN n
CREATE (n:Person {name:'Jenson', sex:'male'}) RETURN n
CREATE (n:Person {name:'Mary', sex:'female'}) RETURN n
CREATE (n:Person {name:'John', sex:'male'}) RETURN n
2、创建地点节点
//工作地点
CREATE (n:Company {name:'Microsoft'}) RETURN n
CREATE (n:Company {name:'Ubisoft'}) RETURN n
CREATE (n:Company {name:'NVIDIA'}) RETURN n
CREATE (n:Company {name:'Huawei'}) RETURN n
CREATE (n:Company {name:'Xiaomi'}) RETURN n
//创建国家、省市
CREATE (n:Municipality {name:'Beijing'}) RETURN n
CREATE (n:Municipality {name:'Shanghai'}) RETURN n
CREATE (n:City {name:'Nanjing'}) RETURN n
CREATE (n:City {name:'Wenzhou'}) RETURN n
CREATE (n:City {name:'Jiaxing'}) RETURN n
CREATE (n:City {name:'Nantong'}) RETURN n
CREATE (n:Province {name:'Jiangsu'}) RETURN n
CREATE (n:Province {name:'Zhejiang'}) RETURN n
CREATE (n:Country {name:'China'}) RETURN n
3、创建关系
MATCH(a:Person {name:'John'}),
(b:Person {name:'Mary'})
MERGE(a)-[:Spouse]->(b)
MATCH(a:Person {name:'Jenson'}),
(b:Person {name:'Jenny'})
MERGE(a)-[:Spouse]->(b)
MATCH(a:Person {name:'Mike'}),
(b:Person {name:'White'})
MERGE(a)-[:Brothers]->(b)
MATCH(a:Person {name:'Mike'}),
(b:Company {name:'NVIDIA'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'White'}),
(b:Company {name:'Huawei'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Jenny'}),
(b:Company {name:'Huawei'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Jenson'}),
(b:Company {name:'Microsoft'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'Mary'}),
(b:Company {name:'Microsoft'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Person {name:'John'}),
(b:Company {name:'Xiaomi'})
MERGE(a)-[:Works_in]->(b)
MATCH(a:Company {name:'NVIDIA'}),
(b:Municipality {name:'Shanghai'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Ubisoft'}),
(b:Municipality {name:'Shanghai'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Microsoft'}),
(b:Municipality {name:'Beijing'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Company {name:'Xiaomi'}),
(b:Municipality {name:'Beijing'})
MERGE(a)-[:Located_in]->(b)
MATCH(a:Municipality {name:'Shanghai'}),
(b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Municipality {name:'Beijing'}),
(b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Province {name:'Jiangsu'}),
(b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Province {name:'Zhejiang'}),
(b:Country {name:'China'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Hangzhou'}),
(b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Wenzhou'}),
(b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Jiaxing'}),
(b:Province {name:'Zhejiang'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Nanjing'}),
(b:Province {name:'Jiangsu'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:City {name:'Nantong'}),
(b:Province {name:'Jiangsu'})
MERGE(a)-[:Belongs_to]->(b)
MATCH(a:Person {name:'Mary'}),
(b:City {name:'Wenzhou'})
MERGE(a)-[:Born_in]->(b)
MATCH(a:Person {name:'Mike'}),
(b:City {name:'Nantong'})
MERGE(a)-[:Born_in]->(b)
4、结果