SQL中LEFT JOIN、Inner Join、Right Join、Left Outer Join、full join区别

定义2个表A、B
A表
id  name age
1 lei12
2 mao1
3 zhang23
B表
id   name age
1 lei22
2 lei2
4 mao  1
5 lei66
6 gao99
一、Inner Join:
SELECT * FROM test.a INNER JOIN test.b
on a.`name` = b.`name`
就是当A表中的name和B表的name相等时的结果集,遍历A表name,如果B表中name和A表相等,则显示该记录
id   nameageid1 name1age1
1 lei  121lei 22
1 lei12 2     lei2
2 mao1 4 mao   1
1 lei12 5 lei 66
ps:其在寓意上和我们平时写的
SELECT * FROM test.a, test.b where a.`name` = b.`name`
是一样的。
二、Left join:是left outer join的缩写
左连接,以A表为准,查询结果显示A表所有记录,如果B表有匹配的,则显示,如果没有,则显示为null
SELECT * FROM test.a LEFT JOIN test.b
on a.`name` = b.`name`
id  name age id1 name1 age1
1 lei121lei 22
1 lei 122lei2
1 lei 125lei66
2 mao 14mao1
3 zhang 23 null null null
三、right join:是right outer join的缩写
右连接、以B表为主表,查询结果显示B表所有记录,如果A表有匹配的,则显示A表记录字段,如果没有,则显示null
SELECT * FROM test.a RIGHT JOIN test.b
on a.`name` = b.`name` 
id  nameageid1name1age1
1lei12 1lei22
1 lei122 lei 2
2 mao14 mao 1
1 lei125 lei66
null nullnull6gao99 
四、full join:
全连接,查询结果显示A表和B的所有记录,如果A表没有匹配的,则A表记录列显示,否则显示为null,如果B表有匹配的,
显示B表列显示B表记录字段值,如果B表没有,B表列显示null
因为mysql中不支持full join,故采用另外一种方式
SELECT * FROM test.a LEFT JOIN test.b
on a.`name` = b.`name`
UNION
SELECT * FROM test.a RIGHT JOIN test.b
on a.`name` = b.`name`
id  name age id1name1age1
1 lei 121lei22
1       lei 12  2lei2
1 lei12 5 lei 66
2 mao1 4mao1
3 zhang2 3 nullnull
null   null null 6gao 99
  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值