码迷,mamicode.com
首页 > 数据库 > 详细

数据库中的集合查询

时间:2015-04-28 16:21:14      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:集合查询   mysql   union   intersect   except   

  

    数据库中的集合操作主要包括3个方面:


1. Union合并行


    union的作用是为了合并两个查询结果,而且在合并的同时把相同的行去重。

    例如:

技术分享


如果我们需要显示全部的并集,即不去重,可以使用union all,如下:

技术分享


    我们只需要使用union来连接两个select-from-where语句块即可。

    union有如下几个注意点:

    1)union是可交换的操作,A union B的结果和B union A的结果相同;

    2)理论上,select语句块在union中出现的顺序对于运行速度没有影响,但是在实际应用中可能有影响。我们尽量把小表的查询放在union的前面,因为优化器合并中间结果和除去重复行的方式不同。当然,不同的DBMS的影响可能不同;

    3)intersect的优先级比union、except要高。其中,intersect是查找相同行,except是查找不同行。这也是和不同DBMS有关的;

    4)在可以使用组合的select-from-where语句块的情况下,尽量不要使用union;

    5)当union和union all混合使用的时候,要使用括号来明确合并的顺序,因为这涉及到到底哪些查询结果需要合并;

    6)即使没有使用order by语句,union的结果也可能是排序的,而union all由于不去重,所以不需要排序。排序需要很多的额外时间,所以我们能使用union all就尽量不使用union;

   


2. intersect查找相同行


    intersect操作是取两个查询结果的相同行。

    

    mySQL不支持intersect,我们可以使用exists谓词来实现相同的功能。



3. except查找不同行


    A except B就是查找属于A但是不属于B的查找结果。


    mySQL不支持except,我们可以使用not exists、not in等谓词来实现相同的功能。











数据库中的集合查询

标签:集合查询   mysql   union   intersect   except   

原文地址:http://blog.csdn.net/puqutogether/article/details/45335225

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!