-
Notifications
You must be signed in to change notification settings - Fork 0
/
7_more_join.sql
113 lines (98 loc) · 3.5 KB
/
7_more_join.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
-- This exercise uses three tables:
-- movie (id, title, yr, director, budget, gross)
-- actor (id, name)
-- casting (movieid, actorid, ord)
-- 1. List the films where the yr is 1962
SELECT id, title
FROM movie
WHERE yr = 1962;
-- 2. Give year of 'Citizen Kane'
SELECT yr
FROM movie
WHERE title = 'Citizen Kane';
-- 3. List all of the Star Trek movies
SELECT id, title, yr
FROM movie
WHERE title LIKE '%star trek%'
ORDER BY yr;
-- 4. What id number does the actor 'Glenn Close' have?
SELECT id
FROM actor
WHERE name = 'Glenn Close';
-- 5. What is the id of the film 'Casablanca'
SELECT id
FROM movie
WHERE title = 'Casablanca';
-- 6. Obtain the cast list for 'Casablanca'
SELECT actor.name
FROM actor
JOIN casting ON actor.id = casting.actorid
JOIN movie ON casting.movieid = movie.id
WHERE movieid = 11768;
-- 7. Obtain the cast list for the film 'Alien'
SELECT actor.name
FROM actor
JOIN casting ON casting.actorid = actor.id
JOIN movie ON movie.id = casting.movieid
WHERE movie.title = 'Alien';
-- 8. List the films in which 'Harrison Ford' has appeared
SELECT movie.title
FROM movie
JOIN casting ON casting.movieid = movie.id
JOIN actor ON actor.id = casting.actorid
WHERE actor.name = 'Harrison Ford';
-- 9. List the films where 'Harrison Ford' has appeared - but not in the starring role
SELECT movie.title
FROM movie
JOIN casting ON casting.movieid = movie.id
JOIN actor ON actor.id = casting.actorid
WHERE actor.name = 'Harrison Ford' AND
casting.ord != 1;
-- 10. List the films together with the leading star for all 1962 films
SELECT DISTINCT movie.title, actor.name
FROM movie
JOIN casting ON casting.movieid = movie.id
JOIN actor ON actor.id = casting.actorid
WHERE movie.yr = 1962 AND
casting.ord = 1;
-- 11. Which were the busiest years for 'Rock Hudson',
-- 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 casting.movieid = movie.id
JOIN actor ON actor.id = casting.actorid
WHERE name='Rock Hudson'
GROUP BY yr
HAVING COUNT(title) > 2;
-- 12. List the film title and the leading actor for all of the films 'Julie Andrews' played in
SELECT movie.title, actor.name
FROM movie
JOIN casting ON (casting.movieid = movie.id AND casting.ord = 1)
JOIN actor ON actor.id = casting.actorid
WHERE movie.id IN (SELECT movieid FROM casting
WHERE actorid IN (SELECT id FROM actor
WHERE name = 'Julie Andrews'));
-- 13. Obtain a list, in alphabetical order, of actors who've had at least 15 starring roles
SELECT actor.name
FROM actor
JOIN casting ON casting.actorid = actor.id
WHERE casting.ord = 1
GROUP BY casting.actorid
HAVING COUNT(casting.actorid) >= 15
ORDER BY actor.name;
-- 14. List the films released in the year 1978 ordered by the number of actors in the cast, then by title
SELECT movie.title, COUNT(casting.actorid) AS num_of_actors
FROM movie
JOIN casting ON casting.movieid = movie.id
JOIN actor ON casting.actorid = actor.id
WHERE movie.yr = 1978
GROUP BY movie.title
ORDER BY num_of_actors DESC, movie.title;
-- 15. List all the people who have worked with 'Art Garfunkel'
SELECT actor.name
FROM actor
JOIN casting ON actor.id = casting.actorid
WHERE casting.movieid IN (SELECT movieid FROM casting
WHERE actorid = (SELECT id FROM actor WHERE name = 'Art Garfunkel'))
HAVING actor.name != 'Art Garfunkel';