00:00
大家好,我们继续开始这一节的学习,在上一节当中,我们学习了基本的circle叫select的语句。我们能够查询一列或者是几列from一个表,这是最基本的一个操作,这节呢,我们开始学习第二节叫过滤和排序数据。过滤和排序数据,通过本节我们能学到哪些内容?一、在查询中过滤行。相当于是我们查询这个表的信息的时候,我不要所有的数据了,我加入一些条件啊,只要其中的某些。那某些条数的这个数据,比如说呃,90号部门的呀,100号部门的,或者工资大于1000的,这样加入一些条件,这就叫加入过滤啊,另一个叫查询中对行进行一个排列。我们查询到的数据如果有多条的话,我按照其中某一列的指定的一个顺序进行排列。比如说按照。
01:00
员工的ID从小到大,或者从小从大到小,再或者是按照员工来公司的一个日期,从前往后,这都是一个顺序,这是我们这一节要给大家啊讲述的两个知识点。好了,那我们下面呢就直接来进行学习,这呢我们直接以先circle develop进来,大家这个前提你需要注意啊,在计算机这相应的把服务给它开启,我这已经开启了,所以我就可以通过SC的用户来登录or CL这个数据库。在这显示已经登录成功,好了,那我们开启一个command window。这个是什么内容?我们E在这来编写,我们上一节课最基本的学习了,比如说select employee ID last name from employees。还记得吧,这是最基本的一个操作,我们就能够将这个employees这个表在这儿。
02:04
这,这很多了,我们打开my objects tables。能够将employees这个表中的满足这样两个列名的两个列的所有信息打印出来,一共是107条记录。那么什么叫过滤呢?就是这个意思,我在from后边加入一个关键字叫where。比如说我查询查询什么呀,我们刚才得到的一个员工,我查询employee啊,ID是大于。200的。看看谁的employee ID是大于200的,只有这样六个人,同样的我们还可以查询。像员工的哎工资,比如说要求这个工资得大于5000。
03:00
这就是我们要讲的过滤行。比较简单吧,这就我们要讲的过滤哈,你根据你的需要来填写,你还可以再写一下,比如说我选择公司这个是在92部门工作的员工,那你相应的就可以在这儿直接来操作就可以了。这个当然前提是你在这个employees表里边儿一定得有这个department ID这一列,所以才可以啊,90号部门的。OK。哎,就三个人这里大家你需要注意一点是啥呀,就是你要查询的这个列。他不一定得是,不一定是。就是说你加入这个过滤条件的这个列,它不一定是你要查询的这个列,你可以写也可以不写,但是当然前提是这个列和你要查询的这三个列一定是存在于employees这个表的,这是毫无疑问,要不就没法没法使用这个过滤条件了,对吧?这个大家应该都清楚,这里需要说的是。我们往下走。
04:02
在这说叫字符和日期要包含在单引号之内,在上节呢,我们稍微给大家提了一下,说字符和日期如果你要是表示的话,得用一对单引号给它括起来,我们在这给大家说明一下。这样我们看看这个图,这是不是这个公司里边的,呃,一些员工,对吧?我们现在假设要查一下这个叫higgins,我想查询这个人的信息,那你就可以这样写where叫lastname,等于用一对单引号括起来。我们Java当中这个字符串是用的双引号,在circle中是用的单引号,要注意,而且这个我们说circle不区分大小写,它指的是什么呀,你外边的这些你书写的时候是不区分大小写的,但是一旦如果是作为一个字符串出现的话。那叫严格区分大和蟹。严格去大小写好了,我们看一下这个叫higgins的这个人的信息,就这一条对吧。
05:06
如果你要是一不小心,这给写成那个小写,你再来看,这就出不来了,说明它是区分大小写的,在字符这字符串字符或者说叫日期函数里边,尤其是要注意的。这是我们输入的这个,那如果你还想查询一下公司里边,比如说某一天来的这个员工都有谁。这样我先看一下公司里边这个。都有哪些?这个好吧,Select lastname。有这样一些日期,那假设我就找这一天来的都有谁好吧,BD。我们select last hair from它,然后where加入一个过滤条件,叫hair date,等于用一对单引号括起来。
06:03
那么后边这个格式怎么写?是我们非常需要关注的啊,你看他现在这样是这样写的,你这样写吧,我们试一试好吧。1994杠六杠七后边还有星期,实际上呢,这个heit是记录了星期几,只是这个长度有限,它给给给截断截断了。那我们这样你要搜搜索的话是不是不行啊,他说文字与格式类型不匹配,这个还是挺恶心的。那你在我这我这个机器上哈,这就相当于涉及到涉及到一个叫本地化的一个问题了,这个格式写法的话,就按照我们PPT里边这种格式写。这样来写。好吧,那我们按照这种格式来写的话,那就是七杠六,然后月杠。1994我们看一下。
07:01
可以,也就是说你得严格按照这种格式来书写才行。实际上这个哈,大家你不需要给他记忆,为什么呀?我们后边讲下一节的时候,讲了一个叫单行函数,在单行函数里边会涉及到para date和这个字符之间的一个转化,我们真正以后操作,比如说我就想查询94年6月7日来的时候,来的人都有哪些,我们是不会这样去写的,因为这样写你一旦有一个操作失误的话,可能这个结果就出不来了,比如说你这儿一不小心加了个零,这也加个零。看结果是不是就错了呀?就不行,所以这种格式呢,我们就抛弃了,下一节当中给大家讲怎么写,或者我们在这儿先给大家做一个了解,怎么写,这样写啊,下一节还会给大家说。相当于是我们把这个hairit给它转化成一个字符串,按照这种格式来转化,如果转化完以后长的叫这样,1994年零六杠零七是这一天的话。
08:16
就可以,这不就出来了吗?我们以后写的话是这样来写,就抛弃这种写法,但是现在呢,你先了解一下,我们使用where是可以加入过滤条件的,那你这个格式对于date型也是要加单引号的就可以了。好吧,这是我们就需要你注意这个这个事儿就行了。再往后,那么在这里边我们涉及到过滤条件都可以用哪些操作弧,这很简单吧,大于等于,小于等于,哎,不等于,需要注意的是我们这里一个等号等于啊,用的是一个等号来表示的,JA里边是用的是双等号单等号表示的数值,这个是需要你注意的。另外呢,这个不等于符号,你既可以跟Java一样是一个叹号跟一个等号,也可以是用大于或小于。
09:06
也行,那么赋值符号是用的是冒号等号,这个呢,我们在SQL里边暂时还接触不到,等学到PLSQ的时候,我们有了变量了,就可以给变量来赋值,用的就是它。现在呢,大家你就了解一下就可以了。这这几个符号都不难,大家应该都了解,那我们给大家写一个吧,比如说我们写一下说来公司的这个公司工资,这个员工的工资,Where salary,让它大于等于4000,后边呢,我们马上又学了一个连接符号,再加一个and salary,小于7000。这个一看都明白吧,含4000不含7000。有这样一些人,我这儿呢,给他把工资打出来。
10:05
他们的工资是满足大于等于4000且小于7000的。就是这个这个符号啊,这个不用多说了,我们直接往后走。其他的比较运算图,这四个我们给大家来分别来讲一下。第一个叫between and在两个值之间,它这里面加了括号,说叫包含边界,也就是说between,比如说工资5000~7000是含5000并且含7000的。来,我们写一个。这是我们刚才操作的这个,那我们就先这样一下吧,我先4000~7000,我们看一下。20个人。20个人这里边儿既有4000的,也有7000的。好了,那我们现在使用这个between and来给大家实现一下。
11:02
那就是where salary between 4000and7000,没错吧,我们看一下这个结果,如果也是20条的话,那意味着这个确实是包含边界的。如果不到20,那可能就是不含边界对吧?我们看一下结果也是二小,所以说比between的是含边界的,它表示在这两个值之间且含边界,这是between and。下一个概念叫印。下看线条in in是什么意思啊?来,我们给大家说一下。这里我们讲in,好,Where。我现在这样写哈,我现在想查询这个部门,是刚才查询过92部门,这是我们写是这样写的,Where department ID等于90对吧,我们在这里边就不加分号了,如果你要是在外边写加上分号啊。
12:06
一共有三个人,现在呢,我想查询这个事儿,说员工在90号部门,或者是在80号部门,再或者是在70号部门,这应该怎么写?我们结合我们一会讲的这个连接符号,那是不是大家想到了可以这样写啊,80哦,Department ID等于70这样来表示,是这三个部门其中之一就可以。我在这加上一个行department ID。好了,我们看一下。哎,刚才列出来这38条记录,就是70号、80号以及92部门的这些员工,一共是38条记录,那我们可以像刚才这样的写法用or来连接,也可以使用in,那使用in的话就是这样写where department ID不用等号叫in,我用一对小括号括起来,里边写上70、80、90。
13:25
那这样来写,相当于这个里边填写的就是你这个department ID可以等于的各个值,跟上边这个助调的这个语句表示的意思是完全一样的。那我们这样写法,相当于是一个简略的一个写法,对吧?OK,同样的是38条记录。就是这个意思啊,但是这个呢,呃,它跟刚才我们说那个between and是两种不同的方式,这个in里边就是仅仅取这几个值,而between and呢,是这个值跟这个值之间呢,都都算上。都算上,所以这个呢,需要大家注意啊,尤其是你要是一些离散的一些值的话,你可以选择用in。
14:06
如果是一些连续的值,比如说温度在多少度到多少度之间的,那你不可能把这个之间的所有温度每个数都写下来,因为有可能还有小数,那数就无穷无尽的。啊,也就是说对于这个无限的一些小一些这个数段之间的数的话,那你还是用between,如果就这么几个值,你就用in就可以了。是有限值的时候,用用in是可以的,OK,这是我们说的between and和in后边还有一个叫like。Like说叫模糊查询,就是像这个的什么什么这个怎么来使用呢?这样我们举一个例子啊,你看现在呢,我们这个表里边儿这么多员工都有名字,我现在想查询一下这个事儿。叫模糊查询,查询个什么事,我想查询一下在公司工作的员工当中名字是含有。
15:09
还有。A吧,名字含有A的。员工都有谁?名字含有A的,我们就可以使用到按按就员工中名字含有字符A的。员工有哪些,那这个写法我们就得这样,只要是涉及到一些条件的,我们都要考虑要过滤,所以就得要用到where。那么这个where呢,我们说让它是紧跟着这个from的,比如说我们后边还要讲这个order by排序,那么order by排序的话,那就不能够插在他俩空间。这个是需要大家注意的,他俩呢,比较亲近,得挨着from employees where,名字中含有A,那就是lastname,我们用的叫like。
16:04
Like既然是字符了,肯定是运动单引号,那么怎么表示含有A呀?我们使用的这个叫百分号。百分号意味着在这个后边我们写的这个A这个字符前面是可能含有多个字符的,至于说是什么我不管。那么含有的个数是从零个开始到无穷多个的,那么名字中含有A,是不是应该同样在后边再加百分号,这样呢?表示的就是名字中含有A。后边有可能A后边没有了,那它就是一个最最最末尾的一个字符,没有关系,也是包含的OK。那一共是52条记录,大家你看一下,这些名字当中一定是都含A的。一定是都含A,像这个它的末位是A没有问题,好了,这是我们说的这个百分号,如果你要是把后边这个去了,是不是意味着叫员工中名字的末位。
17:10
末位是字符A的员工有哪些对吧?最后一位是A,有这样四个人,这四个人一定也是含在刚才52条记录里的。好了,我们接着说,这呢说的是含A这个百分号,表示的是从零个开始到无穷多个都行,现在呢,我再想查个事说啊,员工中名字的第二位。第二位。是字符A的员工有哪些?名字中第二位是字符A,那你这个百分号现在肯定是不合适的,对吧,那我们用什么表示啊,就用这个叫下划线。一个下划线表示一个字符,那么第二个字符是A,后边呢,可能含有不确定多个,用个百分号来表示它就是我们要描述的这个意思。
18:07
OK。33个人的第二个字符是A,你可以看一下这个结果一定是不会出错的。就是这个意思好吧,那如果你说想表示叫第三个字符是A呢,那你就是是不是加两个下划线呀。大家你注意两个下划线,这是两个啊,你别这个画,画蛇添足,中间你干一个。这个这个空格这成啥了,就成了第二个字符是空格,且第四个字符是A的了。大家要注意,所以说这前两个呢,你得让它连起来,表示的是第三个字符是AOK。有三个人满足这样的条件。这俩人的名,这个lastname是一样的,可能这个firstname不同了,这也没有关系,这是需要大家注意的一点,好吧。然后呢,我们再说一个事儿。
19:01
这个下划线啊,刚才说了它表示一个字符的意思,那你再加上一个就是表示第四个字符是A的这个员工有哪些对吧。那你假设说有这样一个情况,什么情况呀。这个这个员工当中啊,他就是有一个人的名字中是含有下划线的。我想查询一下员工的名字中。查这个事儿,员工中名字,员工中员这样员工名字中还有,哎,就是叫下划线。这员工有哪些?他名字就是下划线,你不能那样写了吧。现在呢,我们这个表里边儿是没有含下划线的,这样我生我生成一个好吧,比如说这里边儿这个最后这个人我把他的名字给改一下,让他改成名字中含有下划线,这个操作呢,我们在后边会讲,所以这呢,你就仅仅看一下就可以了,Update employees that lastname等于。
20:34
我们把这个这个人的名字给他改成他。OK,执行成了,那你这时候再查询一下刚才我们查的这个记录。查这个吧,查名字中含有A的是这样写吧。大家注意,你看现在这个人是不是有个下划线了,现在呢,我就想查询这个人。查什么呀?查询名字中含有下划线的人有哪些?那你要是那样说的话,那个写法是不是应该是这样的,名字中含有下划线的,Where lastname like,把这个小A改成下划线吧。
21:18
这就是表示名字中是你想说的是吧,名字中想还有下划线,但是你这样写的话,大家看是不是出来107条记录啊,因为此时它表示的是一个字符,相当于说这个名字中只要不空,只要有字符就行。它不是表示的下划线,这肯定不行啊,那如何把这个下划线不让它表示一个字符,就是表示它本身的这个下划线的意思呢?需要一个转义字符。转移组怎么写,我加上一个它,然后呢叫it keep。然后我们再来。Cap。
22:05
大家看这个时候我们是不是就查询出来了,这个呢,就是我们要讲的一个叫转义字符。我们通过一个这个下划线,然后一个你这个下这个一个斜杠,一个下划线,这个时候表明一下你这个下划线它是一个转移字符,呃,这个斜线是一个转移字符,此时的这个下划线就是表示一个下划线的意思,不再表示你特殊的含义叫一个字符了。这个呢,你既可以用这个斜线表示,也可以用一个,比如说我用井号表示。也可以,它就是一个转移字符,让你这个下划线不再表示一个字符的含义。就是这样子的。就是我们说的这个叫like like 1233个说完了我们再说第四个叫is now,说它是空的。这个怎么来理解呢?我们在这个表当中有一个列,我们在第一节中说到了,说是有空值的,而且空值如果参与到运算的话,结果也是空值,当时哪个变量是空啊,是不是叫commission。
23:15
TCT,对吧?这是叫公司员工的奖金率,它有可能是空的,那我们就把空的全给他输出一下,这是空的值,看一下72条记录,这些员工的commission PC都是空的。没有问题,他们都是空的,如果你还想查询一下,剩下的叫全不是空的,那就是意思闹闹吧。都是非孔的。35条你看35加上72,正好等于107。就是这个意思,好吧,我们接着。好,这几个就说完了,这呢还讲叫逻辑关系,实际上我们刚才已经用到了,Or表示叫逻辑或not表示逻辑否,And呢表示逻辑并。
24:10
这个呢,我们再举一个例子,我现在想查询这个事儿,查询公司当中部门是80号部门,并且工资小于5000的有哪些?是80部门的,那就加上where department ID等于80并且and吧。Salary是小于等于5000的,有哪些人?没有人,太惨了,没有人,没有人,我们给他改一改,8000。8000有些人13个,说明这个公司的这个部门,这个员工的薪资都相对比较高,最低的你看六千一五千以下的确实没有人。好了,那我们接着往下说,逻辑运算and or和not,那么这有一个叫优先级,刚才我们说了几个运算符,算术的加减乘除连接比较大于等于小于啊,是吧,还有这个between呀,Not呀,And呀。
25:19
这个呢,大家你了解一下就完了。你现在去去记忆它也我觉得意义不大,如果你要真的想让某一些运算混合起来,还是倍儿长,想让哪个先算,哪个后算,你就想要先算哪,你就加小括号就完了。也不建议大家你写一个式子里边,把这个里边全用上,你自己可能都搞晕了啊,这个你了解一下就可以了。下一个就是我们这一节要说的第二个知识点排序,排序叫order by,这也是一组关键字。关键字来,我们写一下。假设呢,我们现在想说这个事儿,我想查询一下80号部门的员工的工资,并且呢,想按照工资从高往低排。
26:08
从高往低排,那你加一个过滤条件where啊,然后排序叫order by salary,按照工资吧,按照工资从高往低,我们使用的叫。嗯,De'可以这样写,可以这样这样理解啊,然后简写呢,叫de。它呢表示是从大到小的顺序,来我们看一下。最高呢是8400,最低呢是6100。这就是这个这个排序的意思,你也可以让它是叫从低往高排,叫AC。A,来看一下。AA这是34条啊,最高的是在这儿一万四啊,那么AC的话最低6100,最高的不是一万四嘛,没有问题,如果你要这里边as不写的话,就仅写一个order by,它默认的也是按照从小到大的顺序来排的。
27:14
接着给大家说一下啊。然后呢,我们再说这样一个事儿。比如说我现在把这个给他删掉,删掉以后现在相当于是把整个公司的员工的工资从高往低排吧。看一下。哎,整个公司的员工的工资是从低往高的,那么在这儿大家你看到是不是有一些这个员工的工资都一样啊。员工的工资都一样,然后呢,其他的时候这些信息不一样了,那我想除了你这个排序按照它之外,剩下的这些,如果你要出现salary一样的了,我想再定义一个排序的。一个列可不可以啊,这个是可以的。
28:02
比如说这样,如果说按照工资排序完了以后,如果出现相同了,我们再按照部门来排。再按照部门来排,如果公司再相同了,我可以再按照你的名字来排。这就出现三层了,那我们这里写个简单的啊,如果你工资一样了,然后呢,我按照你的名字来排可以吧,按照名字从从低往高的顺序排,那我们就得这样写。叫order by salary,这呢我们使用叫ASA,同时我们再让你按照last name来排,也是按照ASA的顺序。大家你看这个时候,如果工资都是1万的这些人,看他们这个时候名字就是从低往高,刚才那个时候不是吧。那刚才的这1万,这你看。
29:01
他们这个顺序是不对的。那么这里就实现了这个排序,如果你想这样想,按照公司的从高往低,你就把它改成D就完了,然后salary,呃,Last name,让他从低往高,那就这样写。这就涉及到叫多层排序了,多层排序就是先按照你指定的一层排,如果出现一样的,再按照第二个来排。这就是我们这一节给大家讲的这个内容,主要就是两个啊,主要就两个,一个呢是叫使用where进行过滤,里边我们用到比较运算符,哎,这些between and,嗯,然后in like not and or not,最后呢,这个排序这个也不难。排序这大家看到刚才这有一个这个内容说我还可以按照别名来排。这个是什么意思,这个一说就明白,我现在呢,输出这个员工的这个salary,我还把他一年的工资输出一下,就12乘以salary,然后给它起个别名,我们说别名用双引号,也可以省略annual salary。
30:11
然后呢,我all by,就按照我们刚才声明的这个叫annual salary。啊,这个呢,我加引号了是吧,所以这样吧,我把这个引号去了,默认的这个它转成大写了,你刚才加引号它就是小写了,所以找不着了,这样。此时就是按照annual salary一个从低往高的顺序的排列。就是说可以使用别名来进行排序,就是这个意思。行,这一节呢,我们就讲到这儿,然后下边呢,给大家来说一下这个课后的练习。
我来说两句