【SQLZOO答え】7.More JOIN operations
SQL入門を勉強するため、友人にSQLの練習問題ないかと聞いたら、
【SQLZOO】というサイトを教えてもらいました。
ただし、問題を解いてるうちに、わからない問題に関して、クエリの答えがおらず、結果しか教えてくれないので、答えをアウトプットしようと思い、noteを始めました。
0.SQLZOO練習問題
1.1962 映画
1962 年の映画のリストを表示( id と title を表示)
select
id, title
from
movie
where
yr=1962;
2.「市民ケーン」の上映年は?
'Citizen Kane'の年を示す。
select
yr
from
movie
where
title = 'Citizen Kane';
3.スタートレック映画
スタートレック('Star Trek')というシリーズ映画のリストを表示( id title yr )。 年の順に掲載。
select
id, title, yr
from
movie
where
title like '%Star Trek%'
order by
yr;
4.グレン・クローズのid
女優 'Glenn Close' の id ナンバーは何ですか?
select
id
from
actor
where
name='Glenn Close' ;
5.カサブランカのid
映画 'Casablanca' カサブランカの id は何ですか?
select
id
from
movie
where
title= 'Casablanca' ;
6.カサブランカの出演者リスト
映画カサブランカの出演リスト(name)を出力する。'Casablanca'
出演リストとは?
movieid=11768を使う。 (または、これまでの問題で得た値を何でも使ってよい)
select
name
from
actor a
join
casting c
on
a.id=c.actorid
where
movieid = (select id
from movie
where title = 'Casablanca');
7.エイリアンの出演リスト
映画「エイリアン」'Alien'の出演者リストを表示。
select
name
from
actor a
join
casting c
on
a.id=c.actorid
where
movieid = (select id
from movie
where title = 'Alien');
8.ハリソン=フォード映画
'Harrison Ford' ハリソン=フォードが出演した映画のリストを表示する。
select
title
from
movie m
join
casting c
on
m.id=c.movieid
where
actorid = (select id
from actor
where name = 'Harrison Ford');
9.ハリソン=フォード共演
'Harrison Ford'ハリソン=フォードが出演した映画で、彼が主演していない(ord <> 1) のリストを表示。
[Note: ord は、映画の出演リスト順、1 が主演を意味する。]
select
title
from
movie m
join
casting c
on
m.id=c.movieid
where
actorid = (select id
from actor
where name = 'Harrison Ford')
and ord <> 1;
10.1962映画の主演者
1962年の全映画を、そのタイトルと主演と併記してリスト表示。
select
title, name
from
movie m
join
casting c
on c.movieid=m.id
join
actor a
on c.actorid=a.id
where
yr=1962 and ord=1
11.ジョン=トラボルタが多忙の年
'John Travolta' ジョン=トラボルタが最も忙しかった年はいつですか? その年と出演した映画の本数を表示する。
彼が2本より多く出演した各年について表示する。
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) >2;
12.ジュリー=アンドリューズ出演映画
'Julie Andrews' ジュリー=アンドリューズが出演した映画について、主演した役者の名前を調べ、その全てについて タイトル と 主演 を表示する。
"Little Miss Marker twice"は2回得られましたか?
Julie Andrews は Little Miss Marker の1980 年のリメイクに主演したが、オリジナル(1934)ではしていない。
Title はユニークフィールドではない。サブクエリーでidのテーブルを作成する。
select
title, name
from
movie m, casting c, actor a
where
c.movieid=m.id
and c.actorid=a.id
and ord=1
and movieid in (select movieid
from casting, actor
where actorid=actor.id
and name='Julie Andrews')
13.主演30本の役者達
少なくとも30タイトル以上に主演した役者の名前をアルファベット順に掲載。
select
name
from
casting c
join
actor a
on
c.actorid = a.id
where
ord=1
group by
name
having
count(movieid)>=30;
14.1978年の映画を、出演者数が多い順に、タイトルを表示。
select
title, count(actorid)
from
casting, movie
where
yr=1978
and movieid=movie.id
group by title
order by 2 desc,1 asc;
15.'Art Garfunkel' アート=ガーファンクルと一緒に仕事をした人々をすべて表示。
select
distinct(a1.name)
from
actor a1
join
casting c1
on (c1.actorid=a1.id)
join
casting c2
on (c1.movieid=c2.movieid)
join
actor a2
on (c2.actorid=a2.id
and a2.name='Art Garfunkel')
where a1.id<>a2.id
その他の答へ
0.SELECT basics
1.SELECT name
2.SELECT from World
3.SELECT from Nobel
4.SELECT within SELECT
5.SUM and COUNT
6.JOIN
7.More JOIN operations
8.Using Null
8+ Numeric Examples
9.Self join
10.Tutorial Quizzes
11.Tutorial Student Records
12.Tutorial DDL
※問題を攻略でき次第、随時更新いたします。
この記事が気に入ったらサポートをしてみませんか?