我正在为SQL Server考试而学习,但我得到的这些问题我回答错了,但是我不明白为什么正确的答案是正确的,以及如何获得这些答案。
nr naam aantal chef
1 Anouk 14 2
2 Hans 14 NULL
3 Ali 13 5
4 Kees 12 5
5 Ben 3 2
nr soort stad chef
1 cursus DenHaag 2
2 cursus Amsterdam NULL
3 congres NewYork 5
4 lezing Utrecht 5
nr werknemer reis aantal datum bedrag
01 1 4 8 17-04-2013 420,56
02 3 3 5 05-04-2013 825,80
03 1 1 5 10-04-2013 140,00
04 null 2 2 10-04-2013 156,75
05 4 4 8 17-04-2013 328,90
06 5 3 5 05-04-2013 560,45
这两个问题是:
一种。
SELECT naam
FROM werknemer
WHERE nr NOT IN (SELECT werknemer
FROM declaratie);
b。
SELECT naam, COUNT(*)
FROM werknemer w LEFT OUTER JOIN declaratie d ON w.nr = d.werknemer
GROUP BY naam;
我的答案是:
a: Hans
b: naam count(*)
Anouk 2
Hans 0
Ali 1
Kees 1
Ben 1
但是正确的答案是:
a: none
b: naam count(*)
Anouk 2
Hans 1
Ali 1
Kees 1
Ben 1
有人可以向我解释我可能错过的事情吗?
a)是因为执行任何类型的操作都会NOT IN (1,NULL,3,4,5)
返回NULL
结果集,因为SQL无法说出任何给定值是否不相等NULL
,因此有效地返回了“我不知道”。在Stack Overflow上对此有很好的解释。
b)错误的原因是您LEFT JOIN
来自werknemer
。因此,werknemer
将返回的所有行,包括Hans
。COUNT(*)
将返回关于个别行的数量,使得Hans
返回1.是你要COUNT(d.werknemer)
那么Hans
将是0,因为所有declaratie
的列会NULL
为Hans
因为JOIN
谓词将无法实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句