开发者学堂课程【数据处理:DQL 之条件查询、模糊查询及排序】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/64/detail/1155
DQL 之条件查询、模糊查询及排序
内容介绍:
一.条件查询
二.模糊查询
三.排序
其实查询,删除以及 select 同样,在查询时需要查询指定行所以查询也需要使用条件,很少需要查询整张表,如果表中数据非常之多不需要每一行都查询出来。
一.条件查询
例如需要查询 emp 表中工资大于两万的员工:select* from emp where sal>20000;
查询 emp 表中有奖金的员工:select* from emp where comm is not null;
有奖金即不为空
查询 emp 表中20部门的所有员工:select* from emp where deptno=20;
查询后显示20部门有甘宁,刘备,诸葛亮,周泰,庞统
查询 emp 表中30部门的所有员工:select* from emp where deptno=30;
其中关羽是部门经理,黛绮丝,殷天正,谢逊,韦一笑为销售员,程普为文员
上面进行的是条件查询,现在把难度加大查询 emp 表中工资在20000到30000的员工(包含20000和30000):select* from emp where sal
吧 between 20000 and 30000;
查询 emp 表中所有经理和分析师:select* from emp where job in(’经理’,‘分析师’);
在使用可能会出现问题:使用中文会出现乱码。
二.模糊查询
接下来讲解模糊查询,模糊查询是指查询模糊的数据。例如查询所有姓张的员工,select* from emp where ename like ‘张’
;不能使用等号代替 like。执行语句还是不能查询,需要在张后加下划线(张_)下划线表示匹配一个字符,如果表中有个一个名为张无忌,使用该语句不能查询因为名字的第一个为张第二个字为任意字,已经确定人名以张开头共两个字。使用 select* from emp where ename like ‘
张_’
;可以查询出两个人。当张后有两个下划线可以查询公司姓张且姓名为三个字,这时如果公司有张无忌这个员工可以查询出。
查询公司员工姓名为三个字:select* from emp where ename like ‘___’ ;
查询公司员工姓名为两个字:select* from emp where ename like ‘__’ ;
查询公司员工工资为五位数,最好使用条件查询(where sal >=10000),如果有个员工工资为十万那么使用模糊查询五位数员工会查询不到工资为十万的员工。
查询公司中员工姓名中有 刚 字,不能使用下划线进行匹配因为条件中没有说明名字有几个字。这时不能使用下划线而要使用百分号,select* from emp where ename like ‘%刚
’
;查询以刚结尾,%表示匹配0到 n 个字符。由于 emp 表中没有以刚结尾的员工,使用 sname 表进行查询:select* from sname where ename like ‘%刚’
;如果有人叫刚使用语句同样可以查询出来,因为%匹配0到n个字符。
查询姓赵的同学:select* from emp where ename like ‘赵%’;
查询姓王的同学:select* from emp where ename like ‘王%’;
查询名字中有小字的:select* from emp where ename like ‘%小%’;
可以查询名字中有小字的,而不是查询名字中间有小字的
上面案例即是模糊查询,模糊查询非常有用。应记住关键字 like ,特殊符号 _ ,%。下划线表示匹配一个任意字符,百分号表示匹配0
到 n 个任意字符
三.排序
查询结果需要按条件排序,查询 emp 中所有行默认使用 empno 数据升序进行排序。如果使用员工工资排序(排序需要使用关键字 ORDER BY):select* from emp order by sal;
查询结果为升序排列,select* from emp order by sal asc
;同样是升序但建议使用关键字。如果想要实现降序排列:select* from emp order by sal desc;
此时排序难度不大,多列排序难度较大。排序中学习了一个关键字 order by ,asc(升序),desc(降序)如果不使用 asc 和 desc 则默认为升序。如果排序列出现相同值(如殷天正与谢逊工资相同,但谢逊排在殷天正下),那么如何解决。需要引入第二列进行排序,即第一列数据相同时,如果第一列能够排序那么不需要第二列再次排序。
Select* from emp order by sal asc,comm desc;
当第一列相同时使用奖金做降序排列,执行语句后谢逊排在殷天正上,虽然他俩工资相同但是谢逊奖金较高故按照语句语法谢逊排在殷天正上面
但诸葛亮与庞统位置没有调换,可以引入第三列继续排序即前两列相同使用第三列比较:Select* from emp order by sal asc,comm desc ,empno asc;
查询执行后诸葛亮排在庞统上,前两列相同但诸葛亮员工号较小所以按照升序排列排在庞统上面。
Order by 后是列名 ,列名后是 asc 或 desc。使用三列排序,当第一列未能对相同值排序,则使用第二列排序,如果第二列还是不能排序,使用第三列排序。