Neo4j是一种图数据库,在查询时用到的语言也跟SQL不一样,下面就是一些我遇到的一些比较好的例题,我会分享我的代码和解答方式。
这些问题都是基于imdb电影数据集,并且每道题都有很多种查询思路,因此也有很多种查询代码,我只分享我的思路。
注:我的数据库关系图:
1. 构建数据库中所有文件的关系图:
解答:分两段进行,第一段先用create()函数来创建实体与实体件的联系,然后第二段用match()来运行。
create (a:imdb {name:“Movies”})
create (b:imdb {name:“Actors”})
create (c:imdb {name:“Directors”})
create (d:imdb {name:“Writers”})
create (e:imdb {name:“MoviesToActors”})
create (f:imdb {name:“MoviesToDirectors”})
create (g:imdb {name:“MoviesToWriters”})
create (h:imdb {name:“RunningTimes”})
create (i:imdb {name:“Rating”})
create (b)-[:Acted_In]->(e)
create ©-[:Directed]->(f)
create (d)-[:Wrote]->(g)
create (a)-[:Have]->(e)
create (a)-[:Have]->(f)
create (a)-[:Have]->(g)
create (a)-[:Run_In]->(h)
create (a)-[:Rated_In]->(i)
MATCH (N:imdb) RETURN N
2. 罗恩·霍华德(Ron Howard)执导了多少部电影?
解答:本题比较简单,只需在match电影与导演后,输入导演的名字即可。
MATCH(M:Movie)-[DIRECTED_BY]->(D:Director)
WHERE D.name CONTAINS ‘Howard, Ron’
RETURN count(DISTINCT M)as Ron_Howard_Films
3. 查询数据集中女性演员的人数和男性演员的人数。
解答:我们可以设两个类:maleNum和femaleNum,再用