mysql驱动语句 mysql的连接驱动是什么
关注我,不迷路,以便看分享 。
文章插图
什么是straight_join
join的类别
说到straight_join,就不提起我们平时在写SQL语句的关联的时候,经常使用到的几种关联方式 。具体有如下几中join的方式:
inner join:内连接 。最后返回的数据行数是在inner join前后两张表中同时存在的数据行数 。任何一条只存在于某一张表中的数据,都不会返回,left join:左连接,又称为left outer join,我们平时都把outer省略 。简写为left joinleft左边的表为主表,left右边的表为从表 。返回结果行数以left左边的表的行数为最后的数据行,对于左表中有些数据行在右表中找不到它所匹配的数据行记录时候,返回结果的时候这些行后面通常会以null来填充 。right join:右连接,又称为right outer join,我们平时都把outer省略 。简写为right joinright右边的表为主表,right坐标的表为从表 。返回结果行数以right右边的表的行数为左后的数据行,对于主表中有些数据行在从表中找不到它所匹配的数据行记录时候,返回结果的时候这些行后面通常会以null来填充 。full join:全连接 。最后返回的数据行数是full join前后两张表的数行数的笛卡尔积 。但是MySQL中没有这种写法,它直接使用select * from A,B;这样的写法就可以实现全连接 。Oracle中有full join这种写法 。理解了上面的几个join的区别后,接下来我们来创建两个表student和score来实际操一下 。下面是我们实际操作的时候,需要使用到的SQL语句,其中包括的表的DDL语句和DML语句 。
CREATE TABLE `student` (`id` int PRIMARY KEY auto_increment NOT NULL,`code` varchar(20) DEFAULT NULL,`name` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `score` (`id` int PRIMARY KEY auto_incrementNOTNULL,`code` varchar(20) DEFAULTNULL,`chinese` double(4,0) DEFAULT NULL,`math` double(4,0) DEFAULT NULL,`engilsh` double(4,0) DEFAULT NULL) ENGINE=InnoDB DEFAULTCHARSET=utf8mb4;insert into student values(1,'0001','张三');insert into student values(2,'0002','李四');insert into student values(3,'0003','王五');insert into score values(1,'0001',98,92,94);insert into score values(2,'0002',90,93,97);insert into score values(3,'0004',78,77,80);insert into score values(4,'0005',66,87,99);insert into score values(5,'0006',87,90,96);insert into score values(6,'0007',78,88,99);select * from student;select * from score;select * from student as a left join score as b on a.code = b.code;select * from student as a right join score as b on a.code = b.code;select * from student as a inner join score as b on a.code = b.code;select * from student as a cross join score as b on a.code = b.code;select * from student as a, score as b;
student表中的数据如下:
文章插图
score表中的数据如下:
文章插图
student inner jion score的结果如下:
文章插图
student left join score的结果如下:
文章插图
student right join score的结果如下:
文章插图
student full join score的结果如下:
文章插图
straight_join
而我们要讨论的straight_join的含义和上面的inner join有些类似,它也是对两个表进行inner join的操作,但是它属于一种特殊的inner join 。
在关联查询的时候,inner join会根据两个关联的表的大小自动的选择哪一个表作为驱动表,哪一个表作为被驱动表 。这个由MySQL内部的优化器自己去选择的 。但是MySQL的优化器也不是100%靠谱,有时候由于我们对表频繁的CURD操作,表的统计信息也可能不够准确,所以它也会选择错误的优化方案 。比如选择了错误的表作为驱动表,这样将导致我们的查询效率变得很低 。
对于上述的这种情况,我们可以手动的去指定让MySQL去选择哪个作为驱动表哪个作为被驱动表吗?答案是肯定的,此时的straight_join就上场了 。
它的功能是可以指定在straight_join前面的表作为驱动表,在straight_joion后面的表作为被驱动表 。这样我们就可以指定让MySQL选择哪个表作为驱动表哪个表作为被驱动表了 。
MySQL官网给straight_join的解释是下面这样的:
STRAIGHT_JOIN is similar to JOIN, except that the left table is always read before the right table. This can be used for those (few) cases for which the join optimizer processes the tables in a suboptimal order.
推荐阅读
- 如何使用电脑自带的BitLocker驱动器加密功能
- 有哪些正能量的经典语句?
- 分享一个sql语句生成向导的源代码
- MySql中json类型数据的查询以及在MyBatis-Plus中的使用
- mysql怎么更改密码? mysql更改密码
- 正在扫描和修复驱动器c已完成100%几个小时 电脑一直显示正在扫描和修复驱动器,已完成100%
- mysql官网下载教程
- 15句经典最励志英语句子 经典励志英语句子
- 关于樱花的浪漫语句有哪些?
- 对于 Display 框架,我需要了解 KMS api 吗?| Linux 驱动