SQL 左连接、右链接、内连接

目录

一、左连接的定义:

二、右连接的定义:

三、内链接:

四、全连接

五、嵌套循环连接

六、排序合并连接

七、哈希连接

MySQL对JOIN的支持


一、左连接的定义:

   左连接(LEFT JOIN)是指将左边的表的所有行与右边的表进行连接,并返回匹配的结果。如果右边的表中没有与左边表匹配的行,则返回 NULL 值。左连接常用于获取左表中的所有数据以及与之相关的右表数据。

   是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。

  下边以A表和B表为例子,

A、B之间的左连接条件为:ano=bno;

查询语句为:SELECT * FROM `A` LEFT JOIN B ON ano=bno;

eg1:A表中的只有1条记录,B表中2条记录,B表的2条记录bno都等于ano,

A表:

SQL查询左连接、右连接、内连接[通俗易懂]

B表:

SQL查询左连接、右连接、内连接[通俗易懂]

查询语句:

SQL查询左连接、右连接、内连接[通俗易懂]

查询结果:将A表的记录都查询出来,B表中bno等于ano的都查询出来了且左侧为ano对应的信息。

eg2:A表中存在的ano,B表中不存在对应的bno;

A表:

SQL查询左连接、右连接、内连接[通俗易懂]

B表:

SQL查询左连接、右连接、内连接[通俗易懂]

查询语句:

SQL查询左连接、右连接、内连接[通俗易懂]

结果:A表的记录全部查询出来而且如果B没有bno=ano的记录时右侧显示为空,B表中只有bno=ano的记录查询出来了。

二、右连接的定义:

  是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。

eg:以上边的数据为例子,进行右连接测试如下:

SQL查询左连接、右连接、内连接[通俗易懂]

结果:a表只显示和b表id相等的2行数据,b表的记录全部显示出来

三、内链接:

  内连接(INNER JOIN)是最基本的 JOIN 类型之一。它会返回两个表中关联字段匹配的行,排除掉不匹配的行。内连接只返回匹配的结果,因此可以过滤掉不相关的数据,提高查询效率。 

使用比较运算符根据每个表共有的列的值匹配两个表中的行;

eg:继续以之前的数据为例子:

SQL查询左连接、右连接、内连接[通俗易懂]

结果:只显示a.aid=b.bid的2行记录

四、全连接

  全连接(FULL JOIN)是将两个表中的所有行进行连接,不论是否匹配。如果两个表中的某行在另一个表中没有匹配,那么将使用 NULL 值填充。全连接返回的结果包含了左连接和右连接的所有数据。

五、嵌套循环连接


嵌套循环 JOIN(Nested Loop Join)是一种简单但效率较低的 JOIN 算法。它的原理是对于左边的表中的每一行,都会与右边的表进行比较,并返回匹配的结果。这种算法适用于小规模数据的 JOIN 操作,但对于大规模数据,性能可能会受到影响。

嵌套循环 JOIN 的步骤如下:

  1. 对于左边的表,逐行读取每一行。
  2. 对于右边的表,逐行扫描,并与左边表的当前行进行比较。
  3. 如果连接字段的值匹配,则将两个表的匹配行合并,并返回结果。
  4. 继续对右边的表进行扫描,直到找到所有匹配的行。
  5. 然后,读取左边表的下一行,重复上述步骤,直到处理完所有行。

嵌套循环 JOIN 算法的时间复杂度为 O(n*m),其中 n 和 m 分别是左右表的行数。

六、排序合并连接


排序合并 JOIN(Merge Join)是一种更高效的 JOIN 算法。它的原理是先对连接字段进行排序,然后通过扫描两个已排序的表进行匹配。这种算法在处理大规模数据和非等值连接时效果显著。

排序合并 JOIN 的步骤如下:

  1. 对连接字段在左右两个表上进行排序。
  2. 同时扫描两个表,比较连接字段的值。
  3. 如果连接字段的值相等,则将两个表的匹配行合并,并返回结果。
  4. 继续扫描,直到找到所有匹配的行。
  5. 如果连接字段的值不相等,则根据排序顺序继续扫描。

排序合并 JOIN 利用了排序的优势,减少了扫描次数,提高了 JOIN 的效率。

七、哈希连接


  哈希 JOIN(Hash Join)是一种基于哈希表的 JOIN 算法。它通过将连接字段的值映射到哈希表中的桶中,然后对两个表进行哈希连接。哈希 JOIN 需要更多的内存,但对于大规模数据和非等值连接,它可以提供更好的性能。

哈希 JOIN 的步骤如下:

  1. 对于左边的表,将连接字段的值进行哈希计算,并将每个值存储到哈希表的相应桶中。
  2. 对于右边的表,逐行扫描并计算连接字段的哈希值。
  3. 在哈希表中查找匹配的哈希值,找到对应的桶。
  4. 将匹配的行合并,并返回结果。
  5. 继续扫描右边的表,直到找到所有匹配的行。

  哈希 JOIN 需要更多的内存来存储哈希表,但对于大规模数据和非等值连接,它可以提供更好的性能。

MySQL对JOIN的支持


相对于其他数据库管理系统,MySQL 在 JOIN 操作中的支持相对较少。它主要采用嵌套循环 JOIN 算法,而不支持哈希连接和排序合并连接。不过,在 MySQL 中有一些变种算法,可以帮助 MySQL 提高 JOIN 的执行效率。

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
SQL中的连接(Join)用于将两个或多个表中的数据关联起来,以便于查询数据。常见的连接类型包括左连接右连接内连接和外连接。 1. 左连接(Left Join):左连接返回左表中所有的数据记录,以及表中所有和左表匹配的数据记录。如果表中没有匹配的数据记录,则返回 NULL。左连接使用 "LEFT JOIN" 或 "LEFT OUTER JOIN" 关键字实现。 2. 右连接(Right Join):右连接返回表中所有的数据记录,以及左表中所有和表匹配的数据记录。如果左表中没有匹配的数据记录,则返回 NULL。右连接使用 "RIGHT JOIN" 或 "RIGHT OUTER JOIN" 关键字实现。 3. 内连接(Inner Join):内连接只返回左两表中都匹配的数据记录。内连接使用 "INNER JOIN" 或 "JOIN" 关键字实现。 4. 外连接(Outer Join):外连接分为左外连接和外连接,左外连接返回左表中所有的数据记录,以及表中所有和左表匹配的数据记录,如果表中没有匹配的数据记录,则返回 NULL;外连接返回表中所有的数据记录,以及左表中所有和表匹配的数据记录,如果左表中没有匹配的数据记录,则返回 NULL。外连接使用 "FULL OUTER JOIN" 或 "FULL JOIN" 关键字实现。 示例代码: ```sql -- 左连接 SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column; -- 右连接 SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column; -- 内连接 SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column; -- 左外连接 SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column; -- 外连接 SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column; -- 全外连接 SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Upaaui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值