这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【mysql 多表查询】
标题:【修真院java(职业)小课堂】mysql 多表查询
大家好,我是IT修真院武汉分院的15期学员,一枚正直纯洁善良的JAVA程序员。 本次为大家带来关于深度思考的一个问题,我们为什么要使用mysql多表查询?
(1)背景介绍:
在任务一里,我们已经对mysql数据库的基本sql有了一定了解,也能使用基于单表的sql操作来完成修真院的Java任务,然而实际项目中,我们所需要的数据往往存在于多张表中,那么基本的单表查询语句就显得力不从心了(当然也可以选择单表多次查,但开发效率大打折扣)
什么是多表查询
多表查询就是从多张表中查找出所需的数据,并且按照自己设定的约束条件将两表中查出的数据整合在一起获取出来
表之间的关系到底是怎样确立的?
表的关联,只是一种逻辑概念,mysql并没有强大到可以帮我们完美实现物理上的“硬绑定”,这种关联的逻辑实际上只是表中某些数据存在一定的联系而已(比如设公共字段,建关联表等),而这种数据上的联系是我们在设计表的时候定好的逻辑
如何只用一条sql语句就查出几张不同表中的数据呢?
交叉连接
交叉连接是把任意两个表连接起来。假设2张表,笛卡尔积就是2张表的所有记录的排列组合,比如: select * from 表1,表2——这就是 表1,表2的笛卡尔积。但是,实际情况中,真正使用的绝大部分都是它的子集(即2表是有关联条件的),只有在极特殊应用场景下才会用笛卡尔积作为最终结果
(2)知识剖析:
多表连接有哪些分类?针对这些分类有哪些连接方法?
A)内连接:inner join
B)外连接:left outer join,right outer join,union
C)交叉连接:cross join
内连接
语法:select 列from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...
from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断 是否成立,就将该行匹配的信息存放到临时表,否则不存放
外连接
左外连接:左表中所有的记录都会被放到结果集中,无论是否在右表是否存在匹配记录
语法:select 列 from 表1 left outer join 表2 on 表1.列=表2.列
右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录
语法: select 列 from 表1 right outer join 表2 on 表1.列=表2.列
子查询
把内层查询结果当作外层查询的比较条件,一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,又称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件,先处理子查询,再处理父查询。
(3)常见问题:
约束
数据库中的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。 通常我们都需要对数据库的某些列加上合适的约束来防止程序bug等导致的数据不一致,因为这类数据不一致的问题排查起来很困难
(4)解决方案:
表中的约束
主键约束、唯一约束、非空约束等
表间的约束
外键约束(又名参照完整性约束)
作用:保持数据的一致性、完整性
(5)编码实战
(6)拓展思考:
对于单表多次查询和多表联查(join)的各自优势
在业务逻辑不是十分复杂的情况下,绝大多数join是可以使用多次查询替代的。它们的区别在我看来其实就是:使用join偏向于使用sql语句来处理数据间的逻辑问题,多次查询偏向于使用程序代码来解决数据间的逻辑问题 迫使人使用程序代码代替SQL语句来处理问题
单表多次查询的优势
1、高并发场景下的资源消耗低
2、降低了业务之间的耦合度
3、可扩展性强
多表联查(join)的优势
1、低并发场景下开发效率高
2、频繁复杂数据读写的一致性和完整性高
3、对开发人员的能力要求相对低些
(7)参考文献:
1.知乎:https://zhuanlan.zhihu.com/p/24659011
2.CSDN博客:https://blog.csdn.net/jintao_ma/article/details/51260458
(8)更多讨论:
问题1.关系数据库的三范式?
一范式就是属性不可分割,原子性。
二范式就是要有主键,要求其他字段都依赖于主键。
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”
问题2.MySQL中如何使用全外链接?
mysql中是不支持全连接的,MySQL中实现全连接的方式是使用UNION关键词联合左右连接来实现
问题3.查询过多的话多表怎么去重?
要注意多加限制语句,数据库设计要规范
(9)鸣谢:
感谢娄文斌师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
更多内容,可以加入IT交流群565734203与大家一起讨论交流
这里是技能树·IT修真院:,初学者转行到互联网的聚集地
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。