1a. 列出获得不少于30000 votes(选票)的电影. [显示 title, votes]
SELECT title, votes
FROM movie
WHERE votes>=30000
1b. 电影\'Citizen Kane\'的首映年份.
SELECT yr FROM movie WHERE title=\'Citizen Kane\'
1c. 列出包含the Police Academy(警校)字样的title(电影名称)和 score(得分) films.
SELECT title, score FROM movie
WHERE title LIKE \'Police Academy%\'
1d. 列出所有the Star Trek movies(星际系列电影),显示title(电影标题)和score(得分). 按电影的发行 yr(年份)排序.
SELECT title, score FROM movie
WHERE title LIKE \'Star Trek%\'
ORDER BY yr
1e. 列出名称中包含\'Dog\'的电影名和得分.
SELECT title, score FROM movie
WHERE title LIKE \'%Dog%\'
2a. 列出id为 1, 2, 3的电影的名称.
SELECT title FROM movie WHERE id IN (1,2,3)
2b. 电影\'Glenn Close\' 的ID号是多少?
SELECT id FROM actor WHERE name= \'Glenn Close\'
2c. 电影\'Casablanca\' 的ID号是多少?
SELECT id FROM movie WHERE title=\'Casablanca\'
上面几道题基本上是对之前的知识做个回顾。下面正式进入多表连接
3a. 显示id=1的电影\'Star Wars\'(星球大战)中演员(角色)名单.
SELECT name
FROM casting, actor
WHERE movieid=1
AND actorid=actor.id
3b. 显示电影\'Alien\'的演员(角色)名单 .
SELECT name
FROM movie, casting, actor
WHERE title=\'Alien\'
AND movieid=movie.id
AND actorid=actor.id
这道题将三张表连接起来。表movie和actor是多对多的关系,因此需要一张角色表casting来连接他们,那么他们分别和casting都是一对多的关系,通过外键来进行联系。
3c. 显示有\'Harrison Ford\'参演的电影名称.
SELECT title
FROM movie, casting, actor
WHERE name=\'Harrison Ford\'
AND movieid=movie.id
AND actorid=actor.id
3d. 显示有\'Harrison Ford\'参演的电影名称,但\'Harrison Ford\'在该影片中不是主角(即在角色表中不是排名第一)
SELECT title
FROM movie, casting, actor
WHERE name=\'Harrison Ford\'
AND movieid=movie.id
AND actorid=actor.id
AND ord>1
这道题又加上了个ord>1的条件,也就是说列出不是主角的电影名。
3e. 显示1962年发行的电影以及该影片中主角(即在角色表中排名第一)
SELECT title, name
FROM movie, casting, actor
WHERE yr=1962
AND movieid=movie.id
AND actorid=actor.id
AND ord=1
下面几道题稍微有点难度。
4a. \'John Travolta\'哪一年最忙? 显示出他每年的出演电影数量.
SELECT yr, COUNT(movie.id)
FROM movie, casting, actor
WHERE name=\'John Travolta\'
AND movieid=movie.id
AND actorid=actor.id
GROUP BY yr
这道题除了连接表之外,还加上了分组。
4b. 列出有\'Julie Andrews\'参演的所有电影名称以及该片的主角.
SELECT title, name
FROM movie, casting, actor
WHERE movieid=movie.id
AND actorid=actor.id
AND ord=1
AND movieid IN
(SELECT movieid FROM casting, actor
WHERE actorid=actor.id
AND name=\'Julie Andrews\')
这道题要复杂点。在分析这道题的时候,首先应该从大范围开始考虑,也就是说先将表连接起来后,过滤掉所有没有Julie Andrews\'参与的电影,然后再加上显示出该电影主角这一条件。
4c. 列出那些最起码在10部电影中出任过主角的演员.
SELECT name
FROM casting JOIN actor
ON actorid = actor.id
WHERE ord=1
GROUP BY name
HAVING COUNT(movieid)>=10
4d. 按演员人数的多少依次列出1978 的电影以及演员数.人数最多排在最前.
SELECT title, COUNT(actorid)
FROM casting, movie
WHERE yr=1978
AND movieid=movie.id
GROUP BY title
ORDER BY 2 DESC
这里2表示查询出来的表中第二列字段
4e. 列出所有和\'Art Garfunkel\'合作过的演员(不要列出\'Art Garfunkel\'他自己).
SELECT DISTINCT name
FROM actor, casting
WHERE actorid=actor.id
AND movieid IN (
SELECT movieid FROM casting, actor
WHERE actorid=actor.id
AND name=\'Art Garfunkel\'
)
AND NOT name=\'Art Garfunkel\'

SELECT title, votes
FROM movie
WHERE votes>=30000
1b. 电影\'Citizen Kane\'的首映年份.
SELECT yr FROM movie WHERE title=\'Citizen Kane\'
1c. 列出包含the Police Academy(警校)字样的title(电影名称)和 score(得分) films.
SELECT title, score FROM movie
WHERE title LIKE \'Police Academy%\'
1d. 列出所有the Star Trek movies(星际系列电影),显示title(电影标题)和score(得分). 按电影的发行 yr(年份)排序.
SELECT title, score FROM movie
WHERE title LIKE \'Star Trek%\'
ORDER BY yr
1e. 列出名称中包含\'Dog\'的电影名和得分.
SELECT title, score FROM movie
WHERE title LIKE \'%Dog%\'
2a. 列出id为 1, 2, 3的电影的名称.
SELECT title FROM movie WHERE id IN (1,2,3)
2b. 电影\'Glenn Close\' 的ID号是多少?
SELECT id FROM actor WHERE name= \'Glenn Close\'
2c. 电影\'Casablanca\' 的ID号是多少?
SELECT id FROM movie WHERE title=\'Casablanca\'
上面几道题基本上是对之前的知识做个回顾。下面正式进入多表连接
3a. 显示id=1的电影\'Star Wars\'(星球大战)中演员(角色)名单.
SELECT name
FROM casting, actor
WHERE movieid=1
AND actorid=actor.id
3b. 显示电影\'Alien\'的演员(角色)名单 .
SELECT name
FROM movie, casting, actor
WHERE title=\'Alien\'
AND movieid=movie.id
AND actorid=actor.id
这道题将三张表连接起来。表movie和actor是多对多的关系,因此需要一张角色表casting来连接他们,那么他们分别和casting都是一对多的关系,通过外键来进行联系。
3c. 显示有\'Harrison Ford\'参演的电影名称.
SELECT title
FROM movie, casting, actor
WHERE name=\'Harrison Ford\'
AND movieid=movie.id
AND actorid=actor.id
3d. 显示有\'Harrison Ford\'参演的电影名称,但\'Harrison Ford\'在该影片中不是主角(即在角色表中不是排名第一)
SELECT title
FROM movie, casting, actor
WHERE name=\'Harrison Ford\'
AND movieid=movie.id
AND actorid=actor.id
AND ord>1
这道题又加上了个ord>1的条件,也就是说列出不是主角的电影名。
3e. 显示1962年发行的电影以及该影片中主角(即在角色表中排名第一)
SELECT title, name
FROM movie, casting, actor
WHERE yr=1962
AND movieid=movie.id
AND actorid=actor.id
AND ord=1
下面几道题稍微有点难度。
4a. \'John Travolta\'哪一年最忙? 显示出他每年的出演电影数量.
SELECT yr, COUNT(movie.id)
FROM movie, casting, actor
WHERE name=\'John Travolta\'
AND movieid=movie.id
AND actorid=actor.id
GROUP BY yr
这道题除了连接表之外,还加上了分组。
4b. 列出有\'Julie Andrews\'参演的所有电影名称以及该片的主角.
SELECT title, name
FROM movie, casting, actor
WHERE movieid=movie.id
AND actorid=actor.id
AND ord=1
AND movieid IN
(SELECT movieid FROM casting, actor
WHERE actorid=actor.id
AND name=\'Julie Andrews\')
这道题要复杂点。在分析这道题的时候,首先应该从大范围开始考虑,也就是说先将表连接起来后,过滤掉所有没有Julie Andrews\'参与的电影,然后再加上显示出该电影主角这一条件。
4c. 列出那些最起码在10部电影中出任过主角的演员.
SELECT name
FROM casting JOIN actor
ON actorid = actor.id
WHERE ord=1
GROUP BY name
HAVING COUNT(movieid)>=10
4d. 按演员人数的多少依次列出1978 的电影以及演员数.人数最多排在最前.
SELECT title, COUNT(actorid)
FROM casting, movie
WHERE yr=1978
AND movieid=movie.id
GROUP BY title
ORDER BY 2 DESC
这里2表示查询出来的表中第二列字段
4e. 列出所有和\'Art Garfunkel\'合作过的演员(不要列出\'Art Garfunkel\'他自己).
SELECT DISTINCT name
FROM actor, casting
WHERE actorid=actor.id
AND movieid IN (
SELECT movieid FROM casting, actor
WHERE actorid=actor.id
AND name=\'Art Garfunkel\'
)
AND NOT name=\'Art Garfunkel\'