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  

猜你喜欢

转载自blog.csdn.net/liufeifeinanfeng/article/details/83035354