mysql左右连接查询(有示例图)

小小的连接查询,其实里面有很多学问,今天我就来简单剖析一下。 
左连接,右连接,内连接的本质:将两个表的数据依据一定条件横向连接起来。 

给出建表语句: 
-------------------------------------------------- 
create table test1( 
       id int,              
       name varchar(10) 


create table test2( 
       id int,              
       name varchar(10) 


INSERT INTO `test1` VALUES (1,'2'); 
INSERT INTO `test1` VALUES (1,'2'); 
INSERT INTO `test1` VALUES (2,'1'); 
INSERT INTO `test1` VALUES (2,'2'); 
INSERT INTO `test1` VALUES (3,'1'); 

INSERT INTO `test2` VALUES (1,'2'); 
INSERT INTO `test2` VALUES (2,'1'); 
INSERT INTO `test2` VALUES (2,'2'); 
-------------------------------------------------- 

左连接sql:select * from  test1 a left join test2 b on a.id=b.id 
如下为左连接示例图: 


1,理解左连接查询方式(以两表id相等作为on的条件): 
先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。 
举例:select * from  test1 a left join test2 b on a.id=b.id    

说明:先将左表数据查出,然后根据on后面的条件,将右表中凡是id与左表id相等的记录都查出来,与匹配的左表记录依次排成一行或多行,若无匹配的记录,则显示null。 
在本例中,我画了6根线,每条线都表示了一条查询结果记录。 
当ID为1时:左表有2条ID为1的记录,右表有1条。先查左表的第一条,然后再查询右表中所有ID与左表第一条记录的ID相等(即ID为1)的记录,因右表只有1条记录的ID为1,因此得出查询结果的第一条记录:1,2,1,1。 
第二条记录查询方式也同上。 
当ID为2时:左右表各有2条ID为2的记录。也是同上,当查左表第一条ID为2的记录时,因右表中有2条ID为2的记录,因此查询结果会有两条,即左表的1条记录会和右表的2条记录一一配对。 
第二条记录查询方式也同上。 
对于id为3的记录,因右表没有ID为3的记录,因此右边显示为null。 

-------------------------------------------------- 
2,理解了左连接之后,右连接也就不难了。 
右连接语句:select * from  test1 a right join test2 b on a.id=b.id  
右连接查询结果: 
 

-------------------------------------------------- 

3,而内连接,则是把ID只存在于某一个表中的记录给过滤了。 
以下3条sql语句等价: 
select * from  test1 a  join test2 b on a.id=b.id  
select * from  test1 a inner join test2 b on a.id=b.id  
select * from  test1 a , test2 b where a.id=b.id  
内连接查询结果: 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值