match (e:Employee) WHERE e.age > 18 return e limit 10 match (e:Employee) WHERE e.age > 18 or e.id = 1 return e limit 10 match (c:customer),(cc:CreditCard) where c.id="1001" or cc.id="1" return c, cc
对已有的节点添加关系
1 2 3
match (c:customer),(cc:CreditCard) where c.id="1001" or cc.id="1" return c, cc
match (e:Employee), (cc:CreditCard) where e.name = "张三" and cc.id = "1" create (e)-[r:uses{shopdate:"2025/07/07", price: 6000}]->(cc) return r
-- 更新属性 match (b:Book) set b.title = "Neo4j实战笔记" return b
-- 添加属性 match(b:Book) set b.pages = 300 return b
ORDER BY
1 2 3
match(e:Employee) order by e.age asc return e
match(e:Employee) order by e.age desc return e
UNION | UNION ALL
1 2 3 4 5 6 7 8 9
-- UNION ALL match (e:Employee) where e.age > 20 return e UNION ALL match (e:Employee) where e.age >=18 and e.age <=20 return e
-- UNION match (e:Employee) where e.age > 18 return e.age as age UNION match (e:Employee) where e.age >=18 and e.age <=20 return e.age as age
SKIP | LIMIT 字句
1 2 3
match(e:Employee) order by e.age skip 0 limit 2 return e
match(e:Employee) return e limit 10
MERGE 命令
没有创建,有的话,不做任何操作
1 2 3 4
merge (u:User{id:2,name:"李四"}) -- Added 1 label, created 1 node, set 2 properties, completed after 11 ms. merge (u:User{id:2,name:"李四"}) -- (no changes, no records)
-- 合并查询结果 MATCH (p:Person) RETURN p.name AS name UNION MATCH (c:Company) RETURN c.name AS name
-- UNION ALL(包含重复) MATCH (p:Person {city: '北京'}) RETURN p.name UNION ALL MATCH (p:Person {city: '上海'}) RETURN p.name
UNION ALL - 并集(包含重复)
1 2 3 4 5 6
-- 包含重复的并集 MATCH (p:Employee) RETURN p.name UNION ALL MATCH (m:Manager) RETURN m.name
CASE - 条件表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
-- 简单 CASE MATCH (p:Person) RETURN p.name, CASE p.age WHEN 20 THEN '青年' WHEN 30 THEN '壮年' ELSE '其他' END AS age_group
-- 搜索 CASE MATCH (p:Person) RETURN p.name, CASE WHEN p.age < 30 THEN '青年' WHEN p.age < 50 THEN '中年' ELSE '老年' END AS age_group
WHEN - CASE 子句
1 2 3 4 5 6 7 8
-- 在 CASE 中使用 MATCH (p:Person) RETURN CASE WHEN p.salary > 50000 THEN '高收入' WHEN p.salary > 30000 THEN '中等收入' ELSE '低收入' END AS income_level
THEN - CASE 结果
1 2 3 4 5 6 7 8 9
-- CASE 的结果分支 MATCH (p:Person) RETURN CASE WHEN p.city = '北京' THEN '北方' WHEN p.city = '上海' THEN '东方' WHEN p.city = '广州' THEN '南方' ELSE '其他' END AS region
ELSE - CASE 默认值
1 2 3 4 5 6 7 8
-- CASE 的默认分支 MATCH (p:Person) RETURN CASE p.department WHEN 'IT' THEN '技术部' WHEN 'HR' THEN '人力资源部' ELSE '其他部门' END AS dept_name
END - CASE 结束
1 2 3 4 5 6 7 8 9
-- CASE 表达式结束 MATCH (p:Person) RETURN p.name, CASE WHEN p.age < 18 THEN '未成年' WHEN p.age < 60 THEN '成年人' ELSE '老年人' END AS age_category
6. 约束和索引关键字
CREATE CONSTRAINT - 创建约束
1 2 3 4 5 6 7 8
-- 唯一约束 CREATE CONSTRAINT unique_person_name FOR (p:Person) REQUIRE p.name IS UNIQUE
-- 节点键约束(企业版) CREATE CONSTRAINT node_key_person_id FOR (p:Person) REQUIRE (p.id) IS NODE KEY
-- 存在性约束(企业版) CREATE CONSTRAINT person_name_exists FOR (p:Person) REQUIRE p.name IS NOT NULL
DROP CONSTRAINT - 删除约束
1 2
-- 删除约束 DROP CONSTRAINT unique_person_name
CREATE INDEX - 创建索引
1 2 3 4 5 6 7 8
-- 创建单属性索引 CREATE INDEX person_name_index FOR (p:Person) ON (p.name)
-- 创建复合索引 CREATE INDEX person_city_age_index FOR (p:Person) ON (p.city, p.age)
-- 全文索引 CREATE FULLTEXT INDEX person_fulltext FOR (p:Person) ON EACH [p.name, p.description]
-- 查看查询计划 EXPLAIN MATCH (p:Person)-[:FRIEND]->(f) RETURN p.name, count(f)
PROFILE - 分析查询性能
1 2 3
-- 分析查询性能 PROFILE MATCH (p:Person)-[:FRIEND]->(f) RETURN p.name, count(f)
LOAD CSV - 加载 CSV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- 加载 CSV 文件 LOAD CSV WITH HEADERS FROM 'file:///persons.csv' AS row CREATE (:Person { name: row.name, age: toInteger(row.age), city: row.city })
-- 带转换的加载 LOAD CSV WITH HEADERS FROM 'file:///data.csv' AS row WITH row WHERE row.age IS NOT NULL CREATE (p:Person) SET p = row, p.age = toInteger(row.age), p.salary = toFloat(row.salary)
📊 所有关键字速查表
类别
关键字
描述
查询
MATCH
匹配图模式
查询
OPTIONAL MATCH
可选匹配
查询
WHERE
条件过滤
查询
RETURN
返回结果
查询
WITH
传递结果
查询
UNWIND
展开列表
查询
ORDER BY
排序
查询
SKIP
跳过记录
查询
LIMIT
限制数量
查询
DISTINCT
去重
数据
CREATE
创建
数据
MERGE
合并
数据
SET
设置属性
数据
REMOVE
移除属性/标签
数据
DELETE
删除
数据
DETACH DELETE
分离删除
模式
NOT
否定
模式
AND
与条件
模式
OR
或条件
模式
XOR
异或
模式
IN
包含
模式
STARTS WITH
开头匹配
模式
ENDS WITH
结尾匹配
模式
CONTAINS
包含
模式
REGEXP
正则
聚合
COUNT
计数
聚合
SUM
求和
聚合
AVG
平均
聚合
MIN
最小
聚合
MAX
最大
聚合
COLLECT
收集列表
函数
size()
大小
函数
labels()
标签列表
函数
type()
关系类型
函数
id()
ID
函数
properties()
属性
函数
nodes()
路径节点
函数
relationships()
路径关系
子查询
CALL
调用过程
子查询
YIELD
产生结果
子查询
UNION
并集
子查询
UNION ALL
并集(含重复)
条件
CASE
条件表达式
条件
WHEN
条件分支
条件
THEN
条件结果
条件
ELSE
默认值
条件
END
条件结束
约束
CREATE CONSTRAINT
创建约束
约束
DROP CONSTRAINT
删除约束
索引
CREATE INDEX
创建索引
索引
DROP INDEX
删除索引
事务
BEGIN
开始事务
事务
COMMIT
提交事务
事务
ROLLBACK
回滚事务
管理
SHOW
显示信息
管理
EXPLAIN
解释计划
管理
PROFILE
性能分析
导入
LOAD CSV
加载 CSV
🎯 最佳实践提示
性能优化
1 2 3 4 5 6
-- 使用索引字段 CREATE INDEX FOR (p:Person) ON (p.name) MATCH (p:Person) WHERE p.name = '张三' -- 快速
-- 避免全表扫描 MATCH (p:Person) WHERE p.age > 30 -- 慢,如果没有索引
批量操作
1 2 3 4
-- 使用 UNWIND 批量处理 WITH range(1, 1000) AS ids UNWIND ids AS id CREATE (:Person {id: id, name: 'User' + id})
避免笛卡尔积
1 2 3 4 5
-- 错误:可能产生笛卡尔积 MATCH (a:Person), (b:Person) -- 避免这样写
-- 正确:使用模式匹配 MATCH (a:Person)-[:FRIEND]->(b:Person)
内存管理
1 2 3 4
-- 使用 LIMIT 分批处理 MATCH (p:Person) WITH p LIMIT 1000 SET p.processed = true
使用参数
1 2 3 4
-- 参数化查询 :param name => '张三' MATCH (p:Person {name: $name}) RETURN p