SQL Left、Right Join等操作符总结,leftjoin
1、在tableA与tableB中查询tableA中全部数据和tableB中在tableA中的数据select * from tableA A left join tableB B on A.key=B.key
2、在tableA中查询排除tableB中数据,剩余的tableA中的数据
select * from tableA A left join tableB B on A.key=B.key where B.key is null
3、查询tableA与tableB中所有的数据
select * from tableA A full outer join tableB B on A.key=B.key
4、查询tableA与tableB两表之外的数据
select * from tableA A full outer join tableB B on A.key=B.key where A.key is null or B.key is null
5、查询tableA与tableB中共同的数据
select * from tableA A inner join tableB B on A.key=B.key
与其解释,其实不许直接写个例子给你看,或许你能更快理解
建两个表 A和B,A表包含包含一个字段Aid;B表包含两个字段Aid,Bid
create table A (aid int)
create table B (aid int ,bid int)
分别插入数据
向A表aid字段插入1,再向A表aid字段插入2
向B表aid字段插入1,bid字段插入2
向B表aid字段插入3,bid字段插入4
insert into a (aid) values (1)
insert into a (aid) values (2)
insert into b(aid,bid) values (1,2)
insert into c(aid,bid) values (3,4)
那么 分别用inner join,left jion,right join 来关联一下看看就知道他们的作用和区别了
select a.aid,b.aid,b.bid from a inner join b on a.aid=b.aid
得出结果 1,1,2
select a.aid,b.aid,b.bid from a left join b on a.aid=b.aid
得出结果
1,1,2
2, ,
select a.aid,b.aid,b.bid from a right join b on a.aid=b.aid
得出结果
1,1,2
,3,4
也就是说,
inner join取的,是关联字段on a.aid=b.aid 的等号两边都符合条件的值
left join取的,是关联字段on a.aid=b.aid的左边符合的值,如果左边有值右边没有相符的,以null补齐
right join 取的,是关联字段on a.aid=b.aid的右边符合的值,同样,如果右边有值而左边没有相符的,那么同样以null空值补齐
left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
full join:外连接,返回两个表中的行:left join + right join
cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。
declare @a table(a int,b int)
declare @b table(a int,b int)
insert @a values(1,1)
insert @a values(2,2)
insert @b values(1,1)
insert @b values(3,3)
select * from @a
select * from @b
--左:
select * from @a Aa left join @b Bb on Aa.a=Bb.a
--右:
select * from @a Aa right join @b Bb on Aa.a=Bb.a
--内
select * from @a Aa inner join @b Bb on Aa.a=Bb.a
--外:
select * from @a Aa full join @b Bb on Aa.a=Bb.a
--交叉连接
select * from @a cross join @b