SQL的组合查询
在SQL中除了联结查询外,还有⼀种组合查询;组合查询是指将多条SELECT语句的结果作为⼀个查询结果集返回,这种查询⽅式通常称作为并(union)或复合查询(compound query)。
1、组合查询的使⽤
利⽤UNION操作符将数条SQL查询组合成⼀个结果集。
2、组合查询的场景
在⼀个查询中从不同表返回结构数据
对⼀个表执⾏多个查询,按⼀个查询返回数据
3、UNION的限制
使⽤UNION组合SELECT语句的数⽬,SQL没有标准限制。但是,有些DBMS可能会对UNION能组合的最⼤语句数据有限制。
4、UNION的规则
UNION必须由⾄少两条SELECT语句组成,语句之间⽤关键字UNION分隔。
UNION中的每个查询必须包含相同的列、表达式或聚集函数,不过各个列的次序可以不相同。
列数据类型必须兼容,类型不必完全相同,但必须是DBMS可以隐含转换的类型。
使⽤UNION组合查询时,只能使⽤⼀条ORDER BY⼦句,并且它必须位于最后⼀条SELECT语句之后,不过ORDER BY⼦句是对所有SELECT语句返回的所有结果进⾏排序。
UNION在需要组合多个表的数据时也很有⽤,即使是有不匹配列名的表,此时可以将UNION与别名组合,这样可以让每个SELECT语句返回相同的列名,检索⼀个结果集。
5、UNION包含或取消重复的⾏
UNION从查询结果集中⾃动去除了重复的⾏,它的⾏为与⼀条SELECT语句中使⽤多个WHERE⼦句条件⼀样;使⽤UNION时,默认会将重复的⾏⾃动取消。
若想改变UNION的默认⾏为,那么可以使⽤UNION ALL来返回所有的匹配⾏;也就是说,使⽤UNION ALL时,DBMS不取消重复的⾏。
6、UNION与WHERE的差异
理论上讲,从性能上看使⽤多条WHERE⼦句条件还是UNION应该没有实际的差别。不过,实践中可能会有些差异,最好是测试⼀下这两种⽅法,然后取其最优者。
任何具有多个WHERE⼦句的SELECT语句都可以作为⼀个组合查询,即UNION⼏乎总是完成与多个WHERE条件相同的⼯作。
UNION ALL完成了WHERE⼦句完成不了的⼯作,也就是说若想要将每个条件的匹配⾏全部输出(包括重复的⾏),那么就必须使⽤UNION ALL,⽽不是WHERE。
使⽤UNION可极⼤简化复杂的WHERE⼦句,简化从多个表中检索数据的⼯作。
7、其他类型的UNION
EXCEPT:也称为MINUS,⽤来检索只在第⼀个表中存在⽽在第⼆个表中不存在的⾏。
sql中union多表合并INTERSECT:⽤来检索两个表中都存在的⾏。
⼩结:实际上,这些UNION很少使⽤,因为相同的结果集可以利⽤联结得到。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论