前言

本文章记录sqlzoo刷题过程以及解题思路,每个小节不仅包含练习,还有选择题(quiz)部分的实现思路
网址:sqlzoo

一、代码输入

  1. 更改查詢以顯示1950年諾貝爾獎的獎項資料

查询结果包含哪些列——全部
有什么条件——年份1950
查询逻辑——选择表所有列,年份=1950

SELECT *FROM nobelWHERE yr = 1950
  1. .顯示誰贏得了1962年文學獎(Literature)

查询结果列——获奖者
条件——
1、年份:1962
2、学科:文学奖
3、注意where中多个条件用and连接,不是逗号。
查询逻辑——选择全表的winner列,年份=1962,学科=文学奖

select winner
from nobel
where yr=1962 and subject='Literature'
  1. 顯示“愛因斯坦”(‘Albert Einstein’) 的獲獎年份和獎項。

查询结果列——年份,奖项
条件——获奖者:爱因斯坦
查询逻辑——选择表yr,subject列,winner=爱因斯坦

select yr,subject
from nobel
where winner='Albert Einstein'
  1. 顯示2000年及以後的和平獎(‘Peace’)得獎者。

查询结果列——获奖者
条件——
1、年份:>=2000
2、奖项:和平奖
查询逻辑——选择全表的winner列,yr>=2000,奖项=和平奖

select winner
from nobel
where yr>=2000 and subject='Peace'
  1. 顯示1980年至1989年(包含首尾)的文學獎(Literature)獲獎者所有細節(年,主題,獲獎者)。

查询结果列——全部
条件——
1、年份:[1980,1989]
2、奖项:文学奖
查询逻辑——选择全表的列,年份用between…and…代表时间范围,奖项=文学奖

select *
from nobel
where yr between 1980 and 1989 and subject='Literature'
  1. 顯示總統獲勝者的所有細節:
    西奧多•羅斯福 Theodore Roosevelt
    伍德羅•威爾遜 Woodrow Wilson
    吉米•卡特 Jimmy Carter

查询结果列——全部
条件——获奖者:三个人(使用in关键字,表示在这个范围内的人都符合条件)
查询逻辑——选择表所有列,winner in()

SELECT * FROM nobelWHERE winner IN ('Theodore Roosevelt','Woodrow Wilson','Jimmy Carter')
  1. 顯示名字為John 的得獎者。 (注意:外國人名字(First name)在前,姓氏(Last name)在後)

查询结果列——获奖者
条件——获奖者:名字以John开头*(like+通配符)*
查询逻辑——选择表的winner列,名字 like ’%‘

select winner
from nobel
where winner like'John%'
  1. 顯示1980年物理學(physics)獲獎者,及1984年化學獎(chemistry)獲得者。

查询结果列——获奖者
条件——
1、1980年+物理学
2、1984年+化学奖
3、只要满足其中一个条件的就要选择,用or关键字
查询逻辑——选择nobel表的全部列,(条件1) or (条件2).
##因为两个条件并不是同时要满足的,所以用or连接分别筛选,并且要有括号

select *
from nobel
where (yr=1980 and subject='physics')or (yr=1984 and subject='chemistry')
  1. 查看1980年獲獎者,但不包括化學獎(Chemistry)和醫學獎(Medicine)。

查询结果列——获奖者
条件——
1、年份:1980
2、奖项:无化学奖/医学奖
思路1:查询nobel表中winner列,年份=1980 + 奖项 not in(化学奖和医学奖)
思路2:首先查询表所有1980年的winner,再查询其中包括了化学奖或者医学奖的winner者,除去这些winner。(利用了子查询,sql写的时候是从逻辑后部分往前部分写的)

思路1:
select *
from nobel
where yr=1980and subject not in ('Chemistry','Medicine')思路2:
select winner
from nobel
where yr=1980and winner not in (select winner from nobelwhere subject='Chemistry'or subject='Medicine')
  1. 顯示早期的醫學獎(Medicine)得獎者(1910之前,不包括1910),及近年文學獎(Literature)得獎者(2004年以後,包括2004年)。

查询结果列——全部
条件——
1、年份<1910 and 学科=醫學獎
2、年份>=2004 and 学科=文學獎
3、只要满足其中一个条件的就要选择,用or关键字
查询逻辑——选择l表所有列,(条件1)or (条件2)。实际上是将得奖者分成两个群体,并列选择

select *
from nobel
where (subject='Medicine'and yr<1910)or (subject='Literature'and yr>=2004)
  1. 查询获奖者为PETER GRÜNBERG的信息

查询结果列——全部
条件——获奖者
查询逻辑——选择全表的列,winner=PETER GRÜNBERG

select *
from nobel
where winner='PETER GRÜNBERG'
  1. 查找尤金•奧尼爾EUGENE O’NEILL得獎的所有細節

与上题思路一致,区别是这个人名带了单引号。sql中字符串中使用两单引号替代单引号,直接用人名是不行的。

SELECT *
FROM nobel
WHERE winner = 'EUGENE O''NEILL'

14.列出爵士的獲獎者、年份、獎頁(爵士的名字以Sir開始)。先顯示最新獲獎者,然後同年再按名稱順序排列。

查询结果列——全部
理一下所有的条件——
1、获奖者:以Sir开头*(like+通配符)*
2、最新获奖者*(获奖年份晚的排在前面,即倒序)*
3、排序:条件有2个,优先等级分别为:获奖时间>名称*(默认正序)*
4、考虑到多条件排序后表格的美观,所以表格列的呈现应该是获奖者>获奖时间->学科查询逻辑——选择表所有列,筛选是winner中Sir开头的人员。筛选之后需要排序。

select winner,yr,subject
from nobel
where winner like 'Sir%'
order by yr desc,winner
  1. 显示1984年的获奖者和按主题和获奖者姓名排序的主题;但出化学和物理列在最后。

查询结果列——全部
条件——
1、时间:1984
2、排序:主题(化学和物理在最后,其他正常),获奖者姓名
3、化学和物理在排名最后如何实现?——利用布尔表达式主题 in(化学,物理)
#表示不满足条件为false,即0,满足为true,即1。排序的时候按照升序排列就可以达到1在后面的效果了。(但是这段代码在sqlzoo中运行总是提示"IN有错误"我也不知道为什么!)
查询逻辑——选择nobel表中的获奖者,主题,yr=1984,排序为学科>获奖者,其中学科设置布尔表达式

select winner,subject
from nobel
where yr=1984
order by case when subject in ('Physics','Chemistry') then 1 else 0 end asc ,subject,winner

二、测验详解

这部分都是选择题,但笔者认为自己动手写也可以作为一个好的练习

  1. 選擇代碼以顯示以C開頭,並以n結束獲獎者的名字。

查询结果列——获奖者
条件——c开头,且n结尾,二者缺一不可
查询逻辑——选择全表winner列,winner like’%’

select winner
from nobel
where winner like 'c%' and winner like '%n'
或者
select winner
from nobel
where winner like 'c%%n'(需要验证下可不可行,#待补充)
  1. 選擇代碼以顯示1950年到1960年間有多少個化學獎。

查询结果列——奖项数*(使用count函数生成新列)*
条件——
1、年份:[1950,1960](between…and…)
2、奖项:化学奖
查询逻辑——生成计数列,筛选年份,奖项

select count(subject)
from norbel
where yr between 1950 and 1960and subject='Chemistry'
  1. 選擇代碼以顯示有多少年沒有頒發醫學獎。

查询结果列——年份(不重复,distinct)
条件——没有颁布医学奖的年份=将颁布了医学奖的年份除外(not in)
查询逻辑:先查询出记录中所有的年份,再将颁布了医学奖的年份剔除(写代码是的时候是从后往前写的)

select count(distinct yr)
from nobel
where yr not in (select yrfrom nobelwhere subject ='Medicine')
  1. 選擇你會從這個代碼獲得的結果。
SELECT subject, winner
FROM nobel
WHERE winner LIKE 'Sir%' AND yr LIKE '196%'

这段代码的解释:选择名字中Sir开头且获奖年份以196开头的获奖者及其奖项

  1. 選擇代碼以顯示哪一年沒有頒發物理獎,亦沒有頒發化學獎

查询结果列——年份(不重复)
条件——
年份:无物理奖&无化学奖=(有物理奖/化学奖其一,不满足)
查询逻辑:先查询所有颁发诺贝尔奖项的年份,剔除其中包含物理奖或化学奖的年份(sql写的时候是从后往前写)

select yr
from nobel
where yr not in (select yr,from nobelwhere subject in ('Chemistry','Physics'))
  1. 選擇代碼以顯示哪一年有頒發醫學獎,但沒有頒發和平或文學獎。

查询结果列——年份
条件——
1、奖项:医学奖
2、奖项:无和平奖/文学奖=(有和平奖/文学奖其一,不满足)(or 关键字)
查询思路:筛选出颁布了医学奖的年份,剔除其中颁布和平奖或文学奖的年份

select distinct yr
from nobel
where subject='Medicine' and yr not in (select yrfrom nobelwhere subject in ('Literature','Literature'))
写法2:
SELECT DISTINCT yrFROM nobelWHERE subject='Medicine' AND yr NOT IN(SELECT yr FROM nobel WHERE subject='Literature')AND yr NOT IN (SELECT yr FROM nobelWHERE subject='Peace')
  1. 選擇你會從這個代碼獲得的結果。
 SELECT subject, COUNT(subject) FROM nobel WHERE yr ='1960' GROUP BY subject

解释:查询1960年颁布的奖项及其数量

sqlzoo刷题——select from nobel(诺贝尔获奖查询)相关推荐

  1. sqlzoo刷题——select from world(世界经济查询)

    前言 本文章记录sqlzoo刷题过程以及解题思路,每个小节不仅包含练习,还有选择题(quiz)部分的实现思路 网址:sqlzoo_select from world 一.代码练习部分 world 表: ...

  2. SQLZOO刷题笔记

    SQLZOO刷题笔记-更新中 注意 Self Join 10. 公交车的转车站点 Window functions 0. 排序 1. warming up 2. Who won? 3. PARTITI ...

  3. sqlzoo刷题——SUM and COUNT(聚合函数)

    前言 本文章记录sqlzoo刷题过程以及解题思路,每个小节不仅包含练习,还有选择题(quiz)部分的实现思路 网址:sqlzoo_SUM and COUNT 一.代码练习部分 展示世界的總人口. 查询 ...

  4. sqlzoo刷题记录

    话不多说了,今天我要把SQL zoo一顿暴刷!Today is the day! 搞他 附上链接:Welcome to SQL Zoo 一.SELECT from WORLD Tutorial tab ...

  5. 『百日百题 · SQL篇』备战面试,坚持刷题(五)—— 多表查询

    本专栏『百日百题』长期更新,一起加入本刷题计划,一起成长吧!

  6. sqlzoo刷题(部分题目含解题思路)

    1.concat函数用法 (1)12.The capital of Mexico is Mexico City. Show all the countries where the capital ha ...

  7. sqlzoo刷题笔记-02 | SUM and COUNT

    网址:https://sqlzoo.net/wiki/SUM_and_COUNT 1.Show the total population of the world. 显示世界总人口数. SELECT ...

  8. SQLZOO刷题记录5——SUM and COUNT

    World Country Profile: Aggregate functions(世界国家概况:综合功能) 题目7:Counting big countries in each continent ...

  9. sql里查询一个组和组的用户数怎么查?_【牛客网SQL刷题】留存率怎么算?

    抽空刷了牛客网SQL实战72题,最后几道以牛客网为例的题目还挺有挑战性,在此记录 统计时间段新用户次日留存率 每日的次日留存率 每日的新用户数 每日新用户的次日留存 求新登录用户次日留存 表login ...

最新文章

  1. Angularjs相关文章地址
  2. 新功能抢先看!Windows 11 2022 版全新 ISO 镜像来了+下载
  3. mongodb分片概念和原理-实战分片集群
  4. python实现多语言语种识别_用Python进行语言检测
  5. 如何检测mysql语法的手册_您的SQL语法有错误;查看与MySQL对应的手册
  6. complexType
  7. matlab两张图片合成一张_MATLAB|多个Figure图按子图合成一个Figure
  8. SQL Server 2005全文索引(full text search)
  9. 2021-2027全球与中国Al2O3氧化铝陶瓷基板白板市场现状及未来发展趋势
  10. 工业互联网环境下的工业控制系统安全防护
  11. 流形上的预积分(下)
  12. golang 获取文件大小
  13. boss网人脸识别认证_老来网社保认证官网版app下载
  14. Qt Quick 渲染之 Scene Graph 详解
  15. Pytorch笔记:风格迁移
  16. 使用Basler相机SDK采集的显示图片
  17. html中outline属性,css 轮廓(outline)属性是如何使用的
  18. wps中ppt转html,wps ppt转换视频 dps转换ppt/ppt转视频的方法
  19. 食品检测实验室建设方案
  20. 【认证】JNCIE SP备战心得(大侠唐在飞)

热门文章

  1. 2017滴滴校招 数字和为sum的方法数(DP)
  2. 心电图心电轴怎么计算_心电轴的测量方法
  3. 战略变了 IBM服务器由产品到解决方案的转变
  4. 微信java精简版低内存_微信精简版低内存apk-微信精简版2019下载v7.0.6 安卓版-腾牛安卓网...
  5. python实现图像像素修改脚本
  6. ab.exe压力测试
  7. coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面amp;全新的3.0物理世界...
  8. 第九周项目三:星星图案(一)
  9. python可以引流吗_你都用 Python 来做什么?
  10. 电子计算机怎么按不了数字,计算器失灵按不出数字