MySQL多表查询

大家好,我是IT修真院上海分院第5期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务7中的深度思考,怎么处理maven依赖冲突?

一、背景介绍

很多时候在实际业务中需要查询的不止一张表。比如:

1.找出所有同时在本银行中有账号且有贷款的用户名。

2.银行中可能查询违规记录,同时查询出用户的。

此时一个查询涉及到两个以上的表,称之为多表查询、连接查询、联合查询或多表联合查询。而且需要指定连接条件,连接条件可以使用=、>、<等运算符,当使用=称为等值连接,其他称为不等值连接。

指定连接条件有四种方式:在where子句中指定;在from子句中指定(外连接|内连接);子查询;外键。where和form中指定条件的方式,都属于表连接。

二.知识剖析

方式一:在where子句中指定连接条件,where后面直接+连接条件。

select setudentName, score from student, grade where student.studentId=grade.studentId and courseid='005';

方式二:在from子句中指定连接条件。就是用join的语法。分为内连接,外连接。通过某种机制讲两张表的数据再次整合到一起,这种机制称为连接(join)。

内连接:将两个表中存在连接关系的字段符合连接条件的哪些记录形成结果集的连接。

格式:from 表1 inner join 表2 on 连接条件。

select studentName, score from student inner join grade on student.studentId=grade.studentId and courseId='005';

外连接:会选出其他不匹配的记录,分为外左连接和外右连接。

格式:from 表1 left|right outer join 表2 on 连接条件

select studentName, score from student left outer join grade on student.studentId=grade.studentId and courseId='005';

关于join的语法还有交叉连接(cross),自连接(参与连接的表都来自于同一张表。通过给表取两个名字,虚拟为两个表。)

方式三:子查询。为了给主查询(外部查询)提供数据而首先执行的查询(内部查询)被叫做子查询。即先执行子查询,根据子查询的结果,再执行主查询。

关键字:用于子查询的关键字主要包括IN、NOT IN、EXIST、NOT EXIST、=、<>等(符号“<>”的意思是不等于。

方式四:外键。外键会影响性能,所以现在不会用了。

三、常见问题

1、什么是MySQL多表查询?

2、多表查询有几种方式?

3、什么是垂直分表?

4、什么是水平分表?

四.解决方案

1、答:在一个查询中使用多个表。在mybtis中也可以写在mapper映射文件中使用。

2、答:四种方式:在where子句中指定链接条件;在from子句中指定链接条件;子查询;外键(废弃的方法)。

3、答:垂直分表,就是“大表拆小表”。垂直分表在日常开发和设计中比较常见,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中。

4、答:水平分表也称为横向分表,比较容易理解,就是将表中不同的数据行按照一定规律分布到不同的数据库表中(这些表保存在同一个数据库中),这样来降低单表数据量,优化查询性能。最常见的方式就是通过主键或者时间等字段进行Hash和取模后拆分。

五。编码实战

六、参考文献

https://blog.csdn.net/jintao_ma/article/details/51260458MySQL

数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引https://www.cnblogs.com/smyhvae/p/4042303.html#undefined

数据库设计三范式https://blog.csdn.net/csdn_gia/article/details/72417472

https://blog.csdn.net/wzqnls/article/details/53340503

Mysql Join语法解析与性能分析 http://www.cnblogs.com/BeginMan/p/3754322.html

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

七.更多讨论

详见视频

腾讯视频

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

我的邀请码链接:http://www.jnshu.com/login/1/20535344

使用我的优惠码优惠多多!

我的邀请码:20535344

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值