第2关——简单查询

case......end表达式

更正下面链接中做错过的题

SQLZOO:SELECT from WORLD Tutorial/zh​sqlzoo.net

参考答案链接地址:

第2关《从零学会SQL:简单查询》练习题答案​mp.weixin.qq.com

11题

SELECT name,
( CASE WHEN continent='Oceania' THEN 'Australasia'ELSE continent
END )
FROM world
WHERE name LIKE 'N%';

12题

select name,
(case
when continent in ('Europe', 'Asia') then 'Eurasia'
when continent in ('North America', 'South America', 'Caribbean') then 'America'
else continent
end) as  continent1
from world
where name like 'A%' or name like 'B%';

13题

select name, continent,
( case
when continent='Oceania' then 'Australasia'
when continent='Eurasia' then 'Europe/Asia'
when name='Turkey' then 'Europe/Asia'
when continent='Caribbean' and name like 'B%' then 'North America'
when continent='Caribbean' and name not like 'B%' then 'South America'
else continent
end ) as a
from world
order by name;

字符串模糊查询

更正下面链接中做错过的题

SELECT names/zh - SQLZOO​sqlzoo.net

参考答案链接地址:

https://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==&mid=501762555&idx=1&sn=1c57656162a01163135652fafc120e32&scene=19#wechat_redirect​mp.weixin.qq.com

11题

SELECT name
FROM world
WHERE name = capital;

12题

SELECT name
FROM world
WHERE capital = concat(name, ' City');

上面的代码中,字符串City前有空格

13题

select capital, name
from world
where capital like concat('%',name,'%');

14题

SELECT name, capital
FROM world
WHERE capital LIKE concat('%',name,'_%');

15题

select name,replace(capital, name, '')
from world
where capital Like concat(name,'%_%');

第3关——汇总分析

简单查询

更正下面链接中做错过的题

SELECT from Nobel Tutorial/zh​sqlzoo.net

参考答案链接地址:

https://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==&mid=501762573&idx=1&sn=3e4d24bc8c23f7d44d0473f074407e4c&scene=19#wechat_redirect​mp.weixin.qq.com

5题

/*
【知识点】比较运算符,逻辑运算符(and),括号里的有优先级
*/
select yr, subject, winner
from nobel
where (yr between 1980 and 1989) and subject = 'Literature';

8题

/*
【知识点】比较运算符,逻辑运算符(or)
*/
select yr, subject, winner
from nobel
where ( yr = 1980 and subject = 'physics' ) or ( yr = 1984 and subject = 'chemistry' );

12题

/*
跳脫字符:单引号
你不能把一个单引号直接的放在字符串中。但您可连续使用两个单引号在字符串中当做一个单引号。
*/
select *
from nobel
where winner = 'EUGENE O''NEILL';

13题

select winner, yr, subject
from nobel
where winner like 'Sir%'
order by yr desc, winner;

14题

/*
14.查找1984年获奖者和主题按主题和获胜者名称排序,
并把化学奖和物理奖排到最后面显示
之前sqlzoo网站这个是可以y运行正确的,但是现在网站可能出了问题,无法运行正确
理解这个sql就可以了
【知识点】运算符in
*/select winner, subject
from nobel
where yr=1984
order by subject in ('Physics','Chemistry'),subject,winner;

sql解释:
subject in ('Physics','Chemistry')返回值(0或者1),
会对每一个subject做一个if的判断,有的是1,没有的是0
再用order by把这些值排序在下面这两个科目('Physics','Chemistry')的就是0排在前边,
是这两个科目的返回1就排在后边了。
因为化学和物理科目题目要求在后面,所以引入此函数出现0、1,达成题目的要求

第3关——汇总分析

汇总分析

更正下面链接中做错过的题

SUM and COUNT/zh​sqlzoo.net

参考答案链接地址:

https://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==&mid=501762573&idx=1&sn=3e4d24bc8c23f7d44d0473f074407e4c&scene=19#wechat_redirect​mp.weixin.qq.com

2题

select continent
from world
group by continent;

7题

错误做法:

select continent, count(name)
from world
group by continent
having population > 10000000;

错误原因:

group by产生“临时表” 后,再对临时表进行 having过滤。此题中,world这个表按continent进行group by 后,population要用聚合函数来处理,因为一个continent里多个国家,也就有多个population,没用聚合函数,它就不知道你指的是哪个population。

正确做法:

select continent,count(name)
from world
where population>=10000000
group by continent;

错题总结:

group by分组之后的SQL执行语句中,必须使用聚合函数;

但有时不分组,却可以使用聚合函数,如下题:

select count( name )
from world
where area > 1000000;

第4关——复杂查询

子查询(标量、关联)

子查询(标量、关联)用括号框住,再进行算术、比较、逻辑运算。

更正下面链接中做错过的题

SELECT within SELECT Tutorial/zh​sqlzoo.net

参考答案链接地址:

https://mp.weixin.qq.com/s?__biz=MzAxMTMwNTMxMQ==&mid=501762673&idx=1&sn=d30b58f8c826c145c81bc0309452f6ef&scene=19#wechat_redirect​mp.weixin.qq.com

3题

SELECT NAME,continent
FROMworld
WHEREcontinent IN (( SELECT continent FROM world WHERE NAME = 'Argentina' ),( SELECT continent FROM world WHERE NAME = 'Australia' ))
ORDER BY NAME ASC;
# in 后面的括号中用逗号隔开单行单列的标量

另法:

select name, continent
from world
where continent in ( select continent from world where name='Argentina' or name='Australia')
order by name;
# 此解法中 in 后面的括号中的参数是多行单列的值
# 若子查询的结果是多行单列,结果集类似一个列,父查询使用IN运算符

5题

/*
concat函数实现字符串拼接,第一个参数不要求是字符串类型,第二个参数要求是字符串类型
round函数实现第一个数值类型参数的四舍五入,第二个参数(正数)代表精确到小数点后第几位
*/select name, concat(round(population /(select population from world where name='Germany')*100,0),'%')
from world
where continent = 'Europe';

6题

select name
from world
where gdp > all( select gdp from world where continent = 'Europe' and gdp > 0 );# gdp 中有空值,要增加筛选条件 gdp > 0

7题

错误做法:

SELECT  continent,name ,max( area )
FROM world
where area > 0
group by continent;

#  只有当某些字段单独分组时得到的结果一样时,才能联合分组
#  联合分组的好处是使select子句的字段不用聚合函数,以此回避不能对字段使用聚合函数的情况SELECT  continent, name ,max( area )
FROM world
where area > 0
group by continent, name;

# 分组之后,非分组列的列名全部要用聚合函数,否则报错SELECT  continent,count( name ) ,max( area )
FROM world
where area > 0
group by continent;

正确做法:

/*
【知识点】关联子查询
一般来说 先执行子查询,但关联子查询例外。有关联子查询时,先执行主查询再执行关联子查询。
*/SELECTcontinent,NAME,area
FROMworld AS x
WHEREarea = ( SELECT max( area ) FROM world AS y WHERE x.continent = y.continent );#  两张临时表x,y通过字段continent进行关联

8题

SELECTcontinent,
NAME
FROMworld AS x
WHERENAME <= ALL ( SELECT NAME FROM world AS y WHERE y.continent = x.continent );

9题

SELECT NAME,continent,population
FROMworld AS x
WHERE25000000 >= ALL ( SELECT population FROM world AS y WHERE y.continent = x.continent );

10题

错误做法:

SELECT NAME,continent
FROMworld AS x
WHEREpopulation >= 3 * ALL ( SELECT population FROM world AS y WHERE x.continent = y.continent );

正确做法:

SELECT NAME,continent
FROMworld AS x
WHEREpopulation > ALL ( SELECT 3 * population FROM world AS y WHERE y.continent = x.continent AND x.NAME <> y.NAME );

第5关——多表查询

多表查询

更正下面链接中做错过的题

The JOIN operation/zh​sqlzoo.net

参考答案链接地址:

第5关《从零学会SQL:多表查询》练习题答案​mp.weixin.qq.com

8题

/*
问题分析:
1)查找进球球员姓名,对战双方2)条件:有一个球队是德国(球队编号'GER'),被射入了球
*/SELECT DISTINCT b.player
FROMgame AS a INNER JOIN goal AS b ON a.id = b.matchid
WHERE( b.teamid = a.team1 AND a.team2 = 'GER' ) OR ( b.teamid = a.team2 AND a.team1 = 'GER');/*
1)解释下where子句中的条件:
主队是德国或者客队是德国,比如
德国 和 A对比赛(德国是主队),进球的是A队
A队和德国比赛(德国是客队),进球的是A队
所以条件是(b.teamid = a.team1 and a.team2 = 'GER') or (b.teamid = a.team2 and a.team1 = 'GER')2)内联结的结果中入门球员有重复值,用distinct去掉重复值
*/

9题

select c.teamname, count(c.teamname)
from eteam as c inner join goal as b on c.id=b.teamid
group by c.teamname;

group by分组之后的SQL执行语句中,非分组列的列名全部要用聚合函数,否则报错;但有时不分组,却可以使用聚合函数

11题

错误解法:

select a.id,a.mdate, count(b.player)
from game as a inner join goal as b on a.id = b.matchid
where (team1 = 'POL' or team2 = 'POL')
group by a.id;

错误原因:

group by分组之后的SQL执行语句中,非分组列的列名全部要用聚合函数,否则报错;但有时不分组,却可以使用聚合函数

正确解法一:

利用联合分组,使select子句的字段不用聚合函数,以此回避不能对字段使用聚合函数的情况

#  只有当某些字段单独分组时得到的结果一样时,才能联合分组
#  联合分组的好处是使select子句的字段不用聚合函数,以此回避不能对字段使用聚合函数的情况select a.id,a.mdate, count(b.player)
from game as a inner join goal as b on a.id = b.matchid
where (team1 = 'POL' or team2 = 'POL')
group by a.id, a.mdate;

正确解法二:

利用子查询与多表连接,将需要用的字段从少到多一一串起来

SELECT x.`賽事編號`, y.mdate, x.`入球數字`
FROM
( SELECTa.id as `賽事編號`,count( b.player ) as `入球數字`
FROMgame AS aINNER JOIN goal AS b ON a.id = b.matchid
WHERE( team1 = 'POL' OR team2 = 'POL' )
GROUP BYa.id ) as x INNER JOIN game AS y ON x.`賽事編號` = y.id;

12题

#  只有当某些字段单独分组时得到的结果一样时,才能联合分组
#  联合分组的好处是使select子句的字段不用聚合函数,以此回避不能对字段使用聚合函数的情况select a.id,a.mdate,count(player)
from game as a inner join goal as b on a.id=b.matchid
where b.teamid='GER'
group by a.id,a.mdate;

13题

#  只有当某些字段单独分组时得到的结果一样时,才能联合分组
#  联合分组的好处是使select子句的字段不用聚合函数,以此回避不能对字段使用聚合函数的情况SELECTa.mdate,a.team1,sum( CASE WHEN a.team1 = b.teamid THEN 1 ELSE 0 END ) AS score1,a.team2,sum( CASE WHEN a.team2 = b.teamid THEN 1 ELSE 0 END ) score2
FROMgame AS aLEFT JOIN goal AS b ON a.id = b.matchid
GROUP BYa.id,a.mdate,a.team1,a.team2
ORDER BYa.mdate,a.id,a.team1,a.team2;

.net 获取字符串中的第一个逗号的位置_SQLZOO中做错过的题相关推荐

  1. .net 获取字符串中的第一个逗号的位置_用EXCEL合并同列字符串

    =IF(B2=B1,"",MID(SUBSTITUTE(PHONETIC(OFFSET($B$1,MATCH(B2,$B$2:$B$114,),0,COUNTIF($B$2:$B$ ...

  2. php找出字符串不同地方,PHP中比较两个字符串找出第一个不同字符位置例子

    PHP中比较两个字符串找出第一个不同字符位置例子 一般的做法就会这样: 复制代码 代码如下: for ($offset = 0; $offset < $length; ++$offset) { ...

  3. java获取字符串某个标点第二次出现的位置,并截取这个标点后面的字符串

    问题:获取字符串中第二个逗号后面的字符串. 例如:"1128,2013,508,630,99,146",截取后:"508,630,99,146" 思路:利用两次 ...

  4. 5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...

    简介 ES6中除了上篇文章讲过的语法新特性和一些新的API之外,还有两个非常重要的新特性就是Promise和Generator,今天我们将会详细讲解一下这两个新特性. Promise 什么是Promi ...

  5. php获取字符串长度函数strlen和mb_strlen

    php获取字符串长度函数strlen和mb_strlen count() - 计算数组中的单元数目,或对象中的属性个数 strlen - 获取字符串长度,一个汉字为3个字符 mb_strlen() - ...

  6. python输出宽度是什么意思_方法、格式字符串和指定的Python对象输出宽度,python,中,格式化,及...

    count()方法:返回字符串对象包含了多少个参数指定的字符串 find方()法:在字符串中查找参数字符串,并返回该参数字符串在其中第一个出现的位置索引 split()方法:以参数字符串为分割符,将字 ...

  7. Eclipse中创建第一个窗口程序

      之前在VS中用C#做程序开发时,做的最多的是Winform窗口.现在学习在Eclipse中用java编程序,也希望尽快学习如何写窗口程序,但是在选择Eclipse做开发工具的时候就听说Eclips ...

  8. c语言中的下标变量是什么,c语言中数组的下标从什么开始?

    c语言中数组的下标从0开始. 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示. 例如:a[0]就表示名字为a的 ...

  9. 从富文本(html字符串)中获取图片,js获取富文本中的第一张图片(正则表达式)

    js获取富文本中的第一张图片url正则公式及去除字符串里面的html标签 后台发来一个富文本字符串里面可能包含了0.1.2.3-个图片标签(img),我们的任务是获取这个字符串里面第一张图片的url, ...

最新文章

  1. 香河php程序员_失控的香河最流行的四大职位
  2. Activiti工作流的应用示例
  3. phpcms文件结构
  4. ArangoDB Foxx service 使用
  5. signature=efaf25d07c6ea03d7552906c0caee5a8,幼児の認知発達における関係把握の問題
  6. python全局解释器锁 tensorflow_Python即将出局?Julia和Swift能取而代之吗?
  7. jupyter 设置主题Error:Could not find a version that satisfies the requirement jupyterthemes from version
  8. ping,python实现批量ping包工具--小案例
  9. .net页面间的参数传递简单实例
  10. matlab序列码,Matlab7 R14(sn 序列号)
  11. CSDN如何获得积分?
  12. Echarts数据可视化
  13. ROHS认证是什么?
  14. arcgis批量裁剪影像tif流程_【ArcGIS自定义脚本工具】批量裁剪中国多省份NDVI影像...
  15. Python利用re正则表达式抓取豆瓣电影Top250排行榜
  16. Android彻底解决Youtube和Google play store等套件报错崩溃的问题
  17. 第十一家面试(堆糖)
  18. 计算机网络故障与维护方法,试论计算机网络故障处理及维护方法
  19. 尚硅谷 jQuery 笔记(张晓飞 2018)
  20. Goland导入github包

热门文章

  1. 总结redis中对象的类型与编码
  2. leetcode 668. Kth Smallest Number in Multiplication Table | 668. 乘法表中第k小的数(二分查找)
  3. leetcode 927. Three Equal Parts | 927. 三等分(Java)
  4. 【Git】撤销已经git add的文件
  5. Python基础之:Python中的IO
  6. lda 可以处理中文_用python处理文本数据
  7. leetcode -- 303. 区域和检索 - 数组不可变
  8. 很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置 文件内容的对象,则在系统运行中,有 很多地方都需
  9. (最新合集)计算机网络谢希仁第七版 第一章课后答案
  10. android平台 arcgisr_第一个基于ArcGIS的Android应用