在查阅有关数据库介绍的笔记时,我偶然发现了一个我不理解的案例(在except
和distinct
之间)。
它在我的笔记中这样说:
下面的两个查询具有相同的结果,但通常情况并非如此。
第一个查询:
Select c.first_name,c.last_name,c.email
FROM customers as c
WHERE c.country = 'Japan'
EXCEPT
Select c.first_name,c.last_name,c.email
FROM customers as c
WHERE c.last_name LIKE 'D%';
第二个查询:
Select DISTINCT c.first_name,c.last_name,c.email
FROM customers as c
WHERE c.country = 'Japan' AND NOT (c.last_name LIKE 'D%');
有人能为我提供一些有关结果会有所不同的案例的见解吗?
答案 0 :(得分:0)
数字1选择来自日本且姓氏不以D开头的客户的名字,姓氏和电子邮件。
数字2选择名字,姓氏和电子邮件,其中没有两个记录的所有3个字段都相同,客户来自新加坡,姓氏不以D开头。
我想我可以想象一个表,这些表将产生相同的结果,但是我认为除非有非常人为的情况,否则它永远不会出现。
Joe Smith jsmith@abc.com Japan
Joe Smith jsmith@abc.com Singapore
将是其中之一。这两个查询都将产生Joe Smith jsmith@abc.com
。另一种情况是,如果没有人来自任何一个国家,或者每个人的姓氏都以D开头,那么他们都将一无所获。
这些都没有经过测试,并且EXCEPT语句是我已经读过但从未使用过的东西。
答案 1 :(得分:0)
第一个对象是日本,第二个对象是新加坡,所以我不明白为什么这些对象通常(或专门说)会返回相同的数据。
即使国家/地区相同,您也会遇到NULL
值的问题。因此,如果您的数据如下所示:
first_name last_name email country
xxx NULL a Japan
您的第一个查询将返回该行。第二个不会。