ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL中的内连接,左连接,右连接,全连接,交叉连接等相关总结

2021-11-09 12:30:45  阅读:159  来源: 互联网

标签:join 交叉 连接 user MySQL test 查询 id


MySQL中的内连接,左连接,右连接,全连接,交叉连接等相关总结


先看库表:

表A,test_user:
在这里插入图片描述

表B,test_money:
在这里插入图片描述
说明:user表的id对应money表的user_id,其中,id为2,4的用户没有对应的账户; 而user_id为18的账户没有对应的user;这样是为了更明显的看出以下连接方式的区别;


1.内连接:

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值:

1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

1.2.不等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

1.3.自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

内连接图解:
在这里插入图片描述
查询:

select * from `test_user` a  inner join  test_money b  on  a.id = b.user_id;

也可以写成:

select * from `test_user` a , test_money b where  a.id = b.user_id;

查询结果:
在这里插入图片描述


2.左连接:

以左表为基准,将a.id = b.user_id的数据进行连接,然后右表的数据不存在的列将显示为NULL

左连接图解:

在这里插入图片描述
查询:

select * from  `test_user` a left join test_money b on a.id = b.user_id;

查询结果:
在这里插入图片描述


3.右连接:

以右表为基准,将a.id = b.user_id的数据进行连接,左表没有的对应项显示为NULL

右连接图解:

在这里插入图片描述
查询:

select * from  `test_user` a right join test_money b on a.id = b.user_id;

查询结果:
在这里插入图片描述

小结: 左连接 和 右连接 合称 外连接,所以,left joinright join也可以写作 left outer joinright outer join,结果是一致的; 结合上面的左右连接查询也可以明显看出左右连接的区别左连接以左表为基准,如果右表没有对应数据,显示为null,相反,右连接以右表为基准,如果左表没有对应的数据,显示为null;


4.全连接:

Oracle数据库支持full join,mysql是不支持full join的,但是仍然可以通过 左外连接+ union+右外连接 实现;全连接是完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表显示为null。

全连接图解:
在这里插入图片描述
查询:

select * from `test_user` a
left join test_money b on a.id = b.user_id
UNION
select * from  `test_user` a
right join test_money b on a.id = b.user_id

查询结果:
在这里插入图片描述
顺便说一句,

UNION 与 UNION ALL 的区别

当使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION。


5.交叉连接:

交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。用的比较少,而且效率比较低。

交叉连接图解:
在这里插入图片描述
查询:

select * from `test_user` a cross join test_money b

查询结果:

在这里插入图片描述

最后:
sql中还有union join和natural inner join等一些连接,可自行扩展了解,一般的开发过程中,除了拿到数据库中想要的数据外,最为重要的还是要保证处理的效率

标签:join,交叉,连接,user,MySQL,test,查询,id
来源: https://blog.csdn.net/weixin_44958006/article/details/121223595

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有