neo4j
neo4jCQL
-
它是Neo4j图形数据库的查询语言。
-
它是一种声明性模式匹配语言
-
它遵循SQL语法。
-
它的语法是非常简单且人性化、可读的格式。
Neo4j CQL命令/条款
S.No.
|
CQL命令/条
|
用法
|
1
|
CREATE
创建
|
创建节点,关系和属性
|
2
|
MATCH
匹配
|
检索有关节点,关系和属性数据
|
3
|
RETURN
返回
|
返回查询结果
|
4
|
WHERE
哪里
|
提供条件过滤检索数据
|
5
|
DELETE
删除
|
删除节点和关系
|
6
|
REMOVE
移除
|
删除节点和关系的属性
|
7
|
ORDER BY
以…排序
|
排序检索数据
|
8
|
SET
组
|
添加或更新标签
|
Neo4j CQL 函数
S.No.
|
定制列表功能
|
用法
|
1
|
String
字符串
|
它们用于使用String字面量
|
2
|
Aggregation
聚合
|
它们用于对CQL查询结果执行一些聚合操作
|
3
|
Relationship
关系
|
他们用于获取关系的细节,如startnode,endnode等
|
Neo4j CQL数据类型
用于定义节点或关系的属性
S.No.
|
CQL数据类型
|
用法
|
1.
|
boolean
|
用于表示布尔文字:true,false
|
2.
|
byte
|
用于表示8位整数
|
3.
|
short
|
用于表示16位整数
|
4.
|
int
|
用于表示32位整数
|
5.
|
long
|
用于表示64位整数
|
6.
|
float
|
I用于表示32位浮点数
|
7.
|
double
|
用于表示64位浮点数
|
8.
|
char
|
用于表示16位字符
|
9.
|
String
|
用于表示字符串
|
Neo4j CQL
-
CREATE命令
使用CQL“CREATE”命令
-
创建没有属性的节点
-
使用属性创建节点
-
在没有属性的节点之间创建关系
-
使用属性创建节点之间的关系
-
为节点或关系创建单个或多个标签
创建一个没有属性的节点
命令语法
CREATE (<node-name>:<label-name>)
语法说明
语法元素
|
描述
|
<node-name>
|
它是我们要创建的节点名称。
|
<label-name>
|
它是一个节点标签名称
|
说明
1、Neo4j数据库服务器使用此<node-name>将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息。
2、Neo4j数据库服务器创建一个<label-name>作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息。
举例
CREATE (dept:Dept)
CREATE (emp:Employee)
创建具有属性的节点
命令语法:
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
})
语法说明:
语法元素
|
描述
|
<node-name>
|
它是我们将要创建的节点名称。
|
<label-name>
|
它是一个节点标签名称
|
<Property1-name>...<Propertyn-name>
|
属性是键值对。 定义将分配给创建节点的属性的名称
|
<Property1-value>...<Propertyn-value>
|
属性是键值对。 定义将分配给创建节点的属性的值
|
举例:
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
注意:
要定义字符串类型属性值,我们需要使用单引号或双引号。
CREATE (emp:Employee{id:123,name:"Lokesh",sal:35000,deptno:10})
-
MATCH命令
MATCH 命令用于
-
从数据库获取有关节点和属性的数据
-
从数据库获取有关节点,关系和属性的数据
命令语法:
MATCH
(
<node-name>:<label-name>
)
语法说明:
语法元素
|
描述
|
<node-name>
|
这是我们要创建一个节点名称。
|
<label-name>
|
这是一个节点的标签名称
|
举例:
# 查询Dept下的内容
MATCH (dept:Dept) return dept
# 查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p
# 查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee) WHERE p.name = "Lokesh" RETURN p
-
MATCH & RETURN匹配和返回
MATCH & RETURN用于 -
-
检索节点的某些属性
-
检索节点的所有属性
-
检索节点和关联关系的某些属性
-
检索节点和关联关系的所有属性
命令语法:
MATCH
(
<node-name>:<label-name>
)
MATCH Command
RETURN Command
|
|
|
|
|
|
举例:
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname
-
dept是节点名称
-
这里Dept是一个节点标签名
-
deptno是dept节点的属性名称
-
dname是dept节点的属性名
MATCH (dept: Dept)
RETURN dept
-
关系基础
基于方向性,Neo4j关系被分为两种主要类型。
-
单向关系
-
双向关系
CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。
-
在两个现有节点之间创建无属性的关系
语法:
MATCH (<node1-label-name>:<nodel-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
举例
MATCH (e:Customer),(cc:CreditCard)
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)
查询e和cc之间的关系:
MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc)
RETURN r
-
在两个现有节点之间创建有属性的关系
MATCH (cust:Customer),(cc:CreditCard)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
-
在两个新节点之间创建无属性的关系
Neo4J数据库没有这两个节点
使用CQL CREATE命令一次创建两个结束节点和它们之间的新关系
语法:
CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
举例:
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2)
-
在两个新节点之间创建有属性的关系
语法:
CREATE
(<node1-label-name>:<node1-name>{<define-properties-list>})-
[<relationship-label-name>:<relationship-name>{<define-properties-list>}]
->(<node1-label-name>:<node1-name>{<define-properties-list>})
RETURN <relationship-label-name>
举例:
CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})-[movie:ACTION_MOVIES{rating:1}]->(video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})
查询YoutubeVideo1和YoutubeVideo2之间的关系
MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2)
RETURN movie
-
在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
-
CREATE创建标签
单个标签到节点
语法:
CREATE (<node-name>:<label-name>)
举例:
CREATE (google1:GooglePlusProfile)
多个标签到节点
语法:
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
注意:
使用colon(:)运算符来分隔节点名和标签名。
使用colon(:)运算符将一个标签名称分隔到另一个标签名称。
举例:
CREATE (m:Movie:Cinema:Film:Picture)
单个标签到关系
语法:
CREATE (<node1-name>:<label1-name>)-
[(<relationship-name>:<relationship-label-name>)]
->(<node2-name>:<label2-name>)
举例:
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
-
WHERE子句
这里就直接举例了
MATCH (emp:Employee)
WHERE emp.name = 'Abc'
RETURN emp
MATCH (emp:Employee)
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
RETURN emp
-
使用WHERE子句创建关系
语法:
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
WHERE <condition>
CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<relationship-properties>}]->(<node2-label-name>)
举例:
MATCH (cust:Customer),(cc:CreditCard)
WHERE cust.id = "1001" AND cc.id= "5001"
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
-
DELETE删除
语法:
MATCH (e: Employee) DELETE e
-
DELETE节点和关系子句语法
语法:
DELETE <node1-name>,<node2-name>,<relationship-name>
举例:
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
-
REMOVE删除
REMOVE命令用于
-
删除节点或关系的标签
-
删除节点或关系的属性
Neo4j CQL DELETE和REMOVE命令之间的主要区别 -
-
DELETE操作用于删除节点和关联关系。
-
REMOVE操作用于删除标签和属性。
Neo4j CQL DELETE和REMOVE命令之间的相似性 -
-
这两个命令不应单独使用。
-
两个命令都应该与MATCH命令一起使用。
举例:
MATCH (book { id:122 })
REMOVE book.price
RETURN book
MATCH (dc:DebitCard)
REMOVE dc.cvv
RETURN dc
删除节点/关系的标签
举例:
MATCH (m:Movie)
REMOVE m:Picture
-
SET子句
SET 子句来执行以下操作。
-
向现有节点或关系添加新属性
-
添加或更新属性值
举例:
MATCH (book:Book) SET book.title = 'superstar' RETURN book
-
ORDER BY排序
提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。
可以按升序或降序对行进行排序。
默认情况下,它按升序对行进行排序。 如果要按降序对它们进行排序,需要使用DESC子句。
语法:
ORDER BY <property-name-list> [DESC]
举例:
(升序)
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name
(降序)
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC