http://sqlzoo.net/wiki/The_nobel_table_can_be_used_to_practice_more_subquery./zh
nobel( yr,subject, winner)?
Chemistry 化學(xué)獎(jiǎng)
Economics 經(jīng)濟(jì)獎(jiǎng)
Literature 文學(xué)獎(jiǎng)
Medicine 醫(yī)學(xué)獎(jiǎng)
Peace 和平獎(jiǎng)
Physics 物理獎(jiǎng)
1.
紅十字國(guó)際委員會(huì)(International Committee of the Red Cross) 曾多次獲得和平獎(jiǎng)。 試找出與紅十字國(guó)際委員會(huì)同年得獎(jiǎng)的文學(xué)獎(jiǎng)(Literature)得獎(jiǎng)?wù)吆湍攴荨?/p>
SELECT WINNER,YRFROM nobel
WHERESUBJECT='Literature'AND YR in (Select yr from nobel where winner='InternationalCommittee of the Red Cross' and subject='peace')
說(shuō)明:先求出紅十字會(huì)獲和平獎(jiǎng)的時(shí)間“yr”;然后根據(jù)這個(gè)時(shí)間求出得文學(xué)獎(jiǎng)的winner。
語(yǔ)句【Select yr
from nobel where sunject=’peacr’and winner='International Committee of the Red
Cross'】得出紅十字會(huì)獲和平獎(jiǎng)的時(shí)間,此處結(jié)果顯示為多個(gè)數(shù)據(jù),因?yàn)樾枰x用函數(shù)in()。
2.
日本物理學(xué)家益川敏英(Toshihide Maskawa) 曾獲得物理獎(jiǎng)。同年還有兩位日本人一同獲得物理獎(jiǎng)。試列出這2位日本人的名稱(chēng)。
Select distinctwinner from nobel
Wheresubject='Physics'
and yr in (Selectyr from nobel where winner='Toshihide Maskawa'and subject='Physics') andwinner!='Toshihide Maskawa'
說(shuō)明:先查詢(xún)出winner“Toshihide Maskawa”獲得物理獎(jiǎng)的時(shí)間yr,此處得出一組數(shù)據(jù),且此數(shù)據(jù)可能為重復(fù)。所以用函數(shù)IN()。
根據(jù)原題意,在求出時(shí)間YR后,用去重函數(shù)distinct()得出所有獲獎(jiǎng)人姓名,并且排除
Toshihide Maskawa。
3.
首次頒發(fā)的經(jīng)濟(jì)獎(jiǎng)(Economics)的得獎(jiǎng)?wù)呤钦l(shuí)?
SELECT WINNER FROMnobel where yr=
(SELECT YR FROMnobel WHERE SUBJECT='Economics'
ORDER BY YR
LIMIT 1) ANDSUBJECT='Economics'
說(shuō)明:
先求出首次頒發(fā)經(jīng)濟(jì)獎(jiǎng)的時(shí)間,再根據(jù)時(shí)間得出winner,此處首次頒獎(jiǎng)時(shí)間的值僅為一個(gè),但是獲獎(jiǎng)?wù)遷inner可能有多個(gè)數(shù)值。
Order by 按照時(shí)間排序(默認(rèn)從小到大升序排序)可得出所有頒獎(jiǎng)時(shí)間,limit 1則可得出首次頒獎(jiǎng)時(shí)間。
4.
哪幾年頒發(fā)了物理獎(jiǎng),但沒(méi)有頒發(fā)化學(xué)獎(jiǎng)?
SELECT DISTINCT YR FROM nobel
WHERE SUBJECT='Physics' AND YR NOT IN(SELECT YR FROMnobel where subject='Chemistry')
說(shuō)明:使用去重函數(shù)distinct();根據(jù)題意,所求時(shí)間YR必須獲得了物理獎(jiǎng),但是沒(méi)有化學(xué)獎(jiǎng),語(yǔ)句SELECT YR FROM nobel where subject='Chemistry'得出獲得化學(xué)獎(jiǎng)的時(shí)間,使用否定含義的函數(shù) NOT IN則可以滿(mǎn)足沒(méi)有獲得化學(xué)獎(jiǎng)的時(shí)間。
5.
哪幾年的得獎(jiǎng)?wù)呷藬?shù)多於12人呢? 列出得獎(jiǎng)人數(shù)多於12人的年份,獎(jiǎng)項(xiàng)和得獎(jiǎng)?wù)摺?/p>
select * fromnobel
where yr in(SELECTYR FROM nobel GROUP BY YR HAVING COUNT(WINNER)>12)
說(shuō)明:
語(yǔ)句SELECT YR
FROM nobel GROUP BY YR HAVING COUNT(WINNER)>12意為按照時(shí)間yr分組且人數(shù)超過(guò)12人的時(shí)間年份“yr”。count()意為對(duì)獲獎(jiǎng)?wù)遷inner進(jìn)行計(jì)數(shù)。
6.
哪些得獎(jiǎng)?wù)攉@獎(jiǎng)多於1次呢?他們是哪一年獲得哪項(xiàng)獎(jiǎng)項(xiàng)呢?列出他們的名字,獲獎(jiǎng)年份及獎(jiǎng)項(xiàng)。先按名字,再按年份順序排序。
Selectwinner,yr,subject From nobel
Where winnerin(Select winner
From nobel
Group by winner
Havingcount(winner)>1)
Order by winner,yr