SQL包含或取消重复的行

SQL包含或取消重复的行,回到SQL使用UNION,我们看看所用的SELECT语句。注意到在分别执行语句时,第一条SELECT语句返回3行,第二条SELECT语句返回2行。而在用UNION组合两条SELECT语句后,只返回4行而不是5行。

UNION从查询结果集中自动去除了重复的行;换句话说,它的行为与一条SELECT语句中使用多个WHERE子句条件一样。因为Indiana州有一个Fun4All单位,所以两条SELECT语句都返回该行。使用UNION时,重复的行会被自动取消。

这是UNION的默认行为,如果愿意也可以改变它。事实上,如果想返回所有的匹配行,可使用UNION ALL而不是UNION。

请看下面的例子:

    SELECT cust_name, cust_contact, cust_email
    FROM Customers
    WHERE cust_state IN ('IL','IN','MI')
    UNION ALL
    SELECT cust_name, cust_contact, cust_email
    FROM Customers
    WHERE cust_name = 'Fun4All';

输出结果如下:

    cust_name        cust_contact           cust_email
    -----------      -------------          ------------
    Village Toys     John Smith             sales@villagetoys.com
    Fun4All           Jim Jones              jjones@fun4all.com
    The Toy Store    Kim Howard             NULL
    Fun4All           Jim Jones              jjones@fun4all.com
    Fun4All           Denise L. Stephens    dstephens@fun4all.com

使用UNION ALL,DBMS不取消重复的行。因此,这里返回5行,其中有一行出现两次。

提示:UNION与WHERE
UNION几乎总是完成与多个WHERE条件相同的工作。UNION ALL为UNION的一种形式,它完成WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),就必须使用UNION ALL,而不是WHERE。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

SQL教程