1.用select语句进行分页显示(取第5到8行)
(1)select * from (select ename,job,sal,rownum no from emp) where no>=5 and no<=8;
(2)相对第一种,当数据量大时,第二种效率明显高
select * from (select ename,job,sal,rownum no from emp where rownum<=8) where no>=5 and no<=8;
(3)用minus关键字(minus是用于两个sql语句中,显示的结果是在第二个sql语句出现的结果集但没在第1个sql语句出现的,相当于结果集相减)
select ename,job,sal,rownum from emp where rownum<=8
minus
select ename,job,sal,rownum from emp where rownum<=4;
有个小疑问:为什么伪例的顺序不按照原先出现的结果集顺序?
(4)绑定变量
select * from (select ename,job,sal,rownum no from emp where rownum<=:x+3) where no>=:x;
每次执行要绑定变量
var x number
exec :x :=5
2.组函数
包括sum、max、min、avg、count这些函数
注意:max、min、count可以是任何类型的,而avg、sum是要数值型的,日期类型的不可以。
sum值可以忽略掉空值,没有关系,而avg的忽略掉的话就会出现问题
select sum(comm),avg(nvl(comm,0)),count(1) from emp;
3.group by XX 根据XX来分组
求每个部门的工资最大值
select deptno,max(sal) from emp group by deptno; (group by deptno必须要有)
4.Having子句(为了限定group子句)
下面 再加入where语句就是一条select语句完整的格式
select deptno,avg(sal),job
from emp
group by deptno,job
having avg(sal)>2000
order by deptno;
5.嵌套子查询只能用在where或having后面
查询比scott工资高的人
select ename,sal from emp where sal>(select sal from emp where lower(ename)='scott');
6.几个转换大小写的关键字
lower :全小写 upper:全大写 initcap:第1个字母大写,其他小写