Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。像Oracle数据库具有查询语言SQL,Neo4j具有CQL作为查询语言。
(1)它是Neo4j图形数据库的查询语言。
(2)它是一种声明性模式匹配语言
(3)它遵循SQL语法。
(4)它的语法是非常简单且人性化、可读的格式。
https://neo4j.com/docs/cypher-manual/3.5/clauses/
(1)创建一个人物节点
CREATE (n:Person {name:'曹'}) RETURN n
CREATE是创建操作,Person是标签,代表节点的类型。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,属性值是曹。
(2)创建更多的人物节点
CREATE (n:Person {name:'达'}) RETURN n;
CREATE (n:Person {name:'郜'}) RETURN n;
CREATE (n:Person {name:'雪姐'}) RETURN n;
CREATE (n:Person {name:'小潘潘'}) RETURN n;
MATCH (a:Person {name:'达'}),
(b:Person {name:'曹'})
MERGE (a)-[:FATHER]->(b)
这里的方括号[]即为关系,FATHER为关系的类型。注意这里的箭头 -->是有方向的,表示是从a到b的关系。 如图,曹和达之间建立了FATHER关系:
但是刚刚手快不小心把FATHER(父亲)按成了FRIENDS(朋友),再继续创建FATHER关系,出现了这种情况。
因此我们提前熟悉DELETE命令,不删除节点仅删除关系。
MATCH (n {name:'达'})-[r:FRIENDS]->()
DELETE r
然后改回我一开始想要的只有FATHER关系
(4)关系也可以增加属性
MATCH (a:Person {name:'郜'}),
(b:Person {name:'曹'})
MERGE (a)-[:FATHER {since:2018}]->(b)
在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给FATHER关系增加了since属性,属性值为2018,表示他们建立父亲关系的时间。
(5)同上,建立更多的关系
MATCH (a:Person {name:'曹'}), (b:Person {name:'雪姐'}) MERGE (a)-[:SISTERS {since:2018}]->(b);
MATCH (a:Person {name:'曹'}), (b:Person {name:'小潘潘'}) MERGE (a)-[:SISTERS {since:2018}]->(b);
MATCH (a:Person {name:'达'}), (b:Person {name:'郜'}) MERGE (a)-[:BROTHERS {since:2019}]->(b);
CREATE (n:Location {city:'南阳'});
CREATE (n:Location {city:'洛阳'});
CREATE (n:Location {city:'平凉'});
CREATE (n:Location {city:'南昌'});
(7)建立不同类型节点(人物与地区)之间的关系
MATCH (a:Person {name:'曹'}), (b:Location {city:'平凉'})
MERGE (a)-[:BORN_IN {year:1999}]->(b)
人物地区之间关系是BORN_IN,表示出生地,同样有一个属性,表示出生年份。
建立其他人的出生地
MATCH (a:Person {name:'雪姐'}), (b:Location {city:'洛阳'}) MERGE (a)-[:BORN_IN {year:2000}]->(b);
MATCH (a:Person {name:'小潘潘'}), (b:Location {city:'南阳'}) MERGE (a)-[:BORN_IN {year:2001}]->(b);
MATCH (a:Person {name:'达'}), (b:Location {city:'南昌'}) MERGE (a)-[:BORN_IN {year:2000}]->(b);
MATCH (a:Person {name:'郜'}), (b:Location {city:'洛阳'}) MERGE (a)-[:BORN_IN {year:1999}]->(b);
CREATE (a:Person {name:'艳军'})-[r:FRIENDS]->(b:Person {name:'红伟'})
(1)检索所有在洛阳出生的人物
MATCH (a:Person)-[:BORN_IN]->(b:Location {city:'洛阳'}) RETURN a,b
MATCH (a)-->() RETURN a
返回结果为什么没有地区节点?????
答:注意这里箭头的方向,因为地区并没有指向其他节点(只是被指向)
(3)检索所有有关系的节点
MATCH (a)--() RETURN a
MATCH (a)-[r]->() RETURN a.name, type(r)
MATCH (n)-[:FATHER]-() RETURN n
MATCH (a:Person {name:'达'})-[r1:FATHER]-()-[r2:SISTERS]-(b) RETURN b.name AS Name
给节点增加/修改节点的属性
MATCH (a:Person {name:'曹'}) SET a.age=23;
MATCH (a:Person {name:'郜'}) SET a.age=23;
MATCH (a:Person {name:'达'}) SET a.age=22;
可用于在各种情况下使用来优化查询.
这里只介绍 布尔运算符 与 比较运算符
MATCH (n)
WHERE n.age < 30
RETURN n.name, n.age
MATCH (n)
WHERE n.name = '曹' OR n.name = '达'
RETURN n
删除节点的属性
MATCH (a:Person {name:'曹'}) REMOVE a.age
MATCH (a:Location {city:'平凉'}) DELETE a
所以此命令只能删除无关系节点。
(2)删除平凉节点及其所有关系
MATCH (a { city: '平凉' })
DETACH DELETE a
成功!!!!!!!!!!!
(3) 仅删除关系在create(3)讲过了
(4) 删除所有节点和关系(清空数据库)
MATCH (n)
DETACH DELETE n