学渣带你了解left join,right join的原理

【后端百科】mysql的join,left join,right join,full join分别是什么意思 在MySQL数据库中,JOIN操作是一种强大的工具,用于将两个或多个表中的数据进行组合,以满足复杂的查询需求。本文将详细介绍MySQL中的四种主要JOIN类型:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN(虽然MySQL不直接支持FULL OUTER JOIN,但可以通过其他方式实现类似效果),并对它们进行对比分析。MySQL提供了多种类型的JOIN操作,每种JOIN都有其特定的用途和语法。在实际应用中,应根据具体需求选择合适的JOIN类型。 阅读详情

今天做sql语句练习,用到left join,对得到的结果产生了疑惑,W3CSCHOOL上是这样描述left join的:
这里写图片描述
可为什么我的结果中左表中的记录会重复?
这里写图片描述
表和结果如下图:
TAB1:
TAB1
TAB2:
TAB2

sql语句:
SELECT * FROM TAB1 LEFT JOIN TAB2 ON (TAB1.TSIZE=TAB2.T_SIZE)

查询结果:
查询结果

结果中TAB1的(2,20)变成了2条,它究竟怎么增加的?

身为一个学渣感受到了书到用时方恨少是一种怎样的滋味。还好这是一个信息化时代,于是我搜了一下left join的原理….
LOADING…
LOADING…..
LOADING…….
法克鱿,找不到。
只好自己动手,丰衣足食了。

首先得了解sql语句的执行顺序,是这样的:
1、 FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1。
2、 ON:对VT1应用ON筛选器,只有那些使为真才被插入到TV2。
3、 OUTER (JOIN):如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行将作为外部行添加到VT2,生成TV3。如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表位置。
4、 WHERE:对TV3应用WHERE筛选器,只有使为true的行才插入TV4。
5、 GROUP BY:按GROUP BY子句中的列列表对TV4中的行进行分组,生成TV5。
6、 CUTE|ROLLUP:把超组插入VT5,生成VT6。
7、 HAVING:对VT6应用HAVING筛选器,只有使为true的组插入到VT7。
8、 SELECT:处理SELECT列表,产生VT8。
9、 DISTINCT:将重复的行从VT8中删除,产品VT9。
10、ORDER BY:将VT9中的行按ORDER BY子句中的列列表顺序,生成一个游标(VC10)。
11、TOP:从VC10的开始处选择指定数量或比例的行,生成表TV11,并返回给调用者。
PS:sql语句的执行顺序来自:http://wang286480403.iteye.com/blog/1899915

根据第1条,FROM中的两个表会执行笛卡尔积(不知道笛卡尔积的自己去查),那么TAB1和TAB2的笛卡尔积就是:
笛卡尔积

根据第2条,应用ON筛选,找到TSIZE和T_SIZE中相等的记录,结果是:
ON筛选

根据第3条,由于指定了left join(left join属于outer join啊!),需要保留左表中没有找到匹配的记录:
未匹配

最后按照sql语句得到的结果就是这个啦:
查询结果

懒得写了,right join同理。

以上是个人根据查到的资料总结的,有什么不对的地方欢迎指正。
这里写图片描述

【PostgreSQL】提高篇——深入了解不同类型的 JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)应用操作 JOIN 是 SQL 中一个强大的功能,能够帮助我们从多个表中获取相关数据。理解不同类型的 JOIN 及其应用场景,有助于编写高效的查询。通过合理使用 JOIN、优化性能和遵循最佳实践,可以显著提高数据库查询的效率和响应速度。希望以上介绍能够帮助你更好地理解和使用 SQL JOIN! 阅读详情

相关推荐

mysql, LEFT OUTER JOIN 与 LEFT JOIN,RIGHT OUTER JOIN 与RIGHT JOIN ,FULL OUTER JOIN 与 FULL JOIN区别与联系

I have seen joins called LEFT OUTER JOIN or RIGHT OUTER JOIN. In some places I have seen LEFT JOIN or RIGHT JOIN. I am confused by this. I posted a question 2 days ago, but I am unable to understand ...

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 4435

Left join原理

1、Left Join即保存左表的所有数据,然后和右表做连接操作,筛选出符合条件的数据,若右表中不存在左表对应的数据行,则该行右表相关字段置为空。 2、其实即执行原理可以视作,从左表(驱动表)逐行取出数据与右表(被驱动表)进行匹配,筛选出合理的数据。从这就可以看出,左表始终是逐行扫描的,但是右表却可以优化,如果在右表中的该连接字段上加了索引的话,那会极大的地提升执行速度。 3、所以引出了sql优化...

JustKian的博客 3876

LinuxMint 22.1(Ubuntu24.04)下通过Wine完美运行同花顺远航版的实战指南

本文详细介绍了在LinuxMint 22.1(Ubuntu24.04)系统下通过Wine完美运行同花顺远航版的实战指南。从基础环境准备到深度优化,包括Wine环境配置、同花顺远航版安装、字体显示调优、任务栏兼容性修复等关键步骤,帮助Linux用户高效使用同花顺远航版进行股票交易和行情分析。

weixin_30919429的博客 571

SQL 中 left join 的底层原理(各种JOIN的复杂度探究)

01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null。除了 left join 以外,还有 inner join、outer join、right join,这些不同的 join 能达到的什么样的效果,大家应该都了解了,如果不了解的可以看看网上的帖子或者随便一本 SQL 书都有讲的。今天我们不讲这些 join 能达到什么效果,我们主要讲这些 join 的底层原理是怎么实现的,也

weixin_43899069的博客 3524

昇腾Atlas Duo 300I推理卡实战:从零部署Qwen大模型推理服务

本文详细记录了在华为昇腾Atlas Duo 300I推理卡上,从零部署Qwen1.5-14B-Chat大模型推理服务的完整实战过程。涵盖环境准备、MindIE容器配置、CANN工具链安装、服务启动与API测试等关键步骤,并分享了性能观察与排错经验,为国产AI算力平台部署LLM推理服务提供了实用指南。

weixin_29084231的博客 1239

《python神经网络编程》程序实现

《python神经网络编程》程序实现 通过对这本书的学习,结合这本书的内容: 完成了以下代码: 其中NN.py实现了一个类,这个类可以完成神经网络的初始化,训练以及输入数据并得出结果。 而run.py则是对神经网络类的使用 NN.py: import numpy import scipy.special #神经网络类的实现 class neuralNetwork: #构造函数初始化类 def __init__(self,inputnodes,hiddennodes,outputnodes

ms8617484的博客 619

SQL中的——左连接(Left join)、右连接(Right join)、内连接(Inner join)

1.Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。 2.Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。 3.Inner join:即内连接,同时将两表作为参考对象,根据ON后给出的两表的条件将两表连接起

风中追风 10万+

【图神经网络】从0到1使用PyG手把手创建异构图

异构图的准确定义如下:异构图(Heterogeneous Graphs):一个异构图GGG有一组节点V=v1,v2,...,vnV=v_1,v_2,...,v_nV=v1​,v2​,...,vn​和一组边E=e1,e2,...,emE=e_1,e_2,...,e_mE=e1​,e2​,...,em​组成,其中每个节点和每条边都对应着一种类型,用TvT_vTv​表示节点类型的集合,TeT_eTe​表示边类型的集合,一个异构图有两个映射函数,分别将每个节点映射到其对应的类型ϕv:V→Tv\phi_v:V\rig

小哲的博客 7833

left join on 和where条件的放置以及多个left join连接的执行顺序

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。1 中间表 on条件: t1.size=t2.size and t2.name=‘AAA’ (条件不为真也会返回左表中的记录)2 再对中间表过滤 where 条件:where t2.name=‘AAA’1 中间表 on条件: t1.size=t2.size。顺序是先a,b组合成一个虚拟表,然后虚拟表再和C表关联。

一个搬砖工人 8533

学Simulink——基于直流电机的建模与控制场景实例:他励直流电机的起动与制动过程仿真

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

xiaoheshang_123的博客 227

分级 API Key 的使用案例

分级 API Key 的使用案例 1. 背景介绍 1.1 问题由来 随着网络服务的普及,API(Application Programming Interface,应用程序编程接口)成为了连接不同系统和应用的关键桥梁。API Key(API密钥)

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 998

一分钟让你搞明白 left join、right join和join的区别

left join、join、right join和inner join等等各种join的区别。网上搜,最常见的就是一张图解图,如下: 一张图道清所有join的区别 首先,我们先来建两张表,第一张表命名为kemu,第二张表命名为score: 一、left join 顾名思义,就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显...

Li_Jian_Hui_的博客 13万+

如何通过 Python 爬虫抓取并分析政府开放数据

通过本文的介绍,我们展示了如何使用Python 爬虫抓取并分析政府开放数据。通过requests获取政府开放数据的 API 接口数据。使用和pandas进行数据清洗与存储。使用matplotlib对数据进行可视化。你可以根据不同的政府开放平台和数据集进行调整,应用于不同领域的数据分析,如公共健康、交通、环保等。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1077

Mysql中Left Join、Right Join、Inner Join的区别

left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接): 只返回两个表中联结字段相等的行 举例如下: 表A记录如下: aID     aNum 1     a20050111 2     a20050112 3     a20050113 4   ...

一起理解技术趋势,沉淀长期价值 3317

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

inner join,left join和right join的区别

连接类型是否保留左表所有行?是否保留右表所有行?未匹配的字段填充INNER JOIN❌❌不保留未匹配行LEFT JOIN✔️❌右表字段为NULLRIGHT JOIN❌✔️左表字段为NULL。

m0_74642957的博客 2090

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

left join和right join

SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=tab...

二黑的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

无涯教程-MySQL - Left Join vs Right Join

MySQL主要有两种联接,分别是LEFT JOIN和RIGHT JOIN。这些联接之间的主要区别是包含不匹配的行。LEFT JOIN包括左侧的所有记录和右侧表的匹配行,而RIGHT JOIN返回右侧的所有行和左侧表的不匹配行。在本节中,将了解LEFT和RIGHT连接之间的流行区别。在探索比较之前,让无涯教程首先了解MySQL中的JOIN,LEFT JOIN和RIGHT JOIN子句。

无涯教程 1126

Mysql left join,right join,inner join的效率比较

一.Join语法概述join 用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditionatable1:左表;table2:右表。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。LEFT JOIN(左连接):取得左表(table1)完全记录...

隐居者 1万+

join, left join , inner join ,right join 的用法详解

总是使用 WHERE 条件:避免意外更新或删除所有数据 使用事务:重要的数据操作要放在事务中 建立索引:在经常查询的列上建立索引提高性能 **避免 SELECT ***:只选择需要的列 使用参数化查询:防止 SQL 注入攻击 定期备份:重要数据定期备份

JAVA领域优质创作者,基于分片网络查询方法专利发明者。 1403

mysql中left join,right join,inner join,outer join 用法详解

非常惭愧用了这么久的mysql居然没有用过outer join和inner join,对outer join的认识也仅是知道它是外连结,至于什么用途都不清楚,至于还有没有left outer join更是不得而知,某天有人问起,才想起自己mysql知识的贫乏,赶紧找了一下网上的left join,right join,inner join,outer join的用法来学习一下。

onlyquan3的博客 8067

[498]left join、inner join、right join、full outer join的区别

sql的left join 、right join 、inner join之间的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 t_user表 t_class表 sql语句:(左联结) select u...

周小董 5855

MySQL中的JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN讲解

在 MySQL 中,JOIN 是一种非常强大的功能,它允许你将两个或多个表中的行结合起来,基于两个表之间的共同字段。这种操作在数据库查询中非常常见,特别是在处理关系型数据库时。下面我将分别解释 JOIN、LEFT JOIN(也称为 LEFT OUTER JOIN)和 RIGHT JOIN(也称为 RIGHT OUTER JOIN)的基本概念和用法。

JACKAL 3万+

LEFT JOIN、RIGHT JOIN与FULL JOIN

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行 数据源: Persion表: Orders表: LEFT JOIN //使用left join查询,只要左表有匹配的条件,就会生成一行,右表的列值为空。 SELECT Persons.LastName, Pe...

weixin_41514286的博客 2191

sql中left join和right join混用

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 如上所言,我们只做一下left join的实验,right join和left join 类似

Jackroyal的专栏 7719

left join、right join、inner join之间的区别

Sql中 left join 、right join 、inner join 之间的区别: left join(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。 right join(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。 inner join(等值连接/内连接):只返回两个表中连接字段相等的行。 例: 表A记录如下: aID     aNum 1  ...

BestEternity的博客 2455
上一篇: PS缺失msvcp120.dll,msvcp140.dll和VCRUNTIME140.dll
下一篇: 分公司开办流程图
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值