見出し画像

【SQLZOO答え】7.More JOIN operations

SQL入門を勉強するため、友人にSQLの練習問題ないかと聞いたら、
SQLZOO】というサイトを教えてもらいました。
ただし、問題を解いてるうちに、わからない問題に関して、クエリの答えがおらず、結果しか教えてくれないので、答えをアウトプットしようと思い、noteを始めました。 

0.SQLZOO練習問題

More JOIN operations

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

※問題を攻略でき次第、随時更新いたします。

この記事が気に入ったらサポートをしてみませんか?