EXCEPT和DISTINCT不同的情况是什么?

时间:2019-06-21 03:05:51

标签: sql

在查阅有关数据库介绍的笔记时,我偶然发现了一个我不理解的案例(在exceptdistinct之间)。

它在我的笔记中这样说:

  

下面的两个查询具有相同的结果,但通常情况并非如此。

第一个查询:

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%');

有人能为我提供一些有关结果会有所不同的案例的见解吗?

2 个答案:

答案 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

您的第一个查询将返回该行。第二个不会。