今天我们讲解此查询 in 和 not in 的使用,请看视力,先做演示,再做讲解。请看这里有两张表,一张是学生信息表 su info, 一张是学生成绩表 su max。 我们先查看一下它的全部数据。 slide xing from s u n for sled xing from s u marks。 选中执行代码,按快捷键 f 五执行,执行成功。这是两张表的全部数据, 这是学生信息表的数据,这是学生成绩表的数据。 chinese exam 是语文成绩。假设我们现在需要查询语文成绩是九十三分的学生信息,应该 如何做?请看我们使用硬操作符很容易就可以实现这样写。 sled 是查询关键字后面写列名称,这里我们写通配符星号代表所有列。 from 关键字后面写表名称,这里我们写 su 英否。学生信息表 后面写查询条件 where 查询关键字,后面写查询描述,这里我们写 suno。 学生编号列 后面写查询判断语句,这里我们写应查询操作符,后面跟括号语法这么规定,里面写具体查询条件,我们这样写,里面再写一个子查询 键字,后面写查询输出列,这里我们写 s t u n o。 学生编号列后面写 prom, 关键字后面写表名称,这里我们写 s t u max 后面写 where 查询关键字后面写 chinese exam。 语文成绩列后面写 in。 关键字括号里面写具体查询描述,这里我们写九十三。再给大家解释下这句代码的意思。 先查询 su max, 表中语文成绩是九十三分的学生编号 suno, 再通过学生编号 suno 列查询查询 su 英报表中学生信息。简单解释就是查询语文成绩是 九十三分的学生。信息,选中执行代码,按快捷键 f 五执行,执行成功。语文成绩是九十三分的学生有四位,那如何查询语文成绩不是九十三分的学生?信息 非常简单,我们修改 in 关键字为 not in 就可以了。选中执行代码,按快捷键 f 五执行,执行成功。语文成绩不是九十三分的学生有两位。 总结一下,通过这个案例的演示,我们得出了一个结论,子查询中硬操作符可以返回多条记录。其他比较用算符,如等号不等号、小于、小于等于、大于、 大于等于,这些操作符在子查询中只能返回一条或空的记录。给大家演示下。假如我们把 note in 修改为等号查询语句,在执行的时候就会报错, 因为我们的紫查询返回的不是一条记录,而是多条记录,所以会报错。选中执行代码,按快捷键 f 五执行执行报错。 通过对比,相信大家对 in 和 not in 在紫查询中已经掌握了 in 和 not in, 它可以返回多条记录。下一节我们讲解照影。
粉丝1069获赞3869


阿里的大佬隐藏的色寇的优化方案有几个呢?我们来看一下。第一个,尽量避免去使用紫茶循。第二个,用硬来替换哦。第三个,读取适当的记录呢,用 limit mn 而不要读多余的记录。 第四个,禁止不必要的 oderbai 排序。第五个,总和查询呢,可以禁止排重用幽灵哦。第六个,避免随机取记录。第七个,将多次插入呢,换成批量的隐色的插入。第八个,只返回必要的列, 用具体的字段列表来替代 select 星这样的语句。第九个,区分 in 和 exists。 第十个,优化 grow by 的语句。第十一个,尽量使用数字型字段。第十二个,优化教应语句。

哈喽,大家好,我是李月,今天给大家介绍一下隐身的印图。隐身的印图的作用呢,主要是向表里面插入数据记录,这里我们可以看一下他的语法 是和 tfboym 和 y 六十直接组合,然后就可以往里面插入了一些记录了。我们先看一下下面这个表里面的内容, 这里面呢有七条记录,这里我们想往里面添加宋江这一条记录,然后我们就需要列出这个表里面的一些列名,然后以及 v i 六十。后面就是我们需要插入的内容。我们插入一下, 然后再看一下表里面的内容,这个时候呢,看到后面已经新增了一条宋江这个人的记录。 不知大家有没有注意到,我们在插入的时候呢,并没有插入这个客服 id, 而这个开服 id 呢,他自动生成的。是因为这个客服 id 我们设置成了一个自动递增的字段,就说在新进入插入的时候呢,他会自动给他生成。 所以我们前面在抄的时候,没有单独列出客户 id。 然后看一下四零二,四零二呢是只列了三列,然后我们抄的值也是三列对应的值。 这里可以看到的话,只有这三列有内容,另外两列呢,就默认为空了。好,以上就是以色列印图的语法,谢谢大家。

呃,社会语言的非空非空约束,也就是 noten 约束,那么在默认的情况下呢,表的列是允许接受空值的这个捺, 那么呢,如果,呃,如果这个字段呢,加了 noten 约束,那么将强制这一列不接受难值。比如你在复值的时候,这一列是必须有值的,没有值就会报错。那么像下面这张表,我们看一下 creatable person, 哎,我们试一下啊,用这个例子呢,来讲解这个非空约术, 我把它改成小写吧,大写看着很奇怪,我把其中这两个字段删掉啊,不需要,我们看一下,只有两个字段,一个 id, 一个 h, 这样 上一张表是吧?他的 id 列呢,是有非空的约束的,你看这一列类型, in 的时候,他是 nottinine, 那么他不允许被空,对吧?那 a 字这一列呢?他也是 int 类型,但是呢,他没有 noteinin, 那么他默认是允许被空的。我们插入数据试一下。 竖横横撇横撇好 id, 竖 h 这一列呢? id 是必须有折,对吧?那么 a 这一列呢,可以为空,我们可以给它根捺 试一下。好,已经插入了一条数据,是吧?我们看一下这个表的数据是什么样的 一条数据, id 列是一, age 列是 nine, 对吧?我们给它的是 nine, 那么我们也可以这样来写,因为它是允许为空的,所以呢,我们在写的时候呢, age 这一列呢?给它不复直 这样,然后 values 这一列呢?我们给他个二,然后没有 s 那一列了,是吧?他就因为他允许被控,所以我对他不负值,也可以,然后查询一下,哎,一样的,是吧,只有这一列有哎,那这一列允不允许有值呢? 他既然没标注是否可以为空,那么他就是肯定是允许有值的。那么数三,那这个呢,给他来个零吧,我们看一下这样插入之后,哎,成功了,对吧?我们看数据是什么样的, 哎,有值了是零,对吧?那也就是说你不加 nottenn 这个约束的话,那么这一列是允许为空或者不为空呢?如果说你加了 notenn 呢,这一列,那就是他怎么必须 不允许回红?比如说我们试一下这个 note 约束的效果哈,我们对 id 这列和 a 这样写,我们铭文给它制弹铭文啊, a 字呢?给它个一, 我们看一下会不会报错,报错了是吧?你看 colorady cannot 比呢,它不允许被控,因为它有闹腾那样的一个约束了,对吧?那我们再试一下, 我不写 id 这一列的时候呢, 这样的,我们试一下我不指定 id 的会不会报错,哎,一样的是吧,你看废物 id 大战的还有 dfod y 六没有默认值,那么你 你不给他默认值也不行,对吧?哎,那么我们如何将 h 列也变为飞空的列呢? 那我们用可以用这样的语句来做,因为不同数据库的语语法可能不一样啊,这个语法是适用于那个,呃,适用于卖收口的 other table person multiply is int not net, 也就是将它类型改为什么 noten, 哎,那为什么不行呢?看一下,因为这里边已经有已经有 为空的值了,是吧?那你给他置为 notend 的时候呢,他是会报错的,所以说你要先给这张标怎么了?清空掉, 清空的一句是 tracket, 这样快, 哎,你再查一下空表,对吧?里面没有数据,没有数据的情况下,我们给他置为闹难是生效的,对吧? 那这样的话呢,我们如果像刚才那样这样插入一条语句的话,是什么样效果呢?他已经置为不能为空了,那你给他为空值的时候,他肯定会报错,是吧?那你不给他值的时候呢?他也肯定会报,因为他没有默认值,对吧? 哎,那你给它为插入一条记录的时候,它就肯定会正常执行,对吧?好,这就是这样 一个东西,这就是飞空。那如果是否可以将那个飞空运输去掉呢?也可以, alt table 一下就可以了,想想这个军可不可以执行。肯定是可以的啊,虽然里面有数据,但是呢,他是零, 他将他是想把它改为允许为空,是吧?那有允许为空肯定就是有数据,肯定也是对的嘛,对吧?当然没有数据也是对的。好, 好,这个 nottina 呢,就是用于控制在数据这一列进行操作的时候,是否允许有空值啊?那本节课呢,就讲完了关于 nottina 的约束,谢谢大家。

嗯, ok, 大家好,今天我们讲什么呢?今天我们讲查询基础单表,基础查询中的 in 和 not in 的用法, 以及给列起起别名的用法。给列起别名的用法啊。这两个最主要就是我们今天要讲的两个内容。第一个我们来看一下 in 和 blot in。 in 我们可以把它理解成什么在里面 老头音呢,就是什么不在里面,他是一个范围,一个集合, 一个集合的选举,一个集合的选举。那么比如说我们要藏我们之前在 在做那个嗯,在做嗯多多条件的时候,我们是用或者去执行。比如说我们要查询年龄等于十八,或者年龄等于十九,或者年龄等于嗯二十这三个年龄的时候我们就会去用到什么呢?嗯, vr a 级等于十九, o r a 级等于啊十八, o a 级等于啊,二十一这样一个之前我们在在这之前我是怎么学的,是怎么 vr, 然后呢跟上 a 几等于多少?十八 or a 几等于二十, or a 几等于二十二。如果我们要查明这三个三个年龄,我们在这之前我们是这么写的,如果是更多的话,我们还要还要写更多的这个 or 去 去代替去选取。那么今天我们要学的就是什么呢?就是这个 in, 这个 in。 然后呢去执行同一个同一个条件下的多个值,查询同一个条件下的多个多个范围级, 我们现在藏,然后这上面那个我们要给他改成什么呢? select 心 from student where 这个 a 级 他怎么呢? in 后面跟上括号,多个值用 二十一,多个只用逗号隔开,多个只用逗号隔开。那么现在我们来看下这个结果,你看十八二十 二十一的数据出来了,这个印里面他是一个艾特。他是一个什么呢?他的语法是什么呢?语法 select from, 表明 where near 因烈,或者叫什么呢?叫极端 in atoms。 这是他的相,你可以是一个。这个相是什么呢?一到一到 n 个, 多个的时候用逗号隔开,多个的时候用逗号隔开。这个就是。但他只能只适用于就是你的这个什么呢? item 里面的这个 in the items 只能是与条件列的只条件列的数据类型相匹配, 相匹配,与他的列相匹配。就你比如说做的时候你就你就给他写这个,如果你写多个,那也没有意义啊。比如说你看我再写个嗯,三三。那我们来看一下他的结果,你看他会提示你什么? 在将 vr 掐指张三转换成数据类型,硬的是硬的型的手势吧,因为他这个是丢的呀,他是数值类型的。所以说他这个印里面他只能接收。他只能接收什么呢?只能接收相同数据类型的值。 所有的人呢?以下查询为错误查询印里面的 items 只能与 secure a 级的数据类型相同,数据类型相同。那么我们现在知道这个 in 啊,它是查询什么呢? 他是查询这个,他是查询这个这个啊,在这里面的一个范围。那么同样我们可以除了查询数字型以外,我们还可以查询什么呢?我们要找嗯,要找几个人是吧?要以这几个人,我们要去查找 三三小白,或者是说 就张小小对吧,张小小这样查询出来他也是这样的一个范围,也是这样的一个范围哦,把这个嗯这个改成 steal steal name, 把它换成 steal name, 这样出来就是我们家找的张三小白和张小小,他这个印他也可以,他也可以。怎么来,他也可以跟别的条件组合,嗯的,并且呢,在张小小里面呢,并且呢,他的年龄呢,年龄要大于 大于十,大于等于十八,大于等要等于十八岁是吧。他的条件多个条件组合查询啊。一 嗯是对,嗯,你看他这这是一个组合,这个时候我们就要用到什么呢?要用到 括号表示优先结,括号表示优先结。这样就出来了。当你有多个条件,比如说你硬或 或者是说 btone 的,它是一个整体。当你要用 bton 的,或者是说硬这种啊,这种多组合的这种查询条件的话,那你将用括号给他括起来,代表优先级。括号括起来代表查询优先级 括号多多组查询。用括号括起来 代表一个整体,代表一个整体啊。这就是我们的这个 in。 那么与之相反,大家来想一想 lot in 是什么呢?那我们把这个 把这个 in 改成改成 lot in, 他得到的结果就是什么呢? 哦,他的结果就是不在查找,不在 item 是里面的所有数据。语音相反, 与印相反,这个就是老头印的一个效果。那么下面一个起别名,起别名是什么意思呢?现在我们看到的这个嗯是 too name stood number。 其实我不解释,大家可能又不太知道我这些是什么意思,对吧?那起别名的意思就是让大家能够看清楚这个抬头是什么意思。 那么他的语法是什么呢?他的语法是什么呢?第一种 studio name rs, 学生 用 r, 第二个 stick you 啊日,性别 十六等等以后,那么他得到的是什么?现在我们看一下他显示的就是什么呢?啊,学生姓名。呃,学生姓名,这个叫性别。学生姓名性别, 这是第一种写法,就是用阿日,那这个阿日呢,他其实还是是可以啊,他这个阿日 语法啊,是可以省略的,就我这个,我应该复制这个, 这个阿字呢,阿字他是还可以,阿字还可以省略,就是念名,就是念名啊,字别名,念名啊,字别名,那么这个阿字他也可以省略。那么还有一种,还有一种写法就是什么呢? 还有一种写法,就是把这个等号用等号,学生姓名,姓名等于。 然后呢,性别等于 sq 经的。那这也是起别名的两种方式,起别名的两种方式啊,日,或者是说啊省略啊,日, 或者是说用啊别名等于这个念名,这样来打,这样来达到我们的这个给念名起别名的一个啊效果啊。今天我们就到这个地方。

粉丝投稿,一诺 d b 锁影为啥会失效?有哪些场景?很多人只会背答案,却不知道面试官出这道题的真实目的。这道题实际是考察你对锁影原理的理解,以及 s q r 优化能力,下面我们一起来看具体解析。一诺 d b 锁影啊,为什么会失效?有哪些场景? 这个呢,也是在面试的时候经常被问到的一个问题,但是啊,大部分人呢,只会去背答案,不知道底层的原理。那么今天我们就花几分钟的时间来搞清楚 dp 的 缩影为什么能提升我们的查询性能。我们来举个例子啊,假如说我基于 edge 跟 name 两个字段创建一个联合缩影,那么这里面底层的话呢,它是采用的 b 加数存储结构,它的排序规则啊,是先根据 edge 去排序,如果 edge 相等,那么我才根据 name 来排, 所以这是它的一个排序规则。先根据第一个缩影字段排,如果第一个缩影字段相等,再根据第二个字段排,依次类推。那么走缩影能提升查询很关键的因素呢,就是我查询的字段是按顺序保存到 b 加数里面的, 比如说 edge 是 按顺序保存到我们这样一个 b 加数里面,所以根据 edge 查的时候呢,我能提升我的查询性能。 ok, 如果是无序的,那么我就需要便利所有的数据才能找到。比如你一来不去查询 edge, 我 就来查询 name, 那么这个 name 它是无序的,所以我必须要便利所有的数据,我才能找到你想找到的数据。所以啊,在查询的范围之内啊,这个字段如果是无序存储的,锁影就会失效,如果是有序的,那就可以走到我们的锁影。我们还是以刚才的锁影为例啊, edge 跟 name 两个联合锁影, 假如我只查 name, 灰灰,我不去查 edge, 对 吧?那我就不会走到这个联合锁影数,为什么呢?因为锁影数的规则是先根据 edge 排好,如果你一来就查 name, name 一定是无序的, 那么既然无序,那我就走不到,对吧?但是如果我加上 edge, 加上 edge 等于十八, edge 等于十八,你看啊, edge 我是 能够去基于这个缩影数,能快速的找到十八所在的位置的,比如说在这里面对八,那么一定是小于二十九, 那小于二十九我肯定去页一找对不对?那么我就能减少我的一个查询的一个页数。然后接下来我们再来看 edge 等于十八的时候, name 它也是个有序的,因为它的排序规则,先根据 edge 排, edge 相等, edge 等于十八一定相等。 好,那我再根据 name 排, name 也是有序的,所以他也能走到缩影。所以我们得到一个结论,字段能不能走到缩影,关键呢?就看字段在查询的范围之内是否是有序的,如果有序能,如果无序就不能,那么我们再来看常见的一些事项场景,比如说函数和表达式的操作, 那么对所引字段进行函数跟表达式的操作的时候呢?所以就会失效,比如说转化为 get, 对 吧?比如说乘以零点八,发生一些数学的运算函数,原因呢?其实很简单,函数式排序以后,那么它的规则跟最开始的规则是不一样的。 我们在工作中啊,尽量的去避免使用函数和表达式,可以去改用等价的直接表达, ok, 然后第二个范围查询,范围查询会使下一个缩影列失效,包括向百分号开头,百分号开头,同样的,它也是一个范围,因为它是个模糊查询,它能查出多个字段,对不对?它能查出多个数据。 好,那么举个例子,假如说查询 a 九大于十八, and name 等于灰灰,我建立的缩影是 a 九跟 name 的 联合缩影, a 九它是有序的,所以它一定能找到缩影。但是大于十八, 我查出来的数据大于十八,它是个范围,在这个大于十八的范围之内, name 它是有序的。为什么有序呢?因为只有 a 九相等,它才有序, 所以 name 它一定走不到缩影,因为在 a 九大于十八的范围之内, name 是 个无序的啊。那么这个呢,也就是我们经常讲的要遵循最做匹配原则, 如果不遵循最做匹配原则,就是前面 a 九它是一个范围,然后或者说 a 九这个字代我都没有去查,那么 name 一定走不到缩影,那么在工作里面呢,优先是使用前导列的等值查询。 好啦。第三个,数据类型的不匹配导致影视转换,比如说叉类型,影视转化为 int 类型,因为它们两个的排序规则是不一样的,所以它直接会导致缩影失效。音刚刚讲了,它的排序规则不同数据类型是不一样的, ok, 我 们要确保查询的条件数据类型跟字段的类型是一致的, ok。 第四个,欧尼尔节的多列调节, 如果分布在不同的锁芯里面,可能无法利用锁芯,比如说 a 九跟这一个磁带对不对?那么这两个磁带呢,在两个不同的锁芯里面,它不是一个联合锁芯啊,那么在优化期啊,它就会面临选择了, 如果我用 a 九做锁芯,那我这个我就没法去满足锁芯条件,如果用这一个磁带去作为一个锁芯,那么无法满足 a 九的锁芯条件, 所以呢,他最终可能会去选择全表扫描,全表扫描加合并结果可能会更加高效。那么解决方案呢?就是我们将 o 可以 拆分成多个查询,然后呢?并且 use, 对 吧?去合并,然后要么呢就是我去建立联合锁影,然后第三个,当然呢,锁影啊,它有一些不确定性,因为锁影能不能用其实是由优化器来决定的, 我们刚刚讲的是理论上的一个可能性,对不对?但是啊,最终决定呢,就是交给优化器来决定,优化器会选择他认为最优的一个方案来执行,所以有一些你可能认为他能走到锁钥,但是可能也走不到的,比如说锁钥覆盖不足,查询的字段没有被锁钥覆盖,导致需要回表去查询,那么可能导致性能下降, 对吧?那么解决方案呢,我们尽可能的使用覆盖锁钥,就是我们查询的字段尽可能的包含在我们的锁钥数里面。而第二个锁钥的选择性过低, 就是锁影的纯复率太高了,比如说性别自带就只有零跟一,那么优化器他会觉得,哎,我用你这个锁影跟没用一样,那么我还不如全标扫描。那么解决方案呢,我们在建立锁影的时候,尽可能的去避免一些选择性很低的一些自带去建立单独的锁影, 我们可以去建立联合锁影。然后接下来第三个查询的数据量过大,如果查询的数据量超过单表的百分之三十左右,当然这个不是一个确定的值,如果超过百分之三十左右,那么优化期会觉得,哎,我还不如不走锁影,那,那我直接,哎就走缺表。那么解决方案在工作里面呢,我们尽可能的去避免大数据的查询,采用枫叶等等的一些方式。

当我们在定义这个表结构的时候呢,我们知道对于字段来说,我们可以给他定义这种非空的约束,那如果我们没有定义这种约束的话呢,也就说这个字段里的值啊是可以留空的, 那么留空是代表什么呢?就是这个值有可能是缺失,或者是我不知道,或者是呢他不适用。 那么对于数据库来说呢,呃,它是用 n u, l l 这个来代表,它是一个空值叫 now。 那么空值他和我们所常见的这个数字字符串最大的一个不同,就是说由于他的这个空值啊代表的是一个不确定的值,所以呢我们不能用这个等于或者不等于去比较。 那么呢啊,数据库呢,首先是实现了专门的这个用于空值查找的这么一个运算符,所以呢这节课呢, 我们就来了解一下怎么去查找空值啊,那么我们呢从这个开始呢,我们调整一下,我们先把这个结论给大家讲一下啊,包括这个不同数据库的差异,然后呢再通过一些视力去啊给他去做一个演示。 那么首先我们来看一下这张表格的第一行, is not 和 is not not, 那这是一个标准的查找空值或者是否为空值的一个标准的这个写法,所以呢我们可以看到在不同顺购当中呢,是一个呃比较通用的一个使用方式了。 那同时呢,我们也可以看到从第二行开始呢,在于不同的数据库呢,它也有一些自己实现的一些呃比较便利的这个运算符,或者是一些特殊的函数,那么这些呢我们来看一下啊,首先呢第二行这个 is not 和 not, 其实它就相当于 是等于这个就是前面的这个 ezenome 和 eezenotenom, 那么呃这个写法呢,在 pg 和 sakelad 里头是支持的。呃,那么下面 soccer 呢,是定义了一个叫 ezenel 的函数,那是判断这个参数是不是空, 那么我们再看下一行 is distinct from 和这个 is not distinct from 啊,其实前面视频我们也讲过了, distinct 是不同的意思, 那么 is this inform 就是说比较这两个值是不是不同,对吧?那这个比较呢,是可以支持空值的,也就是说 对于正常来说呢,一是不等于二的,对吧?那么一是不是等于空呢?那正常来说我们是得不出这个结论的,但是你用这个一字 distinct from 它就 可以判断,对吧?那么他对于两个空值来说呢,他认为空值是相同的,那么这种写法呢,是在呃这个 server 和这个 p g 里头是支持的。呃,当然 circlid 也有一个类似的叫 e 子和 e 子 note, 就更简短的一个写法也是 ok 的。 那么最后一行是这样的,就是 mythical 呢,它使用了这个小于等于大于这个呢,其实就是相当于是一个等于的意思,如果是一等于一呢,它是成立的,那同时呢, not 等于 not 呢,它也是成立的,也就是这个运算符,它是可以支持空值的一个比较运算, 那么基本的这个不同数据库差异呢?就在这,接下来呢,我们来看一下视力,那么我们先来看一下啊,当我用这个等于或者不等于的这种符号呢来去 就说我用这种常规的这个判断,对吧? where 这个 marriage 等于 n u l 啊,常规的呢,就是说我用这个等于来判断没有经理的这个员工, 我们查询一下,那实际上我们可以看到他没有返回任何数据,但实际上这种方式是不对的哈,因为如果我们换成这个标准的写法叫 is not, 我们可以看到是有一个员工的,对吧?这个刘备他并没有 manager, 但是用等号呢,我们是得不出这个结论的,因为数据库当中啊,我们说了这个 number 是不确定的值,对吧?你去用任何一个值去和不确定的值去比较,包括你用不确定值和不确定值比较,那其实他这个结果也是不确定的,所以这种 写法呢,你就查不出你要的数据,所以呢,这样的话呢,我们就必须用这个专门的 is now 和 is not now, 对吧? is not now 就是相反的意思了, is not now 我们可以看到它能够得出一个相反的这个结果啊,这个就是我们 标准的一个写法,这种写法呢,在其他数据库都是一样的,对吧?那接下来呢,我们再来看一下这个刚才我们所说的一个缩写的一个方式,首先就是 is now 的缩写, 比如说 e is now, 对吧?那在 p g 当中是支持着呢?然后呢,呃, e not now 就是判断一是不是空,或者一不为空,对吧?其实我们可以看到这里的第一个返回的就是假的,如果我们看这个 它是 force, 第二个是处,也就是说一不是空,对吧?那一不是空就是真,对吧?所以这个是,呃,如果你是这样的话,那意思呢?那他肯定第一个也是成立的,对吧?所以呢,对于 pg 而言呢,是可以这么写,当然这个 sky 的也是可以。怎么写的这两种呢?当然他返回的数值是不一样的啊,他是用一和零来代表成立的,所以这是一种写法。当然我们也说了买这个呢,如果你要用这个方式呢,你可以用这个叫做 is not 函数,它也是这种下法,但是它是一个函数,对吧? is not 一不是这个空,所以它是用零来代表 force 的,所以这种方式。那还有前面我们所说的叫 is distinct from, 也就是和某某是不同的,对吧?比如说我们仍然是用这个方式 select 的心 from emp employee 就是员工表,然后查询呢,它的 manager is distinct from now。 我们可以看一下这种查询呢,它可以查询所有的不为空的数据,也就是说它的 manga id 和这个 nar 是不一样的,那其实它相当于就是 easy nar 的这个效果了 啊。那当然这种写法我们说了 p g 也是可以支持的,这张证书以后都是 ok 的。 那么对于这个 second light 而言呢,我们可以更简单的一个写法,对吧?就是, 呃,一一 is 是吧? is 呢?或者说我们这样,如果我想查找了这种 manager 等于一的人,那我们就是 manager is 一,当然你也可以写等于一也是一样的, 对吧?我们可以看到,其实它可以查找 the manager 都为 e 的,我们用这个 e 子也是可以的。 那最后我们再来看一下 my circle, 刚才我们所说了,它实现了一个叫做小于大于等于,对吧?一, 说白了,其实他就是等于的意思啊,就是判断一等不等于二,但是因为他可以支持 not 的判断,对吧?呃,哎呀呀,我们看一下,一不等于二, 二,但是 not 是等于 not, 对吧?但是如果你要直接用 not 等于 now, 这个肯定是不行的,对吧?因为 not 等于 not, 它是得不出这个结论的,但是呢,你用这种符号就是 ok 的啊,所以呢,这也是 myself 的一个扩展。 那么对以上的内容呢?如果大家想要了解更多实用的案例呢,可以去看一下我写的这本书,烧烤编程思想。

在这个 in 的子查询当中呀,我们还可以在 in 子句的前面给它加上一个 not, 加上一个 not, 这样我们也把它称之为叫做 not。 in 其实还大的方面说还是 in 子查询, 那这个往往是用来做什么运算呢?就是找一些,没有缺少什么缺考啊,未参加呀。像这样的,请大家看一下叫未参加大学英语课程最近一次考试的在读学生名单。那简单的说呢,就是要去找这个没有参加大学英语考试的学生信息。 那这地方我们首先你得找到哪些人参加了?把参加的人找到以后呢,我们把学号剔除,剔除掉这些人以后的就是没参加的,没参加的啊,所以第一步还是要查询参加了大型英语考试 最近一次啊,考试的学生名单,把它找到,找到啊,在 in 关键字前面加上一个否定词, not。 这样呢,有这样的学生以后加了 note, 实际找到也就是未参加了。另外呢,还要限定一下大学英语课程所在的学期,所在的学期啊,学期,因为学期要能对上,否则的话,你最后的结果可能范围超过了我们想象的啊,理想的范围了啊,范围了。 那么给同学们做个简单的解释,我们看这个子查询,我们还是分部来看啊。这一步 select 找什么?找大学英语的对应的括号, 以课号作为条件之一。作为条件之一啊,之一就是大学英语课程。第二个呢,要找到他的日 七,这是大学英语课程对应的对应的最近一次考试的日期。把它对上之前我们已经做过这个查询,所以我就不详细分析了啊,这也作为他的一个条件了,这样的两个条件,做且的操作,请同学们看,这是且的操作, 有了这个操作以后呢,那这里面同学们告诉我啊,就这么多,这个子查询,最后得到的效果是什么?找到的是什么?是学号?找到的是学号 stoden 的 number。 那么这些学生呢?都是参加了, 参加了考试的,是不是参加考试了?那在 in 的前面加一个 not, 那代表的就是这些人其实就是未参加, 那就是没有参加的啊,没有参加的是这样一个效果,这里面得到的结果呢,他就是未参加大学英语考试的这样的学生的信息。 但是这些学生的信息也有一个问题,是什么呢?就是这些人还有一些呢,是根本就没有学习大学英语, 因为大学英语所在的学期,如果是这个学期的学生才会去学,那其他的人其实他根本就不学大学英语的,也将会显示在这样一个结果当中,因为这个位置使的是辅定词, 就是这些学号,比如说一号学了,三号学了,没有参加这个啊,一号跟三号考试了,其实呢,只有一二三四五,只有五位同学参加了,嗯,学了这个课程, 有一号三号考试了。最后呢,我们显示的结果应该是一四五未参加考试,但是加这个 note 以后呢,那就不是一四五了,那就是除二跟四,一跟三以外的所有的学生,所有的学生都显示出来了,出来了啊,出来了。所以最后我们这个条件里面就 vr, 就这个条件里面我们必须再加一个条件,就是说学号等于这个,并且一定要注意他的这个 学期的编号啊,一定是大学英语的学期编号啊,所以这个条件一定不能少,不能少,如果少了这个条件的话,最后我们所得到的什么得到的,那就是他没有学习大学英语,他不存在考大学英语啊。所以我们要把这个大学 英语所在的学期,学期和这个学期的和我们在学生信息表中的学期要能对上。就是学期就代表他要学什么课,他在第三学期他就学第三期的课。 大学英语如果是第四学期,那么第四学期的学生是不需要去学第三学期课程的,所以这点还要对上,就这一条一定要注意,这是一个难点,难点啊,也是在这个例题当中呀,是最容易出错的一个地方,下面为同学们做一个简单的演示。 代码的分析刚才已经进行过,进行过啊,我这里再把这里面的代码给大家简单分析一下啊。在这一条查询呢,就是查询大学英语的什么括号, 根据课号找到他的最后一次考试的日期,以这个日期作为一个条件,按的 前面呢就是大学英语的成绩,他的所对应的什么课号啊?课号在哪张表中查,在我们成绩表中查查到所对应的学号,那这个所学号所得到的,就说他学习了大学英语,并且最近一次呢,也参加了这个大学英语这门课程的考试, 加上一个 note 以后呢,那就说明没有参加考试,没有参加考试,那把什么也包含进来了,就把我们把什么,我把这个地方加个注释 执行一下,同学们看,同学们看啊,那其实就是把我们这里所有的学生信息,只要没有学习大学英语课程的这样一些也包含在里面,包含在里面啊,所以我们最后一定要加上一个,那就是他的学期编号,一定是大学英语 一个课程的学习编号,学习编号啊,编号这个位置要加上一条啊,这样呢,我们才能说啊,他确定他是学了大学英语,但是他没有参加考试,没有参加考试啊,我们执行一下,同学们看,就只有三位同学, 因为大学英语在第一学期,在第一学期啊,第一学期啊,那你,你如果把这个这个地方不加这个条件的话, 我们执行过以后呢,请大家看,第三学期和第五学期也给他拿出来了,也包含了第一学期他没有考试的, 还把第三学期和第五学期根本都没有开大学英语课程,他不存在学这样的学生也把它拿进来了,那就不符合这个题目的要求,所以这是我们在使用 note 音的时候有它的价值,并不是没 有啊。第一取反,我们能快速的找到哪些人没有参加什么,但同时呢,这个否定我们要范围太大,要对他呢再次加以限制,才能得到一个正确的结果。