个人感觉,union只是将几条SQL语句的结果放在一起显示出来,比如在做报表的时候,有可能要将几个不同的表中的数据放一块显示;
而jion on 则是侧重于几个表的关联,同过关联两个表,可以将它们中各自的字段值拿出来进行比较,这个比较就可以作为一个查询条件,例如:
T_Student和T_Score两个表中都有name字段,我们可以通过这条语句来选择输出结果:
select t.* from T_score t jion T_student d on t.name=d.name where d.name='***';
用作简单的结果联合:
select FNumber,FName,FAge, from T_EMployee
union
select FIdcard,FName,FAge, from T_EMployee
基本原则:每个结果集必须有相同的列数,每个结果集的列必须类型相容(同)
union all
union 会合并两个查询结果集,并且将其中完全重复的数据合并为一条。
union因为要进行重复值扫描,所以效率低,因此如果不是确定合并重复行,那么就用union all。
SQL 中的 UNION 与 UNION ALL 不同,UNION 会去掉结果集中的重复记录,而 UNION ALL 会返回合并后的全部结果集。这个我是知道的,但今天使用 UNION 时,还是犯了一个错误:UNION 会去掉结果集中的重复记录,并且不区分这些记录是那个表里的。比如下面的两个结果集使用 UNION 合并,结果会是什么呢?-- 表 testa11234-- 表testb23567我以为结果集会是这个:11234567因为把表 testb 中与 testa 重复的记录去掉了。而实际测试结果不是这样的:SQL select * from testa; A---------- 1 2 3 4 1SQL select * from testb; A---------- 2 3 5 6 7SQL select a from testa 2 union 3 select a from testb; A---------- 1 2 3 4 5 6 7已选择7行。UNION 操作也会去掉表 testa 中重复的记录。总之,UNION 最后的返回结果集是去掉了所有的重复记录,而不区分是哪个表里的记录的。做报表,这是很容易出错的一点。