Neo4j快速上手(2)CQL语法
CQL 语法
主要是如何操作,少讲概念。也有一些自己的理解,酌情观看。
第一次执行 CQL 命令
创建节点
CREATE (p:Person);
查询节点
MATCH (n) RETURN n;
我们已经完成创建节点,查询节点的操作。接下来讲述这些命令的含义。
CREATE
创建节点,相当于关系型数据库 INSERT。
CREATE (p:Person);
是刚才执行过的命令,意思是,创建一个节点 p,它的标签是 Person。p 是一个临时名称,Person 是它的类型。
这个语法类似于 Java 的Person p = new Person();
Person 标签不需要提前创建,它就像是 p 的一个特殊属性。
创建时指定属性:
CREATE (p:Person{name:"刘备",age:18});
查询节点,这个命令相当于 SELECT * FROM
,它会返回所有节点,稍后讲解该命令。先执行看看结果:
MATCH (n) RETURN n;
查询结果,有两个节点,一个是之前创建的空节点,一个是名称为“刘备”的节点,把鼠标移动到刘备上,可以看到下方的属性。
同时包含多个标签的节点:
CREATE (m:Person:Man)
MATCH
查询,相当于关系型数据库 SELECT,该关键字必须和 RETURN 一起用才能查询
下面的CQL,相当于SELECT * as p FROM Person
:
MATCH (p:Person) RETURN p;
只查询name属性:
MATCH (p:Person) RETURN p.name;
查询name=刘备的节点:
MATCH (p:Person{name:"刘备"}) RETURN p;
RETURN
必须和 MATCH 一起用,合在一起相当于 SELECT
WHERE
条件语句
查询name=刘备的节点:
MATCH (p:Person) WHERE p.name="刘备" RETURN p;
REMOVE
移除age属性(RETURN 不是必须的):
MATCH (p:Person) WHERE p.name="刘备" REMOVE p.age RETURN p;
移除标签(前边创建过这个有两个标签的节点):
MATCH (n:Person:Man) REMOVE n:Man RETURN n;
SET
添加/修改,属性
添加/修改age属性:
MATCH (p:Person) WHERE p.name="刘备" SET p.age=20 RETURN p;
ORDER BY
顺序:
MATCH (p:Person) RETURN p ORDER BY p.age;
倒序:
MATCH (p:Person) RETURN p ORDER BY p.age DESC;
UNION
联合,和MySQL相似,相同的列会被自动合并,查询字段必须对得上才能联合查询
两个相同的name,查询结果只有一列:
MATCH (p:Person) WHERE p.name = "刘备" RETURN p.name
UNION
MATCH (p:Person) WHERE p.name = "刘备" RETURN p.name
UNION ALL
联合查询,不会合并
不会合并的查询,结果有两列:
MATCH (p:Person) WHERE p.name = "刘备" RETURN p.name
UNION ALL
MATCH (p:Person) WHERE p.name = "刘备" RETURN p.name
LIMIT
查询前两行:
MATCH (p:Person) RETURN p LIMIT 2;
SKIP
跳过前两行:
MATCH (p:Person) RETURN p SKIP 2;
MERGE
如果不存在,创建
如果张飞不存在,创建:
MERGE (p:Person{name:"张飞"})
NULL
name不为空
MATCH (p:Person) WHERE p.name IS NOT NULL RETURN p;
name为空
MATCH (p:Person) WHERE p.name IS NULL RETURN p;
IN
MATCH (p:Person) WHERE p.name IN ["张飞", "刘备"] RETURN p;
ID
节点唯一标识
MATCH (n:Person) RETURN id(n);