SQLZoo Nobel测验#3-这些语句之间有什么区别?

时间:2018-07-20 16:11:55

标签: sql

https://sqlzoo.net/wiki/Nobel_Quiz

有问题的表格显示在页面顶部。

问题3的两个答案选择:“选择显示未授予医学奖的年份的代码”:

SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr IN (SELECT DISTINCT yr FROM nobel WHERE subject <> 'Medicine')

SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = 'Medicine')

SQLZoo仅将第二个选项作为正确答案,但是对我来说,这些答案看起来将返回相同的结果。有人可以提供一些关于为什么第一个选项不正确的见解吗?谢谢。

1 个答案:

答案 0 :(得分:2)

第一个回答问题:

  

除医学以外的其他领域获得诺贝尔奖有多少年?

第二次尝试回答:

  

多少年没有诺贝尔医学奖?

这些是不同的问题,通常会有两个不同的答案。

还有其他重要区别。如果医学奖励中yr的任何值为NULL,则第二个查询不返回任何行(这就是为什么我说“试图回答”)。 NULL值对第一个查询没有这种全局影响。

SQL基于的基于集合的逻辑是合法逻辑。但这比处理基本的布尔表达式需要更多的思考。

相关问题