SQLZoo诺贝尔智力竞赛#3—;什么';这两种说法的区别是什么?

SQLZoo诺贝尔智力竞赛#3—;什么';这两种说法的区别是什么?,sql,Sql,相关表格显示在页面顶部 问题3的两个答案选项“选择显示未授予药品奖励年份的代码”,如下所示: SELECT COUNT(DISTINCT yr) FROM nobel WHERE yr IN (SELECT DISTINCT yr FROM nobel WHERE subject <> 'Medicine') SQLZoo只将第二个选项作为正确答案,但是,对我来说,这些答案看起来会返回相同的结果。有人能解释一下为什么第一个选项不正确吗?谢谢。第一个问题的答案是: 诺贝尔奖在医学以外

相关表格显示在页面顶部

问题3的两个答案选项“选择显示未授予药品奖励年份的代码”,如下所示:

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

SQLZoo只将第二个选项作为正确答案,但是,对我来说,这些答案看起来会返回相同的结果。有人能解释一下为什么第一个选项不正确吗?谢谢。

第一个问题的答案是:

诺贝尔奖在医学以外的领域获得了多少年

第二部分试图回答:

多少年没有诺贝尔医学奖

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

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


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

第一个问题回答了这个问题:

诺贝尔奖在医学以外的领域获得了多少年

第二部分试图回答:

多少年没有诺贝尔医学奖

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

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


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

因为它们返回的结果不同。第一种可能包括在医学和其他领域都获得奖项的年份,第二种可能会取消该年份,因为它们不会返回相同的结果。第一种是在医学和其他方面都有奖的年份,第二种是取消该年份。
SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = 'Medicine')