Neo4j的Cypher Query Language(CQL)是专门为图数据库设计的查询语言,其语法类似于SQL,但是专门用于描述和查询图数据。以下是一些常见的Cypher查询示例和用法,包括创建数据、查询数据、更新数据和删除数据的操作。
1. 创建节点和关系
创建单个节点:
CREATE (node:Label {property: value}) CREATE (n:Person {name: 'Alice', age: 30})
CREATE (c:Company {name: 'xx公司'})
在这个例子中,我们创建了一个具有两个属性(name
和age
)的Person
节点。
创建两个节点之间的关系:
MATCH (node1:Label1), (node2:Label2) WHERE node1.property = value1 AND node2.property = value2 CREATE (node1)-[:RELATIONSHIP_TYPE]->(node2)
MATCH (n:Person {name: 'Alice', age: 30}), (c:Company {name: 'xx公司'})
CREATE (n)-[:WORKS_FOR]->(c)
2. 查询数据
查询所有Person
节点:
MATCH (p:Person) RETURN p
查询特定属性的节点:
MATCH (p:Person {name: 'Alice'}) RETURN p
查询具有特定关系的节点:
MATCH (p:Person)-[:FRIENDS_WITH]->(friend) WHERE p.name = 'Alice' RETURN friend
这里我们返回了所有与名为Alice的人是朋友的节点。
3. 更新数据
更新节点属性:
MATCH (p:Person {name: 'Alice'}) SET p.age = 31 RETURN p
这里我们将名为Alice的Person
的年龄更改为31。
添加关系:
MATCH (a:Person), (b:Person) WHERE a.name = 'Alice' AND b.name = 'Bob' CREATE (a)-[:FRIENDS_WITH]->(b)
这里我们在Alice和Bob之间创建了一个新的FRIENDS_WITH
关系。
4. 删除数据
删除一个没有关系的节点:
MATCH (n:Person {name: 'Alice'}) DELETE n
删除一个节点和它的所有关系:
MATCH (n:Person {name: 'Alice'}) DETACH DELETE n
DETACH DELETE
语句将删除节点及其所有关系
5. 复杂查询
使用多个匹配和条件:
MATCH (a:Person {name: 'Alice'}) MATCH (b:Person {name: 'Bob'}) MATCH (a)-[r:FRIENDS_WITH]-(b) RETURN r
这里我们查询Alice和Bob之间是否存在朋友关系,并返回这个关系。
聚合和排序:
MATCH (p:Person) RETURN p.name, COUNT(p) as num_friends ORDER BY num_friends DESC
这个查询返回每个人的名字和他们朋友的数量,并按朋友数量降序排序。