More JOIN operations/zh

http://sqlzoo.net/wiki/More_JOIN_operations/zh


此教程練習表格合拼。數據庫有三個表格

movie電影(id編號, title電影名稱, yr首影年份, director導演,budget製作費, gross票房收入)

actor演員(id編號, name姓名)

casting角色(movieid電影編號,actorid演員編號, ord角色次序)

角色次序代表第1主角是1, 第2主角是2...如此類推.


1.   [endif]列出1962年首影的電影, [顯示id, title]

select movie.id, title

from movie

where yr='1962'


2.   [endif]電影大國民 'Citizen Kane' 的首影年份。

select yr

from movie

where title= 'Citizen Kane'


3.   [endif]列出全部Star Trek星空奇遇記系列的電影,包括id, title 和 yr(此系統電影都以Star Trek為電影名稱的開首)。按年份順序排列。

select movie.id,title,yr

from movie

where title like’ Star Trek%’

order by yr


4.   [endif]id是 11768, 11955, 21191 的電影是什麼名稱?

select title

from movie

where movie.id in(11768,11955, 21191)


5.   [endif]女演員'Glenn Close'的編號 id是什麼?

select actor.id

from actor

where name= 'Glenn Close’


6.   [endif]電影北非諜影'Casablanca' 的編號 id是什麼?

select movie.id

from movie

where title='Casablanca'


7.   [endif]列出電影北非諜影 'Casablanca'的演員名單。

select name

from actor join casting

on actor.id=casting.actorid

where movieid=11768


8.   [endif]顯示電影異型'Alien' 的演員清單。

select name

from actor join movie on title='Alien' join casting on movie.id=casting.movieid

and actor.id=casting.actorid


9.   [endif]列出演員夏里遜福 'Harrison Ford' 曾演出的電影。

select title

from movie join actor on name= 'Harrison Ford' joincasting on movie.id=casting.movieid and actor.id=casting.actorid


10. [endif]列出演員夏里遜福 'Harrison Ford' 曾演出的電影,但他不是第1主角。

select title

from movie join actor on name= 'Harrison Ford' joincasting on movie.id=casting.movieid and actor.id=casting.actorid and ord!=1


11.列出1962年首影的電影及它的第1主角。

select title,name

from movie join casting on yr=1962 and ord=1 join actoron movie.id=casting.movieid and actor.id=casting.actorid


12.尊·特拉华达'John Travolta'最忙是哪一年? 显示年份和该年的电影数目。

movie電影(id,title,yr, director, budget, gross)

actor演員(id, name)

casting角色(movieid,actorid,ord)

movie.id=casting.movieid

actor.id=casting.actorid

· 显示出有'JohnTravolta'出演的电影时间和电影的数量

select yr,count(title) AS C

from movie join actor on name='John Travolta'

join casting on casting.actorid=actor.id andcasting.movieid=movie.id

group by name,yr


· 显示出有'JohnTravolta'出演的电影时间和电影的数量最多的一年。

SELECT MAX(C) FROM

(select yr,count(title) AS C

from movie join actor on name='John Travolta'

join casting on casting.actorid=actor.id andcasting.movieid=movie.id

group by name,yr) as t

· 将语句合并后得出尊·特拉华达'John Travolta'最忙的年份和出演的电影数目。

select yr,count(title) AS C

from movie join actor on name='John Travolta'

join casting on casting.actorid=actor.id andcasting.movieid=movie.id

group by name,yr

having count(title)=( SELECT MAX(C) FROM

(select yr,count(title) AS C

from movie join actor on name='John Travolta'

join casting on casting.actorid=actor.id andcasting.movieid=movie.id

group by name,yr) as t)

或者,根据原题意,需要求出电影数目最大的值和年份。

SELECT yr,COUNT(title) FROM 

  movie JOINcasting ON movie.id=movieid 

         JOINactor   ON actorid=actor.id 

WHERE name='John Travolta' 

GROUP BY yr 

HAVING COUNT(title)=(SELECT MAX(c) FROM 

(SELECT yr,COUNT(title) AS c FROM 

   movie JOIN casting ON movie.id=movieid 

         JOIN actor   ON actorid=actor.id 

 WHERE name='John Travolta' 

 GROUP BY yr) AS t  ) 


其中显示出出演电影次数最多的语句为↓


SELECT MAX(c) FROM 

(SELECT yr,COUNT(title) AS c FROM 

   movie JOIN casting ONmovie.id=movieid 

         JOIN actor   ON actorid=actor.id 

 WHERE name='John Travolta' 

 GROUP BY yr)as t



13.列出演員茱莉·安德絲'Julie Andrews'曾參與的電影名稱及其第1主角。是否列了電影 "Little Miss Marker"兩次?

 

说明:1、首先求出演員茱莉·安德絲'Julie Andrews'出演过哪些电影(电影id,电影名称)。2、然后求出这些电影的第一主角是谁。

下列语句得出“1、”即茱莉·安德絲出演过哪些电影(以电影id显示。已知演员姓名,可从actor表中得出actor.id,联合表格casting可知movieid,根据movieid=movie.id进一步可知茱莉·安德絲'Julie Andrews'出演过电影名称。)

1、下列语句得出茱莉·安德絲'Julie Andrews'出演过的电影id,即表格casting中的movieid。

Select movieid

From casting join actor on name='Julie Andrews' and actor.id=casting.actorid

2、根据已出演过的电影id求出第一主角和电影名称。此处注意将电影名称去重。采用函数distinct(。)

Select distinct(title),name

From movie join casting on movieid=movie.id and ord=1

Join actor on actorid=actor.id

Where movieid in (Select movieid

From casting join actor on name='Julie Andrews' and actor.id=casting.actorid)

或者

SELECT DISTINCT(title),name FROM movie inner join casting onmovie.id=movieid 

inner join actor on actorid=actor.id and ord=1 

WHERE movieid IN ( 

  SELECT t2.movieid FROM actor t1inner join casting t2 on t2.actorid=t1.id and name='Julie Andrews') 


14.列出按字母順序,列出哪一演員曾作30次第1主角。

解题:原题要求出曾经30次担任第一主角的演员姓名。(1、先查询出所有担任第一主角的人,即按照姓名分类,依次列出出演过的电影id。2、然后当电影id超过30次即为担任过30次主角,此处是大于等于30次)

Select name

From casting join actor

On actorid=actor.id

Where ord=1

Group by name

Having count(movieid)>=30

Order by name


15.列出1978年首影的電影名稱及角色數目,按此數目由多至少排列。

解答:按照电影名称分组列出所有角色id,即字段名actorid(根据表格movie中的title 可以得出movie.id,则在表格casting中可知actorid)再进行计数并排序。

select title,count(actorid) as c

from movie join

casting on movie.id=casting.movieid

where yr=1978

group by title

order by c desc


16.列出曾與演員亞特·葛芬柯'Art Garfunkel'合作過的演員姓名。

·1、求出演員亞特·葛芬柯'Art Garfunkel'出演过的所有电影(电影id)

Selectmovieid from actor

Joincasting on actor.id=casting.actorid

Wherename='Art Garfunkel'

2、在这些电影id中查询出所有演员姓名,此处注意排除亞特·葛芬柯'Art Garfunkel'自己的名字,采用不等于公式“!= ”。

selectname from actor

Joincasting on actor.id=casting.actorid

Wheremovieid in(Select movieid from actor

Joincasting on actor.id=casting.actorid

Wherename='Art Garfunkel')

Andname!= 'Art Garfunkel'

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 超高速音视频编码器用法: ffmpeg [options] [[infile options] -i infile...
    吉凶以情迁阅读 4,406评论 0 4
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,102评论 0 10
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 1,207评论 0 7
  • 匆匆那年 花曾开过 留下的只是人生路 望那希望的田野 我心依凉 一个脚下一个印 仿佛路是那么长 永无止境 回过头来...
    诗语远方的温度阅读 256评论 0 0
  • 写字楼里似青楼,不许楼里有白头 文/宁国涛 今年五一节这天,大家有约会女小三或者男小三的,有独自国内、国外旅游的,...
    宁让职场更给力阅读 715评论 30 49