SQL学习记录(三)
包含 SELECT from Nobel、子查詢
文章目录
3.1、利用諾貝爾獎的表格,再練習基本SQL功能。



DESC 是降序(从新到旧),ASC 是升序(从 A 到 Z,可省略,默认升序)

这一题有点难,认真学
3.2、測驗:諾貝爾獎
- 選擇代碼以顯示以C開頭,並以n結束獲獎者的名字。

- 選擇代碼以顯示1950年到1960年間有多少個化學獎。

- 選擇代碼以顯示有多少年沒有頒發醫學獎。

- 選擇你會從這個代碼獲得的結果。

5. 選擇代碼以顯示哪一年沒有頒發物理獎,亦沒有頒發化學獎。
- 選擇代碼以顯示哪一年有頒發醫學獎,但沒有頒發和平或文學獎。

- 選擇你會從這個代碼獲得的結果。


4.1、如何使用子查詢
很简单的指令介绍,没有题目
4.2、SELECT中的SELECT練習
1、列出每个国家的名字name,当中人口population是高于俄罗斯’Russia’的人口。
SELECT name FROM world
WHERE population >
(SELECT population FROM world
WHERE name='Russia')
列出欧州每国家的人均GDP,当中人均GDP要高于英国’United Kingdom’的数值。
SELECT name FROM world
WHERE GDP/population>(SELECT GDP/population FROM world WHERE name='United Kingdom')
AND continent='Europe'
在阿根廷Argentina及澳大利亚Australia所在的洲份中,列出当中的国家名字name及洲分continent。 按国字名字顺序排序
SELECT name,continent
FROM world
WHERE continent IN (SELECT continent FROM world WHERE name IN ('Argentina','Australia'))
ORDER BY name;
这题逻辑要认真辨认,还有学会IN(‘’) 、LIKE ''函数的区别;按照顺序排序用ORDER BY 语句
哪一个国家的人口比加拿大Canada的多,但比波兰Poland的少? 列出国家名字name和人口population 。
SELECT name,population FROM world
WHERE population BETWEEN (SELECT population FROM world WHERE name='Canada') AND (SELECT population FROM world WHERE name='Poland')
AND NAME NOT IN('Canada','Poland')
显示欧洲的国家名称name和每个国家的人口population。 以德国的人口的百分比作人口显示。
SELECT
name,
CONCAT(ROUND(population/(SELECT population FROM world WHERE name='Germany') *100,0),'%') AS percentage
FROM world
WHERE continent='Europe';
注意事项1、如果把整个计算式写成了字符串
在 SQL 中,单引号 ’ ’ 内的内容就是纯文本,不会计算其中的 population 字段,也不会执行子查询。
你得到的输出会类似:“population/(SELECT population FROM world WHERE
name=‘Germany’) *100%”,而不是一个数值。
'population/(SELECT population FROM world WHERE name='Germany') *100'
注意事项2、AS 关键字用于为列(或表)创建一个临时的别名。你问的 AS percentage 就是将前面计算出的结果列命名为 percentage。
哪些国家的GDP比Europe欧洲的全部国家都要高呢? [只需列出 name 。 ] (有些国家的记录中,GDP是NULL,没有填入资料的。 )
SELECT name
FROM world
WHERE gdp >= ALL(SELECT gdp
FROM world
WHERE gdp>0 AND continent='Europe')
AND continent!='Europe'
在每一个州中找出最大面积的国家,列出洲份continent,国家名字name及面积area。 (有些国家的记录中,AREA是NULL,没有填入资料的。 )
SELECT continent, name, area FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE x.continent=y.continent AND area>0)
world x:将 world 表重命名为 x,代表主查询中的表。
world y:在子查询中,再次引用 world 表并重命名为 y。使用两个别名是因为需要在子查询中区分主查询的当前行(x)和子查询遍历的行(y)。它们实际上是同一张表,但逻辑上视为两个独立的副本。
列出洲份名称,和每个洲份中国家名字按子母顺序是排首位的国家名。 (即每洲只有列一国)
SELECT continent, name FROM world x
WHERE name<=ALL(SELECT name FROM world y
WHERE y.continent=x.continent)
困难的题目(早前练习没有包含的技巧)
找出洲份,当中全部国家都有少于或等于 25000000 人口. 在这些洲份中,列出国家名字name,continent 洲份和population人口。
SELECT name,continent,population FROM world
WHERE continent IN(SELECT continent FROM world
GROUP BY continent
HAVING MAX(population)<=25000000
)
有些国家的人口是同洲份的所有其他国的3倍或以上。 列出 国家名字name 和 洲份 continent。
SELECT name,continent FROM world x
WHERE population>=ALL(SELECT population*3 FROM world y
WHERE x.continent=y.continent
AND x.name<>y.name
)
4.3、諾貝爾獎:子查詢
紅十字國際委員會 (International Committee of the Red Cross) 曾多次獲得和平獎。 試找出與紅十字國際委員會同年得獎的文學獎(Literature)得獎者和年份。
SELECT winner,yr FROM nobel
where yr IN (SELECT yr FROM nobel
WHERE winner= 'International Committee of the Red Cross'
)
AND subject='Literature'
日本物理學家益川敏英 (Toshihide Maskawa) 曾獲得物理獎。同年還有兩位日本人一同獲得物理獎。試列出這2位日本人的名稱。
select winner
from nobel
where yr IN(select yr from nobel where winner= 'Toshihide Maskawa')
and subject='Physics'
and winner<>'Toshihide Maskawa'
首次頒發的經濟獎 (Economics)的得獎者是誰?
select winner
from nobel
where yr=(select MIN(yr) from nobel where subject='Economics')
and subject='Economics'
哪幾年頒發了物理獎,但沒有頒發化學獎?
select distinct yr
from nobel
where yr in (select yr from nobel where subject='Physics')
and yr not in(select yr from nobel where subject='Chemistry')
哪幾年的得獎者人數多於12人呢? 列出得獎人數多於12人的年份,獎項和得獎者。
SELECT yr, subject, winner
FROM nobel
WHERE (yr, subject) IN (
SELECT yr, subject
FROM nobel
GROUP BY yr, subject
HAVING COUNT(winner) > 12
)
ORDER BY yr, subject, winner;
这题用二元,认真看一下
哪些得獎者獲獎多於1次呢?他們是哪一年獲得哪項獎項呢? 列出他們的名字,獲獎年份及獎項。先按名字,再按年份順序排序。
SELECT winner,yr,subject
FROM nobel
WHERE winner in( SELECT winner
FROM nobel
GROUP BY winner
HAVING count(winner)>1
)
ORDER BY winner,yr
4.4、子查詢測驗
- 選擇代碼以顯示在每個區域人口最小的國家的國家名稱,區域和人口。

- 選擇代碼以顯示國家名稱,該國所在的地區每國人口都超過50000。

- 選擇代碼以顯示國家名稱,該國家人口少於它周圍的全部國家的人口三分之一。



4. 選擇代碼以顯示國家名稱,該國有比非洲任何國家更大的國內生產總值GDP。

6. 選擇代碼以顯示國家名稱,該國人口比俄羅斯少,但比丹麥的多。



得分:
5.1、總和SUM 及 總計COUNT








5.2、諾貝爾獎的更多練習

列出每一個獎項(subject), 只列一次





















SQLZOO答案&spm=1001.2101.3001.5002&articleId=160151594&d=1&t=3&u=c1664cc6492d49ee8ab29348e783ac58)
4313

被折叠的 条评论
为什么被折叠?



