Mysql表连接的执行流程详解

2023-01-04 12:43:47 作者:admin

本文整理自网络,侵删。

目录
  • 1. 前言
    • 1.1 mysql连接的原理
    • 1.2 show warnings命令
  • 2. 准备工作
    • 3. inner join内连接on、where的区别
      • 4. left join左连接on、where的区别
        • 4.1 where驱动表过滤条件
        • 4.2 on驱动表过滤条件
        • 4.3 on被驱动表过滤条件
        • 4.4 where被驱动表过滤条件
      • 5. 总结

        1. 前言

        对于连接操作,驱动表和被驱动表的关联条件我们放在on后面,如果额外增加对驱动表和被驱动表的过滤条件,放到on或者where后面都不会报错,但是得到的结果集却是不一样的???

        1.1 mysql连接的原理

        众所周知,mysql是基于嵌套循环连接(Nested-Loop Join,暂不考虑优化算法)算法来进行表之间的连接操作的,大致过程如下:

        • 选取驱动表,使用与驱动表相关的过滤条件执行对驱动表的单表查询;
        • 对于查询到的驱动表中的每一条纪录,分别到被驱动表中查找匹配的纪录。

        伪代码如下:

        for each row in t1 {      // 遍历满足对t1单表查询结果集中的每一条纪录    for each row in t2 {  // 对于某条t1纪录,遍历满足对t2单表查询结果集中的每一条纪录        if row satisfies join conditions, send to client    }}

        1.2 show warnings命令

        我们写的sql语句,在经过优化器优化后才会交给执行器执行,而show warnings命令则可以帮助我们获得优化器优化后的sql。

        2. 准备工作

        表结构如下:

        CREATE TABLE `student` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `stu_code` varchar(20) NOT NULL DEFAULT '',  `stu_name` varchar(30) NOT NULL DEFAULT '',  `stu_sex` varchar(10) NOT NULL DEFAULT '',  `stu_age` int(10) NOT NULL DEFAULT '0',  `stu_dept` varchar(30) NOT NULL DEFAULT '',  PRIMARY KEY (`id`) USING BTREE,  UNIQUE KEY `uq_stu_code` (`stu_code`)) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4CREATE TABLE `course` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `cou_code` varchar(20) NOT NULL DEFAULT '',  `cou_name` varchar(50) NOT NULL DEFAULT '',  `cou_score` int(10) NOT NULL DEFAULT '0',  `stu_code` varchar(20) NOT NULL DEFAULT '',  PRIMARY KEY (`id`) USING BTREE,  KEY `idx_stu_code_cou_code` (`stu_code`,`cou_code`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4

        表数据如下: 

        3. inner join内连接on、where的区别

        sql如下:

        select * from studentinner join course on student.stu_code = course.stu_codeand student.stu_code >= 3 and course.cou_score >= 80;

        执行explain+sql命令: 

        执行show warnings命令: 

        阅读剩余部分

        相关阅读 >>

        只会sql能找什么工作?

        sql server数据库怎么安装?

        sql top 查询前几行

        sql是什么型数据库管理系统

        在sql查询中group by的含义是什么

        sql insert语句怎么写

        一分钟带你了解sql injection

        phpmyadmin是sql吗

        浅谈mysql 视图、触发器以及存储过程

        “select 1 from table”什么意思

        更多相关阅读请进入《sql》频道 >>


        数据库系统概念 第6版
        书籍

        数据库系统概念 第6版

        机械工业出版社

        本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



        在线咨询 拨打电话