1、基本命令
1.1、创建
1.1.1、创建节点
#emp是名称,可以不写,Employee表示节点标签
CREATE (emp:Employee)
# 创建后可以返回
CREATE (dept:Dept)
return dept
# 创建标签为Dept的节点,并为其设置属性
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
CREATE (m:Movie:Cinema:Film:Picture)
不存在才创建
MERGE=CREATE+MATCH
如果我们观察上面的查询结果,它只显示一行,因为CQL MERGE命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。
MERGE (gp2:GoogleProfile2{ Id: 201402,Name:"Nokia"})
1.1.2、创建关系
MATCH (e:Customer),(cc:CreditCard)
CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)
MATCH (cust:Customer),(cc:CreditCard)
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
RETURN r
CREATE (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2)
return like
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"})
1.1.3、创建索引
CREATE INDEX ON :Customer (name)
1.1.4、创建UNIQUE约束
CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
1.2、删除
1.2.1、删除节点和关系
MATCH (e: Employee) DELETE e
MATCH (cc: CreditCard)-[rel]-(c:Customer)
DELETE cc,c,rel
# 删除所有关系
MATCH p=()-->() DELETE p
MATCH p=()-[]->() DELETE p
1.2.2、删除节点/关系的属性
MATCH (book { id:122 })
REMOVE book.price
RETURN book
1.2.3、删除节点/关系的标签
MATCH (m:Movie)
REMOVE m:Picture
1.2.4、删除索引
DROP INDEX ON :Customer (name)
1.2.5、删除UNIQUE约束
DROP CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
1.3、修改
1.3.1、添加或更新属性值
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
1.4、查询
MATCH 查询不能单独使用,配和return,表示返回
#查询所有节点
MATCH (n) return n
# 查询Dept下的内容
MATCH (dept:Dept) return dept
1.4.1、条件查询
# 查询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
# 查询Employee标签下name="Lokesh"和id=123的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh" AND p.id=123
RETURN p
支持:AND、OR、NOT、XOR,=、 <>、 >、 <、 >=、 <=;
1.4.2、排序
# 默认升序
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
1.4.3、合并
结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
MATCH (cc:CreditCard) RETURN cc.id,cc.number
UNION
MATCH (dc:DebitCard) RETURN dc.id,dc.number
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
1.4.4、分页
MATCH (emp:Employee)
RETURN emp
LIMIT 2
MATCH (emp:Employee)
RETURN emp
SKIP 2
MATCH (n) RETURN n SKIP 2 LIMIT 2
1.4.5、判空
MATCH (e:Employee)
WHERE e.id IS NOT NULL
RETURN e.id,e.name,e.sal,e.deptno
MATCH (e:Employee)
WHERE e.id IS NULL
RETURN e.id,e.name,e.sal,e.deptno
1.4.6、IN范围查询
MATCH (e:Employee)
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno
2、CQL函数
2.1、字符串函数
2.1.1、转大写
MATCH (e:Employee)
RETURN e.id,UPPER(e.name),e.sal,e.deptno
2.1.2、转小写
MATCH (e:Employee)
RETURN e.id,LOWER(e.name),e.sal,e.deptno
2.1.3、截取字符串
MATCH (e:Employee)
RETURN e.id,SUBSTRING(e.name,0,2),e.sal,e.deptno
2.2、聚合
2.2.1、计数
MATCH (e:Employee) RETURN COUNT(*)
2.2.2、最大/小值
MATCH (e:Employee)
RETURN MAX(e.sal),MIN(e.sal)
2.2.3、求和/平均值
MATCH (e:Employee)
RETURN SUM(e.sal),AVG(e.sal)
2.3、关系函数
2.3.1、开始/结束节点
# 关系的开始节点。
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN STARTNODE(movie)
# 关系的结束节点。
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ENDNODE(movie)
2.3.2、打印ID和关系类
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ID(movie),TYPE(movie)