文章插图
作者:阿伟~准备我们需要的表结构和数据两张表 studnet(学生)表和score(成绩)表,创建表的SQL语句如下
链接:https://www.cnblogs.com/sy270321/p/12760211.html
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`no` varchar(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `score` (`id` int(11) NOT NULL,
`no` varchar(20) DEFAULT NULL,
`chinese` double(4,0) DEFAULT NULL,
`math` double(4,0) DEFAULT NULL,
`engilsh` double(4,0) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;MySQL连接查询分为以下三种left join 左连接,用法如下,这种查询会把左表(student)所有数据查询出来,右表不存在的用空表示,结果图如下
select * from student s1 left join score s2 on s1.on = s2. on
文章插图
right join 右连接, 用法如下,这种查询会把右表(score)所有数据查询出来,左表不存在的用空表示,结果图如下
select * from student s1 right join score s2 on s1.no = s2.no
文章插图
inner join 内连接,用法如下,这种查询会把左右表都存在的数据查询出来,不存在数据忽略,结果图如下
select * from student s1 inner join score s2 on s1.no = s2.no
文章插图
连接查询中需要注意的点什么是驱动表,什么是被驱动表,这两个概念在查询中有时容易让人搞混,有下面几种情况,大家需要了解 。
- 当连接查询没有where条件时,左连接查询时,前面的表是驱动表,后面的表是被驱动表,右连接查询时相反,内连接查询时,哪张表的数据较少,哪张表就是驱动表
- 当连接查询有where条件时,带where条件的表是驱动表,否则是被驱动表
首先第一种情况,student表中3条数据,score表中2条数据,但两张表中只有一条数据是关联的(编号是1),看如下SQL查询
//左连接查询
explain select * from student s1 left join score s2 on s1.no = s2.no
//右连接查询
explain select * from student s1 right join score s2 on s1.no = s2.no
//内连接查询
explain select * from student s1 inner join score s2 on s1.no = s2.no
执行计划中靠前的表是驱动表,我们看下面三种图中,是不是全度符合情况一,第一张图中s1是驱动表,第二张图中s2是驱动表,第三种途中s2是驱动表文章插图
文章插图
文章插图
其次第二种情况,还是上面三种SQL语句,我们分别加上where条件,再来看看执行计划的结果是什么样呢?
//左连接查询
explain select * from student s1 left join score s2 on s1.no = s2.no
where s2. no = 1
//右连接查询
explain select * from student s1 right join score s2 on s1.no = s2.no
where s1.no = 1
//内连接查询
explain select * from student s1 inner join score s2 on s1.no = s2.no
where s1.no = 1
我们看下面三种执行计划结果,全都以where条件为准了,而且跟上面情况一的都相反了,因此情况二也是得到了验证.文章插图
文章插图
文章插图
连接查询优化要理解连接查询优化,得先理解连接查询的算法,连接查询常用的一共有两种算法,我们简要说明一下
Simple Nested-Loop Join Algorithms (简单嵌套循环连接算法)比如上面的查询中,我们确定了驱动表和被驱动表,那么查询过程如下,很简单,就是双重循环,从驱动表中循环获取每一行数据,再在被驱动表匹配满足条件的行 。
推荐阅读
- 千牛怎么查询客服业绩 千牛如何看客服的销售数据
- wifi连接上但上不了网怎么回事
- 为什么 MySQL 的自增主键不单调也不连续
- MySQL文件及目录权限设置分析-爱可生
- 支持数据连接池 分享一个简单的C#的通用DbHelper类
- 为什么别人能用好 MySQL?万字详解其复杂原理
- 苹果|苹果iPhone 14将支持卫星网络连接:关键时刻能救命
- 学会使用批量查询快递工具 快递单号怎么查
- MySQL大表优化方案——从单表优化到分表分库
- 一个接口查询关联了十几张表,响应速度太慢?怎么办?