%%%%% Page 6: Exercise 1 %%%%%

MATCH (m:MOVIE {id: "medvidek"})
RETURN m, m.title;

MATCH (m:MOVIE)
  WHERE m.id = "medvidek"
RETURN m, m.title;

%%%%% Page 7: Exercise 2 %%%%%

MATCH (a:ACTOR)
  WHERE a.year >= 1965
RETURN a.name, a.year 
  ORDER BY a.year DESC, a.name ASC;

MATCH (a:ACTOR)
  WHERE a.year >= 1965
RETURN a.name, a.year 
  ORDER BY a.year DESCENDING, a.name ASCENDING;

MATCH (a:ACTOR)
  WHERE a.year >= 1965
RETURN a.name, a.year 
  ORDER BY a.year DESCENDING, a.name;

%%%%% Page 8: Exercise 3 %%%%%

MATCH (:ACTOR {name: "Jiri Machacek"})<-[:PLAY]-(n:MOVIE)
RETURN n.title;

MATCH (n:MOVIE)-[:PLAY]->(:ACTOR {name: "Jiri Machacek"})
RETURN n.title;

MATCH (n:MOVIE)-[:PLAY]->(a:ACTOR)
  WHERE a.name = "Jiri Machacek"
RETURN n.title;

MATCH (:ACTOR {name: "Jiri Machacek"})<--(n:MOVIE)
RETURN n.title;

MATCH (:ACTOR {name: "Jiri Machacek"})--(n:MOVIE)
RETURN n.title;

MATCH (a:ACTOR {name: "Jiri Machacek"})
MATCH (n:MOVIE)-[:PLAY]->(a)
RETURN n.title;

MATCH (a:ACTOR {name: "Jiri Machacek"}), (n:MOVIE)-[:PLAY]->(a)
RETURN n.title;

%%%%% Page 9: Exercise 4 %%%%%

MATCH (m:MOVIE)-[:PLAY]->(:ACTOR)
RETURN DISTINCT m;

MATCH (m:MOVIE)
  WHERE SIZE( (m)-[:PLAY]->(:ACTOR) ) >= 1
RETURN m;

MATCH (m:MOVIE)
  WHERE EXISTS( (m)-[:PLAY]->(:ACTOR) )
RETURN m;

MATCH (m:MOVIE)
  WHERE (m)-[:PLAY]->(:ACTOR)
RETURN m;

MATCH (m:MOVIE)
WITH m, SIZE( (m)-[:PLAY]->(:ACTOR) ) AS actors
  WHERE actors >= 1
RETURN m;

MATCH (m:MOVIE)-[:PLAY]->(a:ACTOR)
WITH m, COUNT(a) as actors
  WHERE actors >= 1
RETURN m;

MATCH (m:MOVIE)-[:PLAY]->(a:ACTOR)
WITH m, COUNT(a) as actors
RETURN m;

MATCH (m:MOVIE), (a:ACTOR)
  WHERE (m)-[:PLAY]->(a)
RETURN DISTINCT m;

%%%%% Page 10: Exercise 5 %%%%%

MATCH
  (s:ACTOR {name: "Ivan Trojan"})
    <-[:PLAY]-(m:MOVIE)-[:PLAY]->
  (a:ACTOR)
RETURN DISTINCT a;

MATCH
  (s:ACTOR {name: "Ivan Trojan"})<-[:PLAY]-(m:MOVIE),
  (m)-[:PLAY]->(a:ACTOR)
RETURN DISTINCT a;

MATCH (s:ACTOR {name: "Ivan Trojan"})<-[:PLAY]-(m:MOVIE)
MATCH (m)-[:PLAY]->(a:ACTOR)
  WHERE a <> s
RETURN DISTINCT a;

MATCH (s:ACTOR {name: "Ivan Trojan"})<-[:PLAY]-(m:MOVIE)
MATCH (m)-[:PLAY]->(a:ACTOR)
  WHERE a.name <> "Ivan Trojan"
RETURN DISTINCT a;

MATCH (a:ACTOR)
  WHERE
    (a)<-[:PLAY]-(:MOVIE)-[:PLAY]->(:ACTOR {name: "Ivan Trojan"})
RETURN a;

%%%%% Page 11: Exercise 6 %%%%%

MATCH (s:ACTOR {name: "Ivan Trojan"})-[:KNOW *]-(a:ACTOR)
  WHERE s <> a
RETURN DISTINCT a.name;

MATCH (s:ACTOR {name: "Ivan Trojan"})-[:KNOW *1..]-(a:ACTOR)
  WHERE s <> a
RETURN DISTINCT a.name;

MATCH (a:ACTOR)
  WHERE
    EXISTS( (a)-[:KNOW *]-(:ACTOR {name: "Ivan Trojan"}) )
    AND
    (a.name <> "Ivan Trojan")
RETURN a.name;

%%%%% Page 12: Exercise 7 %%%%%

MATCH (m:MOVIE)
OPTIONAL MATCH (m)-[:PLAY]->(a:ACTOR)
RETURN m.title, a.name;

%%%%% Page 13: Exercise 8 %%%%%

MATCH (m:MOVIE)
WITH m, SIZE( (m)-[:PLAY]->(:ACTOR) ) AS actors
WITH AVG(actors) AS average
MATCH (m:MOVIE)
  WHERE SIZE( (m)-[:PLAY]->(:ACTOR) ) > average
MATCH (m)-[:PLAY]->(a:ACTOR)
WITH DISTINCT a
RETURN a.name;

MATCH (m:MOVIE)
OPTIONAL MATCH (m)-[:PLAY]->(a:ACTOR)
WITH m, COUNT(a) AS actors
WITH AVG(actors) AS average
MATCH (m:MOVIE)
  WHERE SIZE( (m)-[:PLAY]->(:ACTOR) ) > average
MATCH (m)-[:PLAY]->(a:ACTOR)
WITH DISTINCT a
RETURN a.name;