目录
说明
最近在练习sqlzoo,遇到错题就总结到这里,让自己回顾一下
题目1
数据表nobel如下
题目如下:(属于sqlzoo第三个quiz的第5个选择题)
链接在此:点我到达
Select the code which would show the year when neither a Physics or Chemistry award was given
让我们选出既没有Physics也没有Chemistry奖项颁布的年份
选项如下:
选项1.
错误之处:条件语句where中选错了,不是subject而是yr
解释:子查询中选出来的是有Physics或Chemistry奖项颁布的年份,所以where语句中应该是年份yr而不是subject
选项2.
此项是当时选错的选项,表面确实有很大误导性,但是其实和标答有很大差别
错误之处:会输出只有化学奖或物理奖颁发之外的所有年份,不满足题意
解释:from nobel中送来一条数据,比如表中第二条(1960,Literature),进来后会检查其是否满足not in (Chemistry,Physics),很明显这个Literature正好not in,所以就会输出1960这个年份,但是1960这一年中,有化学奖和物理奖颁布,所以这个选项错误了,同理,它会对比每一条数据,当这一年里只有化学奖或物理奖颁布,则正好就不满足not in了,所以会不输出这一年的年份,所以这个查询最终输出的是不包括只有化学奖或物理奖颁发之外的所有年份
选项3.正确
选项4.
错误之处:子查询中select subject很明显错误了,应该是yr
解释:子查询中选出的是化学和物理,是subject,很明显和yr对比不了,所以这里应把子查询中的subject改成yr
选项5.
错误之处:这个错的比较明显,就是数据表错误了
解释:从数据表nobel中选择数据,所以第一行中的subject应该是nobel
正解
此查询的思路是将有这两个奖项的年份查询出,然后反选这些年份即可,因此可以用子查询来做
即:
SELECT yr #严谨来讲这里最好是SELECT DISTINCT yr
FROM nobel
WHERE yr NOT IN (SELECT yr
FROM nobel
WHERE subject IN ('Chemistry','Physics')
);