今天我们讲解婴儿照应查询,有时为了得到完整的结果,我们需要从两个或更多的表中获取结果, 就需要执行应的照应查询。如何做呢?请看演示。这里有两张表,一张是职员表 e m p, 一张是部盟表 d e p t。 我们先看一下两张表的数据, slate 星 from rom e m p slat 幸福 ram d e p t 选中执行代码,按快捷键 f 五执行,执行成功。职员表 e m p 中只有部门编号列,没有部门名称列。如何把两个表联合起来查询,得到一个结果显示 职员名称和所在的部门名称。这样写,请看 sled 查询关键字后面写列名称,这里我们写 emp 点一内母 emp 表的职员姓名逗号 d e p t 点 d name d e p t 表的部门名称 from 关键字后面写表名称这里我们写 e m p 后面我们写 inner 照影表引用关键字后面写引用到的表名称,这里我们写 d e p t 后面写奥是关键字后面写 两表引用的链的关联,这里我们写 e m p 点 d e p t n o。 等于 d e p t 点儿 d e p t n o。 给大家解释下这句代码的意思。 通过英的照影,引用 emp 表的部门编号列和 dept 表的部门编号列,查询职员姓名和所在的部门名称。选中执行代码,按快捷键 f 五执行,执行成功。 这就是 emp 表和第一 pt 表通过婴儿照应查询的结果。看起来有点乱,我们给部门名称排个序,看起来整齐一些。 排序关键字 order by 后面写排序列名称,这里我们写 d e p t 点 d name。 给部门名称排序,选中 执行代码,按快捷 nf 五执行,执行成功。现在看起来要整齐一些, 大家需要注意, inner 照应和照应是相同的,我们修改 inner 照应为照应, 显示结果是一样的,请看选中执行代码,按快捷 nf 五执行,执行成功,显示结果是一样的。下一节我们讲解 left join。
粉丝1102获赞3992

大家好,今天我们接着来聊一下系列语句的关联多表关联查询, 那第一点的内容是内连接啊,第二点的内容是左外连接,还有第三点肉外连接。 那我们在说这些语句的用法之前呢,我们先来了解一下我们为什么要做多表的关联查询, 那我们打开软件看一下,这是我们的员工资料表啊,或者说是员工资料的录入 模块,那么我们看到这里有很多员工的资料了,那下面这个地方我们先看一下下面这个表,这个表呢是我们的每个员工所对应的呃工作履历表,比如说李氏的工作履历, 那也就说我们这个员工资料的呃软件模块是由两个表组成的,一个是我们的员工资料的基础表,另外一个就是我们那个工作履历的词表,是每个员工的 啊,工作履历指表,我们看一下数据库里面啊,这一个就是我们员工资料的技术表,那这一个呢就是我们工作履历的呃指表, 那么这两个表呢,就是我们后面要做演示用的两个表了。首先我们先来看一下内连接,它的关键字是 electron, 那么它的语句的形式就是这样子的一个结构啊,从失恋,然后 from 假表, 然后音列最仪表,然后呢后面是 on 的条件, 就是他们之间的字段关联字段,那么我们给他那个假表有一个标识是 a, 仪表的标识是 b, 然后 on on, 后面是对应它的条件,这个就是内连接。我们我们先看一下数据库里面他们有关联关系的两个字段,首先是工作理念表里面的 p i d, 他是关联了呃,员工资料表的 id, 所以呢,他应该是我们举个例子啊,先举个例子看看,首先我们输入这条, 我们把这个表,这个是员工资料表,我给他一个标识是 a, 然后 in the dream, 呃,然后是工作履历, 给它的标识是 b, 然后 on one 什么呢? on a 的 i d 等于 b 的 p i d, 那么就把它关联起来了。 然后我们执行一下啊,看到有三条记录,这里面呢,前面这部分呢,是呃员工资料, 然后我们拉过来,拉到这里,这个 id 开始,后面的这些内容都是工作领域的表的资料 啊,这个就是张三的工作理念,这是李四的工作理念, 大家看到就是这边的, 那为什么只有三条了?我们看一下。呃,玩我其他人的,他的工作里面都是没有填写内容的,都是空的, 所以呢,我们内联的查询只能查出三条记录啊,我们给啊,给王五也增加一个,随便给他增 加一个工作领域的资料,随便说点东西吧, 然后啊,然后保持一下,然后我们再查询 好了,就有四条记录了,这是王五的呃员工资料信息。那么另外这一边呢,下面最后这一条就是王五的工作履历的资料了。 那我们回过头来,再看看内连接的作用,它的作用就是查询出假表,呃,跟仪表条件相同的记录, 那也就是说只查出 on 后面的那个条件,呃, 符合那个条件的那些记录,而不符合这个条件的记录是没办法查询出来的。然后我们接下来再说说左外连接, 左外连接它的作用是什么呢?它是以左边的表,我们叫假表为基础,然后呢,查询出条件相同的记录 是以假表为基础啊,如果右边的表叫仪表吧,我们啊,这个仪表 仪表有些记录是没办法满足 on 后面的那个条件的,那么他对应的字段就等于论,那么他左边的表呢,会全部记录查询出来,而关键字就是 lip drive。 呃语句的表现形式跟 三遍差不多,只是那个 in need 改成了 lip on 后面的那个字段形式也是差不多的。 然后我们也举个例子,新建一个查询,然后我们说一下语句,同样还是用那个员工资料跟呃工作领域这两张表来做例子, 给他个标识是 a, 然后 on on 的条件是一样的,都是 a 的 id 等于 b 的 p id 啊,这个地方少了一个砖, 少了个关键词啊,你仔细一下啊,大家看到了,记录是很多,比刚才的那个内敛要多很多, 因为这张表的所有记录,就左边这张表的所有记录会被全部查询出来,照相率是这样, 那下来所有的记录都查询出来了,再拉到这边,我们找到这个 id 啊,这些 id 呢,这些字文全部都是认字 啊,因为他是不符合条件的,那符合条件的只有上面这四条,就是张三李四王五, 因为只有他们才填的那个呃工作领域的资料。而下面这些呢,因为他们没有填,所以他们虽然查询出来有记录,但是他的值所对应的全部都是冷值。 呃,如果说我们再加一个 vr 条件,后面再加一个 vr 条件把 b 就是我们那个工作领域的表的 id 啊, id 给他一个 is not learn, 也就说非空的条件。 然后我们查一下啊,得到的结果呢?拿过来再看一下得到 的结果,这边跟我们之前类连接的结果是一样的, 所以大家可以想一下他们之间到底有什么区别啊?我们这两个例子大家可以思考一下, 其实就主要在那个 on 后面的条件,他们条件虽然一样,但是起到的作用就不一样了,大家可以想一想。那么接下来呢,我们接着说一下入外连接 它的作用呢?其实跟左外连接是差不多的,只是它的基基准啊,仪表是右边的,那么它的基准就是仪表为啊为准了, 那它关键字就是啊 y 转形式语句的形式也是差不多, 只不过说假表跟仪表他分开了左右两边,仪表在右边,我们的仪表在右边,那么他就是以仪表为基准来进行查询。我们也做举个例子吧, 把这个依据直接复制过去,然后呢,我们把这个关键词由 lip 改成 y, 呃,然后呢,我们把那个两个表互换一下,就是把那个工作领力表放在左边,然后把那个员工资料表 放在右边,那这个是工作比例表,这个工作比例,然后右边的这个是我们的员工资料。 那好,那我们你呃确定了之后,确定之后我们执行一下看看。大家看到了这边的都是工作领域的信息,他有很多是嫩的,为什么?因为他是有, 嗯,是以右边的员工资料表为基准的,就是这个员工资料表。我们拉过来看一下这个 id 这一列右边的所有都是员工资料的信息, 然后左边这些呢就是工作履历的信息, 然后我们也给他个条件呢,加个条件,呃,那我们让那个 a a 的 it is 老认,也就是我们排除所有呃员工礼仪表的控制控的记录啊,看到了这边的 工作领地信息和右边的员工资料,其实就跟我们呃左联的 查询出来结果是差不多,只不过说他们的呃左右两边的位置换了一下而已,这就是右关联啊,右外联的一个成 查询的情况,那么下面一个是船外连接,一个是交叉连接,我们简单的说一下他们的作用吧。呃,全外连接,他是查询出两个表的并机,我们的内连是交集啊,这里要区分一下 啊。然后那个交叉连接呢?它有个特点就是不能使用 on 啊,不能使用 on, 然后它查询出两个表的记录的成绩数,成绩的数量啊,是这样的作用, 那多表光年是不是只能查询两张表了?肯定不是了啊,我们比如说在这个地方加个括号,然后在这不,不对啊,在在后面这里再加个括号,把它括起来,然后呢,我们 给它一个标示,一个标示 c, 这样给它命名是 c 这个数据机,然后我们同样的再加一个 in need drive, 然后呢,我们呃给一张随便起个名字吧,叫表三啊,这是第三张表, 然后给他一个标示是 d d, 这样,然后呢,同样要 one, one 什么呢? one, 呃,比如说是 a 的 id 等于 d 的,呃, pid, 这样子 啊,这个假设。当然啊,这种形式吧,应该说这种形式就可以呃起到三张表的呃关联查询了 啊。那好,那今天的视频就先到这里啊,感谢大家的收看,谢谢。

哈喽,大家好,那么整个本期的内容呢,我们继续接着上期的内容往后讲,上期内容呢,我们讲到了这个啊连接查询的这个分类有内连接、外连接、交叉连接和字连接,然后本期内容呢,我们就根据这几大类,然后 啊去做一个详细的一个讲解,以及实际的这个操作。那么在我们前面讲的这个连接查询连接 连接查询中,其实呢就是我们的这个内连接,内连接默认连接查询默认就是这个就是内连接, 那么关键字是音呢?音呢?中音,关键词,我们的音呢?中音,这音呢?我们在前面讲呢,这音呢他是可以,他是可以省略的,我们直接写中音,那他就是我们这个内连接,那么内连接呢?我们 昨天,然后前面讲到了什么呢?那连接呢,他是我们这个默认的连接方式,只有当两个表中都满足存在条件的记录时才会返回啊,然后他分为等式连接、 自然连接和不等值连接。那么我们通常用的呢啊,这个连接呢叫做我们这个啊,音浪座椅也是我们这个啊等值连接,那么我们这个之前讲的这个座椅啊,之前讲了一堆啊,一二三四的这个四十的这个座椅 都是在讲内连接,嗯,因为内连接呢是我们所有连接的,这个啊最基础的部分,我们还把预防回复一下,它的预防是什么呢? 我们这个念念零九,我们就直接写哈,不容表明。 in a join in a join 我们的这个叫什么呢? scoring for on student info, 点它的一个是你的 st id 等于高音波里面的这个啊,是 tuid, 那么这个是我们这个啊啊,前面讲到的这个桌椅,这个桌椅之前是把他省略写了的,因为我们还没讲他的, 这样我们查询到了啊,这个啊,所有学生的这个啊,考试的这个成绩,然后呢我们把它加上什么呢?加上我们这个桌椅,加上婴儿, 他的结果级是一样的他的结果级是一样的,他的结果级是一样的。这个就是我们这个啊,基础的这个类连接,他返回就是啊同等条件下的这样的数据级。然后呢我们还要讲今天还要讲一个什么呢?左外连接, 就是我们这里讲到的外连接,那么外连接分为三种,左外连接、右外连接和交叉连接。今天我们讲第一种左外连接,那么左外连接的他的这个关键就是 let alt joy 中间的 alt 是可以省略的,那么我们来看一下我们的, 那用什么表来讲例子呢?就是学生表,因为在我们这个之前的这个成绩表里面呢啊,他涉及到三个表,三种三种科目的这个成绩,就是没有把它细分的啊,很,嗯,很细化。 那么今天我们要讲这个左腕连接,为了这个提升这个啊连接呢,然后我们把用两个表,一个是学生表和加瓦成这样来 椅子 加哇,这这两个表,这是我们加哇的这个啊,这个成绩表 是学生的这个成绩表。那么现在我们要来做什么呢?首先我们看一下他这两个,我们可以我们用内连接来操作到是什么用用,哎,怎么回事? 用内连接也就是 inner join 啊,查询的呢,是所有参加了考试的学生, 所有参加考试的学生就是有考试成绩的,也就是有考试成绩的学生信息。那么今天我们要要用左连键来查询,就是我们要把什么 director syndrome, student info room, student info s, 额, left outer join 左连接我们的什么呢? 左连接我们这个加我的成绩啊, s d r s t u i d 等于 j 点儿 to i d。 然后呢这个时候我们来看一下他得到的数据是什么? 然后我们来看一下啊,哦,这个是成绩,这边是成绩,这是我们的学生。然后大家可以发现最后一行数据就是单位的,单位的他的这个这些数据后, 后面的这个表的数据都是为空的,那么这说明他是没有参加考试的,他的成绩是空的,他没有参加考试。那么这个就应验了什么呢?就来比对我们这个结果,左外连接,左连接 f 二十周以 返回左表中的数据。行,即便是右表中没有满足左表的记录也是可以的。这个时候无论满这个时候无满足左表的数据,那么用闹来填充, 用蜡来填充,那这个时候就是没有数据的,他就是没有参加考试的,他的结果及时有十三条。那么当我们用什么呢?用我们之前讲到的内连接,也是我们的这个啊音呢, 一是桌椅,或者叫婴儿桌椅,婴儿桌椅,那么他得到结果是十二条,十二条, 为什么他是十二条?因为呢?在啊我们的这个呃交往成绩表当中呢,他的这个成绩他是缺席的,有一个有一个学员对位的,他的成绩是没有的,所以说当他是等值连接的时候呢,他那条数据将不被取,不被取出来不会被返回, 这个是从内年结合外年结的这个区别,内年结合外年结的这个区别就到这里, 然后呢我们来看一下,再看一下这个 let off drawing out 是可以省略的,这个时候我们把它给去掉,他们俩是结果机, 他们俩的结果肌是一样的,他们俩的结果肌也是一样的,这个就是我们的这个啊,最基础的这个啊,左外连接的这个用法。那他那他这个链呢?他也是可以跟我们的这个 基础的啊,单表查询和啊内链接中影的用法是一样,你可以选择他的某一部分啊,那我这个学生表里面信息我都要,那么下面我要什么呢?要揭掉里面的这个成绩,我只要成绩,是吧?我只要成绩。那这个时候我们得到的是什么呢? 得到的是啊学生信息加上他的这个成绩,加上他的这个成绩,因为成绩成绩是记录在这个僵尸库这个表里面的,所以这个时候呢,我们就需要用啊两个表去组合查询他的这个 数据,这就是我们今天要讲的最基本最基本的左连接,也就是左外连接 let art join alt 可省略, alt 可省略。他查到的结果是什么呢? 查到的结果是返回左表中所有的行,即便是右表中没有满足左表的记录也是可以的,这个时候无满足左表的数据,用,然后填充,今天就到这里。

接下来我们了解一下这个多表查询的语法,那么在思考的发展过程中呢,出现过两种多表连接的语法,一种是八六年的这个标准, 那他直接使用就是在这个 from 加 well 条件这种方式呢来指定这个表之间的关联。另外一种呢是使用这个最新的这个 drawing 和 on 这两个关键字。那我们先来看一下这个比较老的传统的这个语法,在这里呢我们可以看到 我们这个查询呢,他是引用了两个表,一个是推宝一,我们说了这个时候我们使用这个别名就比较方便了,给他定一个别名推宝二给他另外一个别名也是踢二。那么我们 先看这个上面的引用,我们看一下假如说我们这两个表呢,有一个相同的字段都叫 colome1, 这个时候呢,我们如果想引用这 colo mine 的时候呢,必须是加上这个表限定,表示我们想使用哪个表的这个 colo mine, 如果你不使用的话,那这个社会解析的时候他就不知道了,不知道你到底是要哪一个表中的信息。 紧接着我们看一下这个 vr, 我们在 vr 里头呢指定了一个条件,通常是这个等值条件, 也就是我们认为这个表一他的 com 二等于表二的 coloum 三,这些数据才是满足我们这个查询的要求的数据。 这里呢他指定的就是一个表和表之间的一个关联,或者说是他的一个这个连接 的一个条件,这是一个比较老的这种语法,那么我们再看一下这个新的语法, 这里我们可以看到新的语法引用了这个两个关键字,一个是叫做 joy join, 就是连接的意思,这里呢我们是定义了表一,它的别名是题一 join 这个第二个表,也就是连接这个表 on 基于什么经营桌椅这里呢?实际上就是我们那个 wy 条件,我们可以看到这个新的语法呢,它语义上比较清晰, 而且呢他也可以结合这个威尔进行使用,我们后面还可以加上一个威尔条件,那威尔条件我们可以做一些其他的过滤,而这个庄严奥呢 表示这个表之间的一个连接,那么来看一些这种连接的视力, 我们来做一个查询,那么我们的连接呢?这里我们是连接两个表,一个是这个员工表, 我们先看一下这种老的语法, 比如说不明表它是 t, 你先把这个 使用这个旧的语法,我们写上这个点击的条件,也就是员工的 部门 id 等于部门的 id, 我们通过这个员工表的这个部门 id 和部门表的这个部门 id 给他进行一个等值关联,也就是说查找到这些值相同的,这样的话呢我们就找到这个员工以及他所对应的这个部门。 这里我们可以看到我们引用的这个这几个信息呢,都是带这个,相当于是 表的这个别名引用,表明我们是想要来自于哪个表, 这里呢?我们显示了两个部门 id, 一个是来自一部门表,一个是来自员工表,那同时我们还可以显示一些这种 同部门表的这个信息。我们做关联,通常是为了去获取这个 两个表中的不同的信息, 那么这个查询我们先看一下这个声音,结果 这里少了一些这个逗号,再看一下 表,护士图不存在,第趴的门就错了,趴的门部门表是这样的,这里我们可以看一下。 由于我们使用的是这两个部门中的这个部门 id 做一个等值关联,因此我显示的这两个表的这个部门 id 他都是相同的,这就是我们进行这个关联查询的一个条件。 然后呢我们显示了这个每一个员工他的姓名,同时呢他所在的部门的一个名称。这些信息我们是来自于两个表,也就是我们通过这个两个表的关 年呢,分别从这两个表取出了一些不同的信息。那么我们再看一下,使用这个最新的语法怎么实现这个,我们说到最新的语法,我们是加了一个关键字把这个转, 然后呢这个 y 条件用 on 来表示, 我们可以看到这个直行结果呢跟这个前面的这个写法呢,效果是一样的,弹出来的内容也是一样的。 当然我们刚才说了这个新的参与法他的一些好处,比如说如果我们这个还想加一些其他条件,比如说 why 啊什么的这种, 你说这个 y 他员工的这个 薪水呢?比如说大于五千,看一下。那么这种语法呢, 意思就是说我们把一些查询条件放在 wear 里头,我们把这个两个表之间的关联关系放到专用奥里头,这样羽翼上呢,就比较清晰一点了。 如果我们把所有的这个条件都放在这个外里头呢?这个表关联的关系呢也放在外里头呢?这个就混淆在一起了, 当然啊,这个我们介绍的这个查询呢,在这个其他设计会也是一样的,所以我们就其实我们可以随便看一个这个 pg, 没看到都是通用的这种语法, 当然我们还是推荐大家使用这种最新的这个遮阳网的语法,所以我们的后面的视力也主要是以这个遮阳网为主。

你的搜口是在内存里飙车还是在磁盘上摩擦?理想状态下,买搜口走三个 pass 点亮内存排序用 cpu 计算,这是性能的上限。但现实中,大自动往往导致算法降级为 two pass, 被迫回显卡做弱 id 排序, 那就导致瓶颈瞬间从 cpu 转移到了显卡 lps, 这也是慢查询的根源。这种降级通常发生的悄无声息,即便你的所有设计看起来非常的完美。 个简单的例子,在这个经典的分页查询中,沃尔条件和 old bay 完美命中的 c t a g 你 要锁影。从自身计划来看,锁钥覆盖了过滤与排序逻辑,无懈可击。隐患在于 select 的 星引入 content 的 这样的大文本字段,而 my sql 的 stored buffer 空间是有限的。 当单行数据的总长度超过了 max length for stored data 这个关键预值时,优化期会判定内存缓冲区过小,无法容纳完整的宽行数据进行预值。 如果航款小于预值,走全自动模式,所以另一次性载入排序及最终结果无需二次访问此盘,这是最搞笑的路径。而一旦大于预值,引擎只能选择 to pass 算法。 为了防止内存溢出,它会剥离所有非排序字段,只将主键 id 和排序键 a 键载入缓冲区。这意味着排序完成后手里只有一串有序的 id, 而业务真正需要的数据被留在了词盘上。 数据的不完整也就意味着必须进行二次读取,这正式性能崩盘的开始。在内存缓冲区中, id 虽然已经按规则排好了序,逻辑上是连续的,但在物理存储层面,这些 id 对 应的数据行往往是尼桑分布在不同赛区的。为了取回刚才被丢弃的卡顿的字段 字头,必须根据 id 逐个跳跃寻址。这种剧烈的随机读取会让磁盘 i o p s 瞬间饱和,原本秒级的 cpu 内存排序就这样变成了秒级的磁盘。物理寻道 想要解决这个问题很简单,可以采用延迟关联,也就是延迟雾化。通过重构锁口,我们将排序逻辑下层到只查询中,并且只提取 id。 由于只查询只涉及 id 和排序键,这一步完全走覆盖锁影,也就无需访问庞大的表数据文件, 直接在轻量级的数元数上就能完成扫描和排序,速度极快。拿到这一百个精确的 id 后,再通过九元操作回表获取完整数据,这时参与回表的数据量已被严格限制在分页范围内,且不再涉及排序开销。 通过最小化回表数据集,这样就将随机 l 的 影响降到了最低。视频涉及的详细资料,我整理进了两百万字的 java 与 a 大 模型学习资料里面了,里面包含了等三十多个技术站与一百多个项目场景实战笔记,还有不同工作连线同学的简历模板。以第一份 java 加 ai 三十天面试途径学习路线,学的话直接拿去。

哈喽,小伙伴们大家好,那么今天的这期内容呢,我们接着上一期内容往后讲啊,上一期呢我们讲到了这个呃蚯蚓的这个两个点联合查询,然后呢讲到了在里面怎么样使用公会办以及哈韵子句,那么今天呢,我们就继续吼,今天要讲什么呢? 今天要讲这个啊联合茶水连接茶水的这个分类啊,前面我们讲到的是基础的这个脚印的这个啊用法,因为先把这个啊作为一个切入点讲,然后我们再去讲一下我们的这个 分类有哪些,为什么要这样去去做他的哦?每一种类别主要是干什么用的?前面我们讲的是什么座椅,那么我们来看一下分类,那么在这个呃烧烤的这个连接查询里面呢,他的这个连接是分为很多种类的 来做一下,第一个要第一个是内连接,内连接查询,第二个是外连接,第三个是交叉连接,第四个是我们这个自连接,他总共分为这四大类。第一个内连接, 内连接是什么意思呢?默认是我们这个这个默认的连接方式音呢? join 婴儿桌椅,那么这个桌椅婴儿它是可以省略的,那么其实我们前面已经讲到了这个桌椅的这个用法,其实它就是默认的这个连接方式,也就是我们内连接婴儿桌椅 这个婴儿是可以省略的,也就是我们前面讲到的这个啊脚印的这个呢?这个脚印 我们这个婴儿加可以加上我们这个婴儿,他代表是一个末的连接,叫内连接方式。之前我们没有提出来细讲,是因为我想把 他的这个呃基础用法先讲完之后再来讲他的这种分类会比较好好理解一些。一呢中语,那么他反复的是什么呢?只有 只有我们之前已经讲到了,是吧?只有当两个 表中都存在满足条件的记录时,才返回 好采访啊,这是我们的这个啊,内连接的这个方式,当然内连接呢,它里面还会细分,那么细分呢,我们就留到后面来讲,因为细分,嗯,这个讲起连接起来会比较难一点,会比较难一点,所以我们这个地方就不讲。那我们可以提一下他们什么呢?本次连接, 等值连接,自然连接,还有这个哦,不等连接,不等值连接, 不等之年间。那么这个我们作为后面,在后面的内容在前面都理解的比较比较顺利之后,然后我们再把这个再啊再提出来讲,再把这个再提出来讲,所以我们这个就先来一个新号啊, 先来一个新号,然后就是第一个是内连接,内连接,我们刚刚讲到了,默认就是应当做应当可以省略 第二个外连接,那么外连接分为三种,左外连接、左左外连接、 右外连接、左外连接,右外连接,还有我们的这个呃,全连接, 全外连接,当他他可以,他有简称哈。左外连接,我们简称简称什么呢?左连接,左连接。 第二个右外连接可以剪成什么呢?右连接,全外连接,剪成 全连接,全全连接。就是啊,第二种全外连接。那么啊,左外连接是什么意思呢?左外连接呀,他是什么呢?返回左表中的 中等所有行, 即便是即便是什么呢?即便是右表 右表中没有满足左表的左表的记录也可以的,那么没有满足,这个时候无 满足左表的数据用绕填充,用绕填充,这是左外连接,那么右外连接呢?它是什么呢?它是返回 右表右外,你就是返回右表中的所有行,返回右外右表中的所有行。那么即便是 左表中没有满足右表的记录也是可以的。这个时候呢,无 满足右右表的数据,用老填充,还有我们的关键词念说是吧?第一个左外连就是 let joy, 他的关键,他的这个啊关键词。然后呢,右外连接,外侧外侧桌椅,右外连接,外侧桌椅全连接。那么全连接是什么呢?只要其中一个表,只要 其中一个表存在满足条件的记录就返回行,就返回行,只要一个表存在满足条件的记录就返回行。那么这个是啊,全年 间全连间呢? fo 中意,那么外连接呢?它还有一个什么呢?嗯,中间还有一个可省略,因为音呢,它有一个呃,可以省略的,那么同样的他们这个,嗯,左那个外连接呢?它有一个可可省略的 outer。 alter 之前没有写,是因为他是,他是可以省略,那么还可以提一下,让我们通常写的时候呢,我们都会把这个奥特给省略掉。 alter, 那么这是我们的这个外连接,那么交叉连接呢? class join。 class join。 他是干嘛用的呢? 他是我们的这个啊,交叉连接,从 两个表或者两个表,或者都或者多个表连接中 返回记录的。 d 卡耳机就是交叉,就是两两交叉这样的一个一个数据纸,那么最后一个字连接, 然后这个字连接是什么呢?字连接就是将一个表连接到,连接到自身,就是自己连接自己,自己连接自己就是假,就像就是类似于一个表中 存储了两个表的数据,然后自身连接,自身连接,那么他常用的这个案例就是呢,就是做这个类别品类,品类就是,嗯,有负类、 物类和子类关系的这种数据,我们经常把它存在于一个表盘中,然后去啊用这个字链接这样的一个插进笔,数一个,呃,数一棵树的这样的一个一个数据。 我们会用这个啊,小布加去啊去查询,去查询这是我们的这个,嗯,这个连接的种类,那么后面呢?我们会就这个,就这个这种连接方式, 内连接,外连接啊,交叉连接,字连接,每一个每个类都会用实际的案例去讲解,那今天就到这里。

各位小伙伴,本期教程我们讲一下 define 工作流查询 posgrace 数据库。先对上期内容做个更正,上期提到了要把自建的模式 supervision 设为默认,这是错误的操作,这很可能导致 define 无法运行, 所以依然是用 public 做默认的模式。首先来到工具,我们安装一个插件, root text to data。 来到工作流,新建工作流就叫 delete search paste, 我 们建立开始节点,添加文本变量,命名引铺的。 接着建立一个 rookie text 的 to date 节点, 这个节点是查询工作流的核心作用就是将人话翻译成 sql 语句,所以大模型选择厉害一点,就用千问三 max。 输入是开始节点的引铺的 返回数据格式一定要选 text 的 连接信息,这里是 ip 地址,不能写 local host 端口号,用户名,密码,数据库都是 define 默认的模式和表是我们上节课建好的。 添加第三个节点, root x q 的 circle, 先配置好连接信息, 待执行的 circle 语句是前面节点的输出, 最后增加一个结束节点, 我们测试一下 输入 id 是 一的工厂名称,返回是宁波大雕,整个工作流正确的执行了。各位小伙伴,本系列教程我们将停更一段时间,感谢一直以来陪伴我们的小伙伴。这个系列教程已经超过二十期, 无论是播放还是互动越来越惨淡,我们热爱创作和分享,作为创作者,我们制作的内容没人看是非常难受的, 现在的状况让我们不得不考虑一下重新规划内容,毕竟这套教程的内容排布有很大的问题。 现在初步的想法是 nba 和迪拜分开成两个系列,一个系列继续免费,一个系列上课堂,当然课堂的定价也绝对值得交个朋友,希望我们重新策划的内容能够有更好的效果。以上就是本期视频的全部内容了,敬请期待我们后续的更新。

嗨,我们天天都在跟 s q l 打交道,对吧?写个 select 呀, update 啊什么的。但是,你有没有那么一瞬间停下来想过,就这么一行简单单的查询语句,在它背后,到底藏着一个多复杂多有趣的世界呢? 好,那咱们今天就来当一回侦探。主角呢,就是屏幕上这条我们熟的不能再熟的查询语句了,我们就跟着他一起去 mycoco 的 内部世界走一趟,看看他从头到尾都经历了些什么。 你看,手指一动,按下回车键,刹的一下,结果就出来了。对我们来说啊,这好像就是一瞬间的事, 但实际上呢,就在你看不见的那个黑瞎子里, my sql 内部已经上演了一出大戏,各种组建,那叫一个精密写作啊。今天咱们就是要揭开这出戏的幕后故事。 好,那既然是探险,总得有张地图吧?喏,这就是我们今天的地图了。 my sql 的 逻辑架构图,你看它把 sql 语句要经过的那些站点啊,不是功能模块都标得清清楚楚。 简单来说, myico 可以 分成两大块,上面的 server 层和下面的储存引擎层。我们这次旅程呢,绝大部分时间都会在上面这个 server 层里转悠。 好啦,旅程开始,咱们的第一站,你可以把它想象成一个夜店门口的保安大格,或者叫门卫。你的查询欲想要进去可没那么容易,得先过它这一关的安检。 这个门卫呢,学名叫连接器,他的工作主要有三件,第一,得先跟你建立联系吧,就是完成那个 tcp 握手。 然后第二,他要对一下暗号,也就是检查你的用户名和密码对不对。最后,密码对了还不算晚,他还要翻一下小本本,也就是权限表,看看你到底有哪些权限,这些都搞定了才算放行。 那要是你过不了这一关会怎么样呢?嗯,比如说,密码输错了,门卫大哥直接就把你拦在门外,然后甩给你一个 access denied。 大家肯定都见过这个吧?还有一种情况就是你连接上了,但半天没动静,这个门卫大哥一看就把你的连接给断了。 这时候你再想发个请求,就会收到一个 loss connection 的 提示,那么一个连接成功了,但暂时没事干,它是个什么状态呢?咱们可以用 show process list 这个命令来看一下, 你看它的状态就是 sleep, 就 好像在打盹。不过啊,它可不会一直睡下去。有个叫 wait time out 的 参数,默认是八个小时,时间一到,这个连接就会被自动踢下线了。 这就引出了一个经典问题,到底用长连接还是短连接?长连接的好处是快,因为它省去了反复建立连接的麻烦。但坏处是,如果这种连接越急越多, myc 口的内存可能就会被承爆。就是我们常说的 o m m 短连接呢,每次用完就断,对资人很友好,但缺点就是每次都要重新走一遍连接流程,开销比较大。对了,如果你用的是 myico 五点七之后的版本,有个 myico reset connection 命令,它能在不重新握手的情况下重置连接状态,算是一个挺好的折中办法。 ok, 过了门卫这一关,我们的查询豫剧就迎来了一个机会,走捷径。这条捷径呢,叫查询缓存,你可以把它想象成一个 vip 通道,它其实就是一个键值,对,储存储 键呢,就是你的 s q l 豫剧值呢,就是这条豫剧上次执行完的结果。要是你的查询正好在缓存里,那可就太爽了,直接拿结果走人,后面那些复杂的步骤全都不用管了。 听起来是不是特别美好?但这里有个但是这条 vip 通道有个致命的毛病,他太容易失效了。只要你对一个表做了任何一丁点的更新,哪怕就改了一行数据,那跟这个表相关的所有查询缓存就通通被清空了。 你想想,对于现在这种更新频繁的应用来说,这缓存命中率得有多低呀?所以大多数情况下,他反而是个累赘。 也正是因为这个原因,查询环尘的命运可以说是相当坎坷了。一开始大家觉得它能提升性能,就把它加进来了,后来发现,哎,不对,这玩意效率太低,就把它变成了默认关闭。 最后呢,到了马拉松八点零,工程师们觉得忍无可忍了,干脆一不做二不休,把它彻底给删了。所以啊,在咱们现在用的新版马拉松里,这条 vip 通道已经封死了。 好吧,既然 vip 通道没得走了,那我们的查询预制只能老老实实的排队走标准流程了。这第二步就是要给我们的 sqo 预剧画一张蓝图,也就是搞清楚他到底想干嘛,然后规划一下怎么干。 画蓝图的第一步是交给分析器来做的,分析器就像一个语法老师,他主要干两件事,第一件叫词法分析, 就是把你的 sql 语句拆成一个个的单词,然后认出这些单词都是啥,比如 o select 是 个动词, t 是 个名词,表明 id 是 主语的一部分,列名。 第二件事叫语法分析,就是检查你这些单词组合起来符不符合马斯克的语法规定,句子通不通顺。 哎,要是你的 s q l 语法写错了,比如把 select 写成了 sell sit, 那 这个语法老师可就不可气了,他会马上发现,然后给你返回这个错误。这个错误信息咱们可太熟了,对吧?你看它还会提示你 usnir 什么什么,就是告诉你你大概是在哪个地方写错了。 语法检查通过。接下来就轮到咱们整个流程里最聪明、最核心的大脑出场了,它就是优化器,你可以把它看作是一位运筹帷幄的将军,或者说总策略式。 它的任务只有一个,为这条 s q l 语句找出一条成本最低、跑得最快的直行路径。 那优化器具体要做些什么决定呢?举个例子,比如你要转两张表, t 一 和 t 二,那你是先从 t 一 表里找数据,再去 t 二表里匹配呢?还是反过来先从 t 二表开始? 你看这两条路最后得到的结果是一模一样的,但执行起来速度可能一个在天上,一个在地下。优化器的工作就是根据他掌握的各种情报,比如哪个表的数据量大,哪个表有所引,来做出最明智的选择。 好了,到这指令也翻译好了,作战蓝图也制定完了,万事俱备,只欠东风。现在终于到了真刀真枪上战场的时候了, 真正去执行作战计划的就是这位执行器了,他就像是一线部队,非常听话,严格按照优化器给的那个蓝图来行动。具体怎么做呢?就是去调用下面存储引擎提供的那个蓝图来行动。具体怎么做呢?就是去调用下面存储引擎的捞上来。 咱们再回到最开始那个 select star from t where id 等于十的例子。假设啊,这个 id 列上没有任何缩影,执行器会怎么干呢?首先,他在动手前会再检查一下全链,确认你真的有权利查这张表。然后他就开始调用存储引擎的接口,说,喂,给我第一行数据。 拿到数据后,他判断一下 id 是 不是等于十,如果是,太好了,留下来放到结果集里,如果不是,那就扔掉。然后呢,他接着说,喂给我下一行数据,然后继续判断。如此循环,直到把这个表从头到尾扫一遍。 哦,到这里,咱们算是陪着这条 s q l 语句,把它在买色扣内部的奇妙旅程完整地走了一遍。你可能会想,哎,了解这么底层的细节,对我平时学写 c r u d 到底有啥用呢? 用处可太大了。咱们先快速回顾一下这几个角色,连接器就是那个看门的大哥,查询缓存是那个已经关了的 vip 通道,分析器是帮你改语病的语法老师, 优化器是运筹一危坡的总指挥。最后执行器是冲在一线干活的士兵。你看,每个角色分工明确,缺一不可。 所以关键来了,搞懂这个流程不是为了让你去跟别人吹牛,而是给了你一个解决实际问题的秘密武器。以后你再碰到慢查询,或者遇到一些奇奇怪怪的报错,你脑子里就会有这张徒弟能帮你快速的猜到问题大概是处在哪一站呢? 给你举个最实际的例子,咱们看慢查询日制的时候,经常会看到一个叫 rose examined 的 值,对吧?它表示扫描了多少行。 学完今天的内容你就明白了,这个数字其实就是那个执行器向存储引擎要了多少次数据的一个技术。如果这个值特别大,但你明明只要一行数据,那八成就是优化器没选对路,你的查询根本没用上锁瘾。 好,最后留给大家一个思考题,假如你的表里压根儿就没有一个叫 k 的 字段,但你偏要执行 select star from t where k 等于一,这时候 mysq 肯定会报错,说不认识 k 这个页。 那么问题来了,你觉得这个错误是在我们今天这趟旅程的哪一站被发现的呢?是连接器、分析器?优化器?还是执行器呢?好好想一想。

欢迎来到 cda 数据分析课程,掌握数据分析能力,提升您的职业技能,助力您在职场中脱颖而出。 大家好,我们继续讲 cda 认证一级的课程内容。第八章 circle 数据库的应用 我们上一节讲了呢,数据库查询域的单表查询,这节课我们来讲多表连接。 多表连接呢,我们分为内连接、左连接、右连接、全外连接、自连接和交叉连接和不等值不等值连接。我们首先看内连接, 内连接,这是最常用的连接方式,相当于集合论中的交集 啊,它是两个表过过连接的公段的两个结合的,结合的交集,只有当两个表中都存在满足连接条件的记录时,才会返回结果。 它的易错点是如果某行在另一张表中找不到匹配项,该行会在结果中完全消失啊。适用场景,获取两个实体之间有明确关联的数据,如既有学生信息,又有成绩的记录。 我们来看例子,多表连接查询是第一个,我们来看内连接查有订单的用户, 这是两张表。左边这个表呢,是 user 表啊,它包括 user 的 id 号,还用户的姓名啊,注册日期,还有它的这个推荐人啊。 右边这个表呢是订单表,包括订单的 id 号,还有 user id 号,订单的日期,订单金额和订单状态。从这里面我们可以看到这两张表的公历值呢,就是 user id, 那么他说的内连接这个集合,它的交集就是指就是假如这是 a 集合, 这是 b 集合,那么内连接就是这两个集合的交集,那么这个集合里面有一二三四,这个集合里面有一二三啊,四和闹都不是交集啊, 这是我们 user 里面我们给它起个别名啊,这个内连接的关键字是 in the joy, 我 们起个我们定代表起个别名叫 o 么?那么它的关键字连接的条件是什么呢?用 on 关键字把它连起来,就是优点 user id 等于 o 点 user id, 比如我们把所有的都取出来我们看,我们可以看一下, 这是他们最后联合的结果啊,就是一二三, 一二三,是这两个交集来把它把这个对应起来,两个 id 号一对一,一对一,二对二,三对三,这样连接起来,把这两张表就连接起来了, 它实际上就相当于一对这个一,然后呢,因为这还有一个一,所以我们再对一个一 二呢,对二三对三四,没有去掉 now 没有去掉啊,这就是内连接。 我们再来看一下左连接啊,左连接是以左表为基础,左表的所有基础都会显示,右表没有匹配项,则右表的字段显示为 now, 口诀就是左表全保留,右表看缘分,没缘补 now。 我 们还是以这个例子来看,刚才我们的是内连接,如果我们现在看左连接,那么就是 unit 表里面的这个 a 集合跟 order 表里面的 unit 的 b 集合,它什么呢?它是保留 a 集合的所有的啊,而 b 集合里面 它没有 a 集合里面的与 now 来替代啊。 我们再来看一下这个啊,这个 using 的是什么条件啊? using 条件,我们来说一下 using 就是 说刚才我们的连接,我们以这个例子来说一下啊, 如果说两个表的公共资料的名称是一样的,都叫 usid, 那 么我们可以用 usid 关联字来来声明, 它的区别是什么呢?就是说,如果是 on 的, 它会有两个 user id, 这是 a 表的 user id, 这个是 auto 表的 user id 都会保留。如果是用 user 呢?用 user 关键字呢?它只会保留一个 user id 啊,我们仔细看一下, 它只会保留一个 user id。 我 们再看一下左外连接啊, 左外连接的关键字是 left join, 我 们仍然是用 on 关键字来把它 u 点 user 等于 o 点 user id, 这是左连接。刚才我们说了,左表在右侧,里面只有一二三四,而 alt 表里面那个 b 集合,它只有一二三跟 now 啊,所以说 它左表里面的一二三四全部保留,而在右表当中,没有没有的记录,全部以 now 来替代。而原来右表中的那个 now 呢,就不再显示了啊, 就是右连接,就是以右边来开始, 左连接,以左边的开始,一对应一个一,再对应一个一二对应这个二三对这个三四。 也因为是左外连接嘛,所以四要保留,而这,而这个右边这个表呢,没有这个相应的记录,全部已空。而右边这个表呢,它的这个集合里面这个 no 呢,就是在左外连接里面,它就被删掉了, 这就是左外连接。 我们再来看下右外连接,它是跟左外连接正好是相反啊,它是以右表为基础,而左外连接呢,是以左表为基础,右表的所有记录都会显示,如果左表没有匹配项,则左表的字的形式为 now。 建议,实际上呢, a 右连接 b 就 等同于 b 左连接 a。 在 实际开发中呢,为了代码的可读性,通常使用左连接, 右外连接就是右边的右表中的工作的 user id 全部保留啊。左表当中呢,如果它结合里面的值, 有等于右表中当中的保留,如果没有的话,就一就就删掉啊。比如说右表当中的一对应的只有这个一张三,这个一对应,这个又是一个张三,二对应二零四三对应王五。 now 呢,在左表当中没有,但是它也会保留在左表当中没有的字的以 now 来替代啊。而照六这个,而这个右手 i t 四呢,由于在右表当中没有它,就会被删掉。嗯, 右连接,我们的关键字是 right john, 我们仍然是用 on 关键字来把它公共字的连起来, 成咱们刚才所说的右表当中的 u s r d 里面的记录全部会保留一二三 now, 这个 now 在 左表当中没有,全部以 now 来替代。而左表当中原来那个 u s r d 四是被删掉的啊。 下面我们来看一下全麦连接,它的特点是相当于并集啊,内连接相当于交集啊。这个做完连接是相当于左边的全集,右边连接相当于右边的全集啊,全麦连接呢,相当于两个集合的并集, 它结合了左连接和右连接的结果啊,只要其中一个标有匹配,就会返回缩一横,如果某一方缺失,则对应方显示 no 啊。注意, my secret 是 不支持 for join 的, 通常使用 union 结合左连接和右连接来实现。 就是我们也仍然以这个表来来来举例子,那么他会先左连接一遍啊,左连接,左表为主,一 一二三四全保留,再又连接一遍一 一二三 now, 然后全部组合起来,这就是它们两个 usid 的 并体啊, 我们仍然是先先左连接,嗯, 光连接一点 usid 等于 o 点, 然后呢,我们在右连接啊, 我们先把所有的字断开都显出来,我们看一下是什么效果啊? 搞错了, select 星 from u s u left join 啊,我们缺的那个关键字啊,这就是那个 unit, 我 们用 unit 把这两个左连接,外连接,把它把它连起来, 我们可以看到啊,它 unit 呢,就是总共有六条记录啊, 一对一是两条记录,三条,四条,五条,六条,六条记录啊, 如果我们用 unito 的 话啊,我们看看 它就变成十条记录了, 一二三四五六七八九十,那么他就是左连接了一遍,又又连接了一两,又又连接了一遍,这个张三呢,就出现了四次,你看见了没有? 其他的李四王五都出现两次啊,因为有点凹的话,就这样,他又不能够合并这个重复的。 呃,行,重复,行,我们用这个,一般用这个。不不不,用这关键字,我们用 you 就是 六行啊,给大家注意一下。好,这节课我们就讲到这里。

life 转上一节是阴的转内连接,那来复转呢?可以理解为左连接,那它跟阴的转的区别是什么呢?大家看一下下面这张图,两张表,对吧?进行转,哎, 我们记得音的状也是中间这部分是绿的,对吧?他是选择出来的,哎, live 照跟他不同的地方呢,是返回呢?着表呢?返回着表所有的行,对吧?你看着表是吧? live 照样就是着表, 这行全返回出来了,那右表呢?返回一直返回出去,能找到能匹配的也就是这一部分,对吧?这一小块是能匹配到的,要返回出来, 如果右边中没有的像这个白色的呢?没有的他就至于难,但是也要返回啊,咱们看一下这个预防呢,就是, 呃,跟音字转类似吧,就把音字改成 live 就可以了啊,语法都比较简单。 然后呢?哎,你看他同样是用这个语法,是吧?同样,咱们我记得上次那个哎,就是这个哈,上次这是银耳钻的对吧?他查询出来的是几条?奇瑞靠他对吧?七条,然后咱们给他改成 life 的拽, 试一下,多了是吧,你看多了两条是吧?而这两条都是左表的数据,对不对?咱们看左表,是不是这些全部都有了?左表,比如咱们查一下这个, 嗯,查下这 wifi 这张表吧, 有几个?七个? google, 淘宝,菜鸟,微博、百度和这个网站,对吧?那咱们上面查询出来呢,是不是呢? 哎,酷狗,菜鸟对吧?一二三四五六六个网站对吧?那他这是几个? 呃,他这是也是六个啊,就这边编号区,但中间少了个五三三四五吗?是吧?哎,也是六个,也就是说这种音 life 的噪音呢,他会 查出左表中的全部的数据,同时呢,右表中有的呢?像这种属于能找到的数据能匹配上的,是吧?他呢,就查出来,哎,这两列,是因为这两列都是个赛斯 log 吗?都是右表中的数据, 那如果右表中查不到的,像百度啊,还有这个网站呢,对吧?右表中都没有记录,那同样呢,他也返回给客户,只不过呢,他的值为难啊,大家看一下,这是不是就是左左连接跟引领抓引的区别啊,对吧, 所以说大家记住了,音的照应是只取出完全匹配上的数据才捞出来的,那左连接不一样,他是把左表的区域首先全部查出来,右表的呢,匹配上的呢,也显示出来,如果没匹配上的呢,他至于难啊? 好,那么今天这节呢,我们就讲到这里讲了,主要是 live a try。