CQL代表Cypher查询语言。 在Neo4j-browser(浏览器)中输入命令时,如果需要回车,使用Shift+Enter进行输入。 在Cypher中单引号和双引号都可以表示字符串(这点和Python相同)。
CQL代表Cypher查询语言。
在Neo4j-browser(浏览器)中输入命令时,如果需要回车,使用Shift+Enter进行输入。
在Cypher中单引号和双引号都可以表示字符串(这点和Python相同)。
1. MATCH
1.1 MATCH语法
MATCH相当于SQL SELECT
MATCH(node)-[relationship]->(node)
WHERE
(node | relationship)
RETURN
(node | relationship)
1.2 MATCH语句实例
例一:
MATCH (n:Person)RETURN n limit 1000
其中n是别名,相当于SQL中的AS。
例二,带有关系的查询:
MATCH (n:Person)-[:HAS_PHONE]->(p:Phone)RETURN n,p limit 10
例三,限制条件下带有关系的查询:
MATCH (n:Person)-[:HAS_PHONE]->(p:Phone)WHERE n.name = "姓名6"
RETURN n,p limit 10
1.3 多维度关系查询
MATCH (n:Person)-[:HAS_PHONE]->(p:Phone)-[:CALL]->(p1:Phone)WHERE n.name = "姓名6"
RETURN n,p,p1 limit 10
1.4 不限制实体的关系查询
MATCH p=()-[c:CALL]-()RETURN p limit 10MATCH p=()-[c:CALL]->()
RETURN p limit 10
如果不加limit 10,两者结果是相同的。
1.5 带有正则表达式的查询
MATCH (n:USERS)WHERE n.name=~'Jack.*'
RETURN n
1.6 包含查询
MATCH (n:USERS)WHERE n.name contains ‘J’
RETURN n
2. CREATE
创建实体和关系。
2.1 CREATE语句实例
例一:
CREATE (n:Person)-[:LOVES]->(m:Dog)例二,带有属性的创建:
CREATE (n:Person{name:"李四"})-[:FEARS{level:1}]->(t:Tiger{type:"东北虎"})2.2 给没有关系的实体创建关系
CREATE (n:Person{name:'赵六'})
CREATE (n)-[k:KNOW]->(m)
RETURN k
RETURN n,m
3. MERGE
MERGE和CREATE的操作比较类似,区别在于哪里呢?为了便于理解,我们以Python的例子为例,假设数据存放在list中,CREATE相当于直接append,而MERGE相当于先find,如果存在则pass,如果不存在则CREATE。
MATCH (n:Person{name:'王五'}), (m:Person{name:'赵六'})CREATE (n)-[l:LOVE]->(m)
RETURN lMATCH (n:Person{name:'王五'}), (m:Person{name:'赵六'})
RETURN n,m
4. DELETE
4.1 删除实体之间的关系
MATCH (n:Person{name:'李四'})-[f:FEAR]->(t:Tiger)DELETE f
4.2 删除实体
MATCH (n:Person{name:'李四'})DELETE n
4.3 同时删除实体和关系
MATCH (n:Person{name:'李四'})-[f:FEAR]->(t:Tiger)DELETE n,f,t
5. SET
向现有节点或关系添加新标签或者属性。
5.1 添加实体标签
MATCH (t:Tiger)WHERE ID(t)=1637
SET t:A
这时候会对该实体添加一个实体标签A。
5.2 修改、更新实体的属性
修改属性
MATCH (t:Tiger)WHERE ID(t)=1637
SET t.type='老虎'
添加属性
MATCH (t:Tiger)WHERE ID(t)=1637
SET t.name='阿虎'
6. 索引
6.1 添加索引
语法为:CREATE INDEX ON :<label_name> (<property_name>)
CREATE INDEX ON:Person(name)6.2 删除索引
语法为:DROP INDEX ON :<label_name> (<property_name>)
DROP INDEX ON:Person(name)6.3 添加唯一索引
语法为:CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
CREATE CONSTRAINT ON (p:Person)ASSERT p.number IS UNIQUE
6.4 删除唯一索引
语法为:DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
DROP CONSTRAINT ON (p:Person)ASSERT p.number IS UNIQUE
7. 复杂查询
姓名12的三度关系内的朋友有哪些
MATCH (p1:Person)-[:FRIEND_OF]-(p2:Person)-[:FRIEND_OF]-(p3:Person)WHERE p1.name='姓名12'
RETURN p1,p2,p3
姓名12的三度关系内的人有哪些
MATCH (p1:Person)-[]-(p2:Person)-[]-(p3:Person)WHERE p1.name='姓名12'
RETURN p1,p2,p3
姓名11的通话记录中的电话有哪些
MATCH (n:Person)-[:HAS_PHONE]->(p1:Phone)-[:CALL]-(p2:Phone)WHERE n.name='姓名11'
RETURN n,p1,p2
8. 最短路径查询
得到最短路径中的一个:
MATCH (p1:Person{name:"姓名2"}),(p2:Person{name:"姓名10"}),p=SHORTESTPATH((p1)-[*..10]-(p2))
RETURN p
这里[*…10]表示路径深度10以内查找所有存在的关系中的最短路径关系。
得到所有最短路径:
MATCH (p1:Person{name:"姓名2"}),(p2:Person{name:"姓名10"}),p=ALLSHORTESTPATHS((p1)-[*..10]-(p2))
RETURN p