CQL简介
CQL代表Cypher查询语言。像关系型数据库的查询语言SQL,Neo4j使用CQL作为查询语言。 Neo4j CQL
- 它是Neo4j图形数据库的查询语言
- 它是一种声明性模式匹配语言
- 它遵循SQL语言
- 它的语言是非常简单且人性化、可读的格式。
常用的Neo4j CQL命令、条款如下:
No. | CQL命令/条 | 作用 |
---|
1 | CREATE创建 | 创建节点,关系和属性 | 2 | MATCH匹配 | 检索有关节点,关系和属性数据 | 3 | RETURN返回 | 返回查询结果 | 4 | WHERE条件 | 提供条件过滤检索MATCH数据 | 5 | DELETE删除 | 删除节点和关系 | 6 | REMOVE移除 | 删除节点和关系的属性 | 7 | SET设置 | 添加或更新标签 | 8 | ORDER BY排序 | 对结果排序 | 9 | SKIP LIMIT分页 | 分页 | 10 | DISTINCT去重 | 去重 |
CREATE
CREATE(
<node-name>:<label-name>
[{
<property1-name>:<property1-value>
......
<propertyn-name>:<propertyn-value>
}]
)
语法说明:
语法元素 | 描述 |
---|
<node-name> | 它是我们将要创建的节点名称 | <label-name> | 它是一个节点标签名称 | <property1-name>...<propertyn-name> | 属性是键值对。定义将分配给创建节点的属性的名称 | <propertyn-name>...<propertyn-name> | 属性是键值对。定义将分配给创建节点的属性的值 |
举例:
create(person:Person)
create(person:Person {cid:1,name:"范闲",age:24,gender:0,character:"A",money:1000})
create(person:Person {cid:2,name:"林婉儿",age:20,gender:1,character:"B",money:800})
create(person:Person {cid:3,name:"庆帝",age:49,gender:0,character:"A",money:8900})
MATCH RETURN命令语法
MATCH(
<node-name>:<label-name>
)
RETURN
<name-name>.<property1-name>,
......
<node-name>.<propertyn-name>
语法元素 | 描述 |
---|
<node-name> | 它是我们将要创建的节点名称 | <label-name> | 它是一个节点标签名称 | <property1-name>...<propertyn-name> | 属性是键值对。定义将分配给创建节点得到属性的名称 |
举例:
match(person:Person) return person
match(person:Person) return person.name,person.age,ID(person)
创建关系
使用现有节点创建没有属性关系的关系
MATCH(<node1-name>:<node1-label-name>),(<node2-name>:<node2-label-name>)
CREATE(
<node1-name>-[<relationship-name>:<relationship-label-name>] -> <node2-name>
)
RETURN 相应的内容
语法说明:
No. | 语法元素 | 描述 |
---|
1 | MATCH,CRATE,REUTRN | 它们是Neo4j CQL关键字 | 2 | <node1-name> | 它用于创建关系的“From Node”的名字 | 3 | <node1-label-name> | 它用于创建关系的“From Node”的标签名称 | 4 | <node2-name> | 它用于创建关系的“To Node”的名称 | 5 | <node2-label-name> | 它用于创建关系的“To Node”的标签你名称 | 6 | <relationship-name> | 这是一个关系的名称 | 7 | <relationship-label-name> | 它是一个关系的标签名称 |
举例:
创建关系
match(person1:Person{name:"范闲"}),(person2:Person{name:"林婉儿"})
create(person1)-[r:Couple] -> (person2)
查询关系
match p = (p1:Person{name:'范闲'})-[r:Couple]->(:Person) return p
使用现有节点创建有属性的关系
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]
{<dedfine-proreties-list>}]-<(node2-label-name)
其中`<dedfine-properties-list>`是分配给新创建关系的属性(名称-值对)的列表。
{
<property1-name>:<property1-value>,
<property2-name>:<property2-value>,
...
<propertyn-name>:<propertyn-value>
}
举例:
match(p1:Person{name: '范闲'}) match(p2:Person {name: '林婉儿'})
create(p1)-[r:Couple]-[r:Couple{marry_date:'2021-05-20', price: 55000}->(p2)] return r
使用新的节点创建有属性的关系
CREATE
(node1-label-name):<node1-name>{<define-properties-list>}-[<relationshio-label-name>]:<relationship-name>{<define-properties-list>}]->(<node1-label-name>:<node1-label-name>:<node1-name>{<define-properties-list>})
举例:
create (p1:Person {cid:9,name:'靖王世子',age:23,gender:0,character:'A',money:3000})-[r:Friend{date:'2021-09-05'}]->(p2:Person{cid:8,name:'二皇子',age:24,gender:0,character:'B',money:6000}
关系节点的属性可以使用的类型
CQL数据类型 | 作用 |
---|
boolean | 它用于标示布尔文字:true,false | byte | 它用来表示8位整数 | short | 它用于表示16位整数 | int | 它用于表示32位整数 | long | 它用于表示63位整数 | float | 浮点数用于标示32位浮点数 | double | Double用于表示64位浮点数 | char | Char用于表示16位字符 | string | 字符串用于表示字符串 |
CTREATE创建多个标签
CREATE (<node-name>:<label-name1>:<label-name2>...<label-namen>)
举例:
create(person:Person:Beauty:Picture{cid:20,name:'白雪公主'})
WHERE子句
简单的WHERE字句
WHERE <condition>
复杂的WHERE字句
WHERE <condition> <boolean-operator><condition>
where中的比较运算符和之前mysql的相同,如=~=<>><等
举例:
match (p:Person)
where p.name = '范闲' or p.name = '靖王世子' return p
DELETE子句和REMOVE子句
DELETE子句
举例:
match p = (:Person {name:'林婉儿'})-[r:Couple]-(:Person) delete r
REMOVE子句
match (p:Person {name:'白雪公主'})
remove p.cid
SET子句
match (p:Person {cid:1})
set p.money=6666,p.age=25```
ORDER BY子句
ORDER BY字句,对MATCH的结果进行排序。 我们可以按照升序或者降序进行排序。 默认情况下,它按照升序进行排序。如果我们要按降序进行排序,我们需要使用DESC子句。
MATCH (p:Person)
RETURN p.name,p.money
ORDER BY p.money DESC
SKIP和LIMIT
Neo4j CQL已提供SKIP子句来过滤或限制查询返回的行数。它修整了CQL查询结果集顶部的结果。 Neo4J CQL已提供LIMIT子句来过滤或限制查询返回的行数。它修剪CQL查询结果集底部的结果。
MATCH (p:Person)
RETURN ID(p),p.name,p.money
ORDER BY p.money DESC SKIP 4 LIMIT 2
DISTINCT去重
MATCH (p:Person) RETURN DISTINCT(p.character)
|