SQL学习记录(三)SQLZOO答案

SQL学习记录(三)

包含 SELECT from Nobel、子查詢



SELECT from nobel
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1、利用諾貝爾獎的表格,再練習基本SQL功能。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

这一题有点难,认真学

3.2、測驗:諾貝爾獎

  1. 選擇代碼以顯示以C開頭,並以n結束獲獎者的名字。
    在这里插入图片描述
  2. 選擇代碼以顯示1950年到1960年間有多少個化學獎。
    在这里插入图片描述
  3. 選擇代碼以顯示有多少年沒有頒發醫學獎。
    在这里插入图片描述
  4. 選擇你會從這個代碼獲得的結果。
    在这里插入图片描述在这里插入图片描述5. 選擇代碼以顯示哪一年沒有頒發物理獎,亦沒有頒發化學獎。
  5. 選擇代碼以顯示哪一年有頒發醫學獎,但沒有頒發和平或文學獎。
    在这里插入图片描述
  6. 選擇你會從這個代碼獲得的結果。
    在这里插入图片描述
    在这里插入图片描述

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、子查詢測驗

  1. 選擇代碼以顯示在每個區域人口最小的國家的國家名稱,區域和人口。
    在这里插入图片描述
  2. 選擇代碼以顯示國家名稱,該國所在的地區每國人口都超過50000。
    在这里插入图片描述
  3. 選擇代碼以顯示國家名稱,該國家人口少於它周圍的全部國家的人口三分之一。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
4. 選擇代碼以顯示國家名稱,該國有比非洲任何國家更大的國內生產總值GDP。
在这里插入图片描述
6. 選擇代碼以顯示國家名稱,該國人口比俄羅斯少,但比丹麥的多。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得分:在这里插入图片描述

5.1、總和SUM 及 總計COUNT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2、諾貝爾獎的更多練習

在这里插入图片描述
列出每一個獎項(subject), 只列一次
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SQL学习记录(四)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值