neo4j图查询语言cypher中无处不在的笛卡尔积

一 什么是笛卡尔积

笛卡尔积可以说是关系型数据的一个重要理论基础,它的意思是将两个集合中的元素两两组合形成一个新的集合,数据库中的多种连接方式(什么自然连接、内连接、外连接)都是在笛卡尔积的基础上加上一些条件形成的。以前学数据库理论的时候碰到笛卡尔积真的是不明白怎么会有这么奇怪的东西,为什么突然冒出一个要把两个集合里面的元素两两组合这么个怪东西呢,看起来简单又笨又没用。后来在工作中写sql时遇到很多奇怪的问题,才发现了理论基础的重要性

二 neo4j中的笛卡尔积

neo4j使用cypher作为查询语言,cypher语言基本等于:模式+sql,其基本沿用了sql中的一些概念,当然其也传承下了sql中的笛卡尔积,可以说是无处不在,一不注意就会掉入其中如果没有想到就会出现很多奇怪的问题,下面就列出一些情况:

1 展开两个列表其结果为笛卡尔积

unwind [1,2,3,4] as x
unwind ['a','b','c','d'] as y
return x,y

这里返回的将是两个列表中元素的两两组合

2 多个with子查询的结果会以笛卡尔积的方式形成最终查询的结果

match (m:vertices) where m.id in [111,222,333]
with m
match (m:vertices) where m.id in [444,555,666]
with m,n
return m,n

这里会返回9条记录

3 match中的多个变量也是以笛卡尔积形式返回

match (m:vertices:{type:'a'}),(n:vertices{type:'b'})
return n;

你看这里虽然只是返回了n但是实际返回的记录条件是m的条数*n的条数,记录中会有很多重复的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值