sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)
一、定义两个表 ,结构如下
create table A (
id nvarchar(50) null,
names nvarchar(50) null
)
create table B (
id nvarchar(50) null,
names nvarchar(50) null
)
二、 插入数据
A表
insert into A values('1','zhangsan00');
insert into A values('2','zhangsan01');
insert into A values('3','zhangsan02');
insert into A values('4','zhangsan03');
B表
insert into B values('1','zhangsan00');
insert into B values('2','zhangsan01');
insert into B values('3','zhangsan05');
insert into B values('4','zhangsan06');
-- inner join 两个表的交集
select *from A inner join B on A.names=B.names
-- full out join 两个表的并集
select * from A full outer join B on A.names=B.names
-- 案例 求两个表的非交集部分
select * from A full outer join B on A.names = B.names where A.id is null or B.id is null
--left join 左表的所有数据列出,右表的相同部分列出,不同部分用null 补齐
select A.*,B.id as Bid,B.names as bName from A left join B on A.names =B.names;
--right join 右表的所有数据列出,左表相同部分列出,不同部分用null 补齐
select A.*,B.id as Bid,B.names as bName from A right join B on a.names = b.names
--union 合并两个表的数据(不允许重复)
select names from A
union
select names from B
--union all 两个表的并集(语序重复)
select names from A
union all
select names from B
-- corss join 表A和表B的数据进行一个N*M的组合,即笛卡尔积
select * from A cross join B