前言
作为一个程序员在写SQL时往往注重结果而忽略了本该应用的技巧和更优性能的选择(之前本人一直也是这样),当公司没有一个DBA(据我了解大多数中小公司都是没有的)为我们做SQL优化时那我们理应将SQL尽可能的写的高效简洁,而不是拿“我是一个java程序员或.NET程序员不擅长这些”为借口,博主本人也是以能写出更高效和更优秀的SQL为目标而构想出本系列blog,通过实际的生产环境数据进行演练并总结学习一些程序员也应当具备的某些DBA的素质,废话不多说,首先开始第一篇学习与总结,第一篇相对比较简单,回顾一下oracle中基本的查询操作和一些函数。
单表查询与排序
首先准备数据,这里的数据是从生产环境DB中备份出来的,即某市考试招生系统的一个基础学生信息表,数据量也不大大概1W+,约50个字段,主要是学生的个人基本信息:
接下来看一下几个较为简单的查询技巧和注意点。
分页排序
如题,从分页语句开始,都知道oracle中是通过rownum来进行分页的,例如我们查询20条到30条之间的数据:
select *
from (select rownum rn, t.*
from (select sid_, stuname_, csrq_ from t_studentinfo) t
where rownum <= 30) s
where s.rn > 20
如上所示,这种分页方式在绝大多数情况下是最高效的,而并非是通过s.rn>20 and s<=30,因为这种不如上面的效率高。接下来如果在分页的基础上添加排序,例如:查询20条到30条之间的数据并按出生日期(csrq_)排序,很简单,我们只需在最里层的查询中加上排序语句即可:
select *
from (select rownum rn, t.*
from (select sid_, stuname_, csrq_
from t_studentinfo
order by csrq_) t
where rownum <= 30) s
where s.rn > 20
查询结果如下图所示:
取随机n条记录排序
如题,很简单,利用oracle提供的随机函数包dbms_random来完成,首选简单了解一下随机数,即dbms_ramdom.value:
select dbms_random.value from dual
运行上述SQL即可以返回一个大于0小于1的38位精度的随机数,如下图: