MySQL中JOIN连接的基本用法实例

 更新时间:2022年06月02日 11:46:49   作者:KKKLxxx  
大家对join应该都不会陌生,join可以将两个表连接起来,下面这篇文章主要给大家介绍了关于MySQL中JOIN连接用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

join流程详解

join 是指 将两个表连接起来,两个表分别为 驱动表 和 被驱动表。

我们拿下面的这个sql举例,

select t1.id,t2.id  from t1 inner join t2 on t1.id = t2.id  where t1.id > 10;

t1和t2 都对 id 建立了索引,我们假设 t1 是驱动表,t2是被驱动表。

join流程如下:

1、MySQL每次从t1中读取一行满足过滤条件t1.id>10的记录,如果有索引的话,就利用索引快速定位到表t1中符合t1.id>10的记录。如果没有索引的话,就从头到尾遍历,慢慢的查出表t1中符合t1.id>10的记录。

2、当从t1中读取到一条记录r1后,就根据连接的条件,也就是 on关键字后的条件,去t2中对应的t2中的记录,将t1的记录和t2的记录组合返回给客户端.

具体的说就是,当从t1中得到一条记录r1的时候,需要根据连接条件 t1.id = t2.id,也就是去t2中查询是否存在记录r2 ,其中r2.id = r1.id。
也就是执行 select t2.id from t2 where t2.id = r1.id

如果有t2的id有索引的话,那么查询速度是很快的,否则就只能全盘扫描了。

3、就这样,依次的读取t1中符合条件的记录,然后查询t2,直到t1中的记录读取完毕

从上述流程可以看出,join的大致过程就是从驱动表中挨个读取符合条件的记录,然后根据连接条件到被驱动表中找出符合条件的记录,将其组合到一起返回给客户端。

JOIN用于连表查询,主要有5种用法。下面分别演示这5种用法

随便建2张表,结构如下

 字段col1用来使两张表有一个同名字段的(但其实没什么用,因为查询条件都需要用ON来指定,这里只是说明一下如果有相同的字段名也没什么影响)

一、笛卡尔积:CROSS JOIN

CROSS JOIN使两张表的所有字段直接进行笛卡尔积,假设表1有m条数据,表2有n条数据,则结果数量为m*n条

SELECT * FROM tab1 CROSS JOIN tab2

结果

二、内连接:INNER JOIN

内连接需要用ON来指定两张表需要比较的字段,最终结果只显示满足条件的数据

SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id1 = tab2.id2

 结果

注意到内连接只把满足ON条件的数据相连接,与笛卡尔积不同

三、左连接:LEFT JOIN

左连接可以看做在内连接的基础上,把左表中不满足ON条件的数据也显示出来,但结果中的右表部分中的数据为NULL

SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2

结果

四、右连接:RIGHT JOIN

右连接就是与左连接完全相反

SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2

结果

五、全连接:OUTER JOIN

全连接就是左连接和右连接的并集,但是MySQL中并不支持全连接的写法

SELECT * FROM tab1 OUTER JOIN tab2 ON tab1.id1 = tab2.id2

不过可以用UNION联合左连接和右连接的结果来代替

SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2
UNION
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2

结果

总结

到此这篇关于MySQL中JOIN连接基本用法的文章就介绍到这了,更多相关MySQL JOIN用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析mysql 语句的调度优先级及改变

    浅析mysql 语句的调度优先级及改变

    本篇文章是对mysql语句的调度优先级及改变进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法

    Riddle漏洞存在于DBMS Oracle MySQL中,攻击者可以利用漏洞和中间人身份窃取用户名和密码。下面小编给大家带来了MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法,需要的朋友参考下吧
    2018-01-01
  • MySQL中Replace语句用法实例详解

    MySQL中Replace语句用法实例详解

    mysql的replace函数是一个非常方便的替换函数,下面这篇文章主要给大家给大家介绍了关于MySQL中Replace语句用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MySQL中substr函数使用方法实例详解

    MySQL中substr函数使用方法实例详解

    MySQL的SUBSTR()函数可以用于从指定字符串的指定位置开始提取指定长度的字符,下面这篇文章主要给大家介绍了关于MySQL中substr函数使用方法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-08-08
  • mysql中insert与select的嵌套使用解决组合字段插入问题

    mysql中insert与select的嵌套使用解决组合字段插入问题

    本节主要介绍了mysql中insert与select的嵌套使用解决组合字段插入问题,需要的朋友可以参考下
    2014-07-07
  • 创建mysql表分区的方法

    创建mysql表分区的方法

    我来给大家介绍一下mysql表分区创建与使用吧,希望对各位同学会有所帮助。表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册。
    2013-10-10
  • 一篇文章带你了解MySQL数据库约束

    一篇文章带你了解MySQL数据库约束

    数据库中要管理很多数据,但是这些数据是否正确、是否非法,光靠人力来检验是远远不够的,因此我们想让数据库拥有丰富的检验和校验能力,所以便引入了约束,下面这篇文章主要给大家介绍了关于MySQL数据库约束的相关资料,需要的朋友可以参考下
    2023-06-06
  • Win10 64位使用压缩包安装最新MySQL8.0.18的教程(图文详解)

    Win10 64位使用压缩包安装最新MySQL8.0.18的教程(图文详解)

    本文通过图文并茂的形式给大家介绍了WIN10 64位使用压缩包安装最新MySQL8.0.18的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 手把手教你使用Navicat查询表的详细结构

    手把手教你使用Navicat查询表的详细结构

    在使用Navicat时,我们可以通过执行一些SQL语句来查看表结构,下面这篇文章主要给大家介绍了关于如何使用Navicat查询表的详细结构,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • MySQL性能优化之如何高效正确的使用索引

    MySQL性能优化之如何高效正确的使用索引

    这篇文章主要介绍了MySQL如何高效正确的使用索引,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08

最新评论