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');

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

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');
sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

-- inner join 两个表的交集

select *from A  inner join B on A.names=B.names

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

-- full out join 两个表的并集

select * from A full outer join B  on A.names=B.names 

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

-- 案例 求两个表的非交集部分

select * from  A full outer join B on A.names = B.names where  A.id is null or B.id is null

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

--left join  左表的所有数据列出,右表的相同部分列出,不同部分用null 补齐

select A.*,B.id as Bid,B.names as bName from A left  join B on A.names =B.names;

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

 --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

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

--union all 两个表的并集(语序重复)

select names from A

union  all 

select names from B

sql join 大汇总(inner join 内联、full join 全连、 left join 左连、right join 右连 、cross join 交叉连以及union)

-- corss join  表A和表B的数据进行一个N*M的组合,即笛卡尔积

select *  from A cross join B