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



select id, title
from movie
where yr=1962;select yr
from movie
where title='Citizen Kane';select id, title, yr
from movie
where title like '%Star Trek%'
order by yr;select id
from actor
where name='Glenn Close';select id
from movie
where title='Casablenca';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. 将某个电影中的全部演员列出来
select name
from actor
join casting on actor.id=casting.actorid
where movieid=11768;Alien这个演员的cast list
select name
from actor
join casting on actor.id=casting.actorid
where movieid = (select movie.id
from movie
where title='Alien');笔记:列出这个演员出现的所有电影。 movie 和actor两个表是没有直接联系的,只能通过casting表的actorid字段来进行搭桥
select title
from movie
join casting on movie.id = casting.movieid
where actorid = (select id
from actor
where name='Harrison Frod');列出该演员出现但不是主演(ord=1)的电影
select title
from movie
join casting on movie.id=casting.movieid
where actorid = (select id
from actor
where name='Harrison Ford')
and ord != 1;笔记:列出1962年的所有电影和主演名字
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;找出该演员的电影数目大于2的年份
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;找出JA演员参加的电影和主演
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'))解题步骤
找出至少当过15次主角(ord,casting表)的演员名字name(actor) 按照名字的字母排序
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;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找出和AG合作的全部演员
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';