Fork me on GitHub

sqlzoo练习12-more-join

sqlzoo练习12-More Join

This tutorial introduces the notion of a join. The database consists of three tablemovie, actorand casting .

more-join

练习-基础

  1. List the films where the yr is 1962 [Show id, title]
1
2
3
select id, title
from movie
where yr=1962;
  1. Give year of ‘Citizen Kane’.
1
2
3
select yr
from movie
where title='Citizen Kane';
  1. List all of the Star Trek movies, include the id, title and yr (all of these movies include the words Star Trek in the title). Order results by year.
1
2
3
4
select id, title, yr
from movie
where title like '%Star Trek%'
order by yr;
  1. What id number does the actor ‘Glenn Close’ have?
1
2
3
select id
from actor
where name='Glenn Close';
  1. What is the id of the film ‘Casablanca’
1
2
3
select id
from movie
where title='Casablenca';
  1. Obtain the cast list for ‘Casablanca’.

Use movieid=11768, (or whatever value you got from the previous question)

What is a cast list

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

将某个电影中的全部演员列出来

1
2
3
4
select name
from actor
join casting on actor.id=casting.actorid
where movieid=11768;
  1. Obtain the cast list for the film ‘Alien’

Alien这个演员的cast list

1
2
3
4
5
6
select name
from actor
join casting on actor.id=casting.actorid
where movieid = (select movie.id
from movie
where title='Alien');
  1. List the films in which ‘Harrison Ford’ has appeared

笔记:列出这个演员出现的所有电影。

movie 和actor两个表是没有直接联系的,只能通过casting表的actorid字段来进行搭桥

1
2
3
4
5
6
select title
from movie
join casting on movie.id = casting.movieid
where actorid = (select id
from actor
where name='Harrison Frod');
  1. 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]

列出该演员出现但不是主演(ord=1)的电影

1
2
3
4
5
6
7
select title
from movie
join casting on movie.id=casting.movieid
where actorid = (select id
from actor
where name='Harrison Ford')
and ord != 1;
  1. List the films together with the leading star for all 1962 films.

笔记:列出1962年的所有电影和主演名字

  • 主演:ord-casting表
  • 演员名字:name-actor表
1
2
3
4
5
6
select title, name
from movie
join casting on movie.id=casting.movieid
join actor on actor.id=casting.actorid
where yr=1962
and casting.ord = 1;
  1. 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.

找出该演员的电影数目大于2的年份

  • 演员name
  • 年份yr
  • 电影movie
1
2
3
4
5
6
7
select yr, count(title)   -- 统计电影数目
from movie
join casting on movie.id = movieid -- 联结顺序:movie---> casting---> actor
join actor on actorid = actor.id
where name = 'Rock Hudson' -- 通过两个连接将movie 和 actor表进行联结
group by yr
having count(title) > 2;
  1. List the film title and the leading actor for all of the films ‘Julie Andrews’ played in.

找出JA演员参加的电影和主演

1
2
3
4
5
6
7
8
9
select title, name   -- 找出电影和主演
from movie
join casting on (movieid=movie.id and ord=1) -- 3. 找出主演
join actor on (actorid=actor.id)
where movie.id in (select movieid -- 2.从1中选择出的全部演员中找出全部的电影movieid
from casting
where actorid in (select id -- 1. 找出JA参加的电影的全部演员actorid
from actor
where name='Julie Andrews'))

解题步骤

  1. 先找出JA参加的电影的全部演员actroid
  2. 找出上步中的演员参演的电影movieid
  3. 确定主演ord=1
  4. 找出电影和主演

  1. Obtain a list, in alphabetical order, of actors who’ve had at least 15 starring roles.

找出至少当过15次主角(ord,casting表)的演员名字name(actor)

按照名字的字母排序

1
2
3
4
5
6
select name
from actor
join casting on casting.actorid=actor.id
group by name
having sum(case ord when 1 then 1 else 0 end) >= 15 -- 当ord=1则计数1,sum求和
order by name;
  1. List the films released in the year 1978 ordered by the number of actors in the cast, then by title.
  • 1978年发行的电影
  • 根据电影中的演员数量进行排名
  • 再根据title排名
1
2
3
4
5
6
select title, count(*) as actorcount
from movie
join casting on movie.id = casting.movieid
where yr=1978
group by title
order by actorcount desc, title
  1. List all the people who have worked with ‘Art Garfunkel’.

找出和AG合作的全部演员

1
2
3
4
5
6
7
8
9
select name
from actor join casting
on casting.actorid=actor.id
where movieid in (select movieid -- 2. 筛选合作演员的电影
from casting
where actorid= (select id -- 1. 筛选和AG合作的演员id
FROM actor
WHERE name='Art Garfunkel'))
and name != 'Art Garfunkel';

本文标题:sqlzoo练习12-more-join

发布时间:2020年01月29日 - 21:01

原始链接:http://www.renpeter.cn/2020/01/29/sqlzoo%E7%BB%83%E4%B9%A012-more-join.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea