1. 程式人生 > >sqlzoo練習答案--More JOIN operations

sqlzoo練習答案--More JOIN operations

select id from movie where title='Casablanca'

7、

Obtain the cast list for 'Casablanca'.

what is a cast list?

The cast list is the names of the actors who were in the movie.

Use movieid=11768, this is the value that you obtained in the previous question.

select name from actor inner join casting on actor.id=casting.actorid and movieid=11768

8、Obtain the cast list for the film 'Alien'
select name from actor inner join movie on title='Alien' inner join casting on actor.id=casting.actorid and movie.id=casting.movieid

9、List the films in which 'Harrison Ford' has appeared
select title from movie inner join actor on name='Harrison Ford' inner join casting on movie.id=casting.movieid and actor.id=casting.actorid

10、List the films where 'Harrison Ford' has appeared - but not in the starring role. [Note: the ord field of casting gives the position of the actor. If ord=1 then this actor is in the starring role]
select title from movie inner join actor on name='Harrison Ford' inner join casting on movie.id=casting.movieid and actor.id=casting.actorid and ord!=1

11、List the films together with the leading star for all 1962 films.
select movie.title,actor.name from movie inner join actor on yr=1962 inner join casting on movie.id=casting.movieid and actor.id=casting.actorid and ord=1

12、Which were the busiest years for 'John Travolta', show the year and the number of movies he made each year for any year in which he made more than 2 movies.
SELECT yr,COUNT(title) FROM
  movie JOIN casting ON movie.id=movieid
         JOIN actor   ON actorid=actor.id
WHERE name='John Travolta'
GROUP BY yr
HAVING COUNT(title)=(SELECT MAX(c) FROM
(SELECT yr,COUNT(title) AS c FROM
   movie JOIN casting ON movie.id=movieid
         JOIN actor   ON actorid=actor.id
 WHERE name='John Travolta'
 GROUP BY yr) AS t
)

13、List the film title and the leading actor for all of the films 'Julie Andrews' played in.
SELECT DISTINCT(title),name FROM movie inner join casting on movie.id=movieid
inner join actor on actorid=actor.id and ord=1
WHERE movieid IN (
  SELECT t2.movieid FROM actor t1 inner join casting t2 on t2.actorid=t1.id and name='Julie Andrews')

14、Obtain a list, in alphabetical order, of actors who've had at least 30 starring roles.
SELECT name
    FROM casting JOIN actor
      ON  actorid = actor.id
    WHERE ord=1
    GROUP BY name
    HAVING COUNT(movieid)>=30

15、List the films released in the year 1978 ordered by the number of actors in the cast.
select title,count(actorid) from movie inner join casting on movie.id=movieid and yr=1978 group by title order by 2 desc

16、List all the people who have worked with 'Art Garfunkel'.
select name from actor inner join casting on actor.id=casting.actorid and casting.movieid in (select movieid from actor inner join casting on actor.id=casting.actorid and name='Art Garfunkel') and name!='Art Garfunkel'