SQL server join,left join,right join ,outer join,union解释

 

给个通俗的解释吧.
例表a
aid adate
1 a1
2 a2
3 a3
表b
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4

“Outer Join
这款的 Join 方式是一般人比较少用到的, 甚至有些 SQL 的管理者也从未用过, 这真是一件悲哀的代表, 因为善用 Outer Join 是可以简化一些查询工作的, 先来看看 Outer Join 的语法
Select <要查询的字段> From
[Outer] Join On
语法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本质上, Outer Join 是 inclusive, 叫它做包容性吧! 不同于 Inner Join 的排他性, 因此在 Left Outer Join 的查询结果会包含所有 Left 资料表的资料, 颠倒过来讲, Right Outer Join 的查询就会包含所有 Right 资料表的资料。”

FULL JOIN 或 FULL OUTER JOIN。
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值

 

union:union默认就是去除重复的,而union ALL 是全部显示

select A,L = count(*) from 表 where A = 1 group by A
union
select B,L = count(*) from 表 where B = 2 group by B
union
select B,L = count(*) from 表 where C = 3 group by C

UNION取几个SELECT语句结果的并集,并会去掉重复记录,SELECT语句中字段个数和类型必须一致

来源:http://blog.sina.com.cn/s/blog_3fdcd6170100a00s.html

原文地址:https://www.cnblogs.com/xiyou110/p/1342341.html