锲子:
首先我需要纠正一下我自己对组合查询的美丽误会:之前在进行机房收费系统时,误将多表连接查询理解成了组合查询,很不小心的歪曲了组合查询的使命。下面让我们通过一张图来比对一下多表连接查询和组合查询的不同之处吧。
![](http://img.e-com-net.com/image/info5/c4917850c93142088b58f82281aefd66.png)
从图中我们可以看出:组合查询是将查询结果串联起来了,而多表连接查询则是将查询结果并联起来,这就是两者之间最明显的区别了。
下面我们通过两个关键字:UNION和OR来对组合查询进行初步的学习。
UNION和OR:
我们先通过一个实验来看一下UNION和OR之间究竟又怎样的关系。
关系1
UNION的基本查询功能通过OR一样可以实现。
实验用表:
命题:查询性别为“男”和供职单位为“公司A”所有员工的信息。
代码(UINON):
<span style="font-family:KaiTi_GB2312;font-size:24px;">select *
from Employee_Info
where Sex ='男'
union
select *
from Employee_Info
where Company ='公司A'</span>
运行结果:
代码(OR):
<span style="font-family:KaiTi_GB2312;font-size:24px;">select *
from Employee_Info
where Sex ='男'
or Company ='公司A'</span>
运行结果:
从两张运行结果的截图我们不难看出:本例中,使用关键字UNION和关键字OR可以达到相同的效果。但是值得我们注意的是:使用UNION关键字会将结果集中的相同的记录自动去重,不重复显示;而OR则保留相同记录。
关系2:
联合关键字UNION和关键字GROUP BY以及聚合函数可以得到经过统计汇总处理的查询结果;而OR则不能实现这一在SQL中几乎不可能实现的复杂计算。
UNION的使用规则:
UNION的使用规则主要两条:1、每个查询语句应当有相同数量的字段;2、每个查询语句中的字段的数据类型必须相互兼容
1、字段的数量相同
这个规则说的是通过UNION进行组合的每个SELECT后面的字段数量必须相同。如果不相同,字段数量少得要用NULL值补齐,否则系统会报错。具体的情况大家可以自行尝试。
2、字段的数据类型兼容
在满足第一条规则的情况下,使用UNION进行组合的查询语句还必须确保相应的字段的类型必须兼容。如果相应的字段类型不兼容,系统同样会报错。
总结:
写到这里,我对多表连接查询和组合查询的初步理解就结束了。从查询结果集的排序方式来看,组合查询和多表连接查询两者加起来颇有点纵横联合的味道。好了,非常感谢你们的宝贵时间,文中如有不当之处还请各位小伙伴们不吝指点,在下不胜感激哦。
感谢您的宝贵时间,谢谢