一 ORACle的排序
排序语句:
SELECT [DISTINCT] * | [列名 [别名],…]
FROM 表名
WHERE 条件
ORDER BY 排序的列 [ASC | DESC],…;
select * from emp order by hiredate desc ( desc表示降序 从大到小 asc 表示升序)
select * from emp where where job='MANAGER' order by hiredate desc; (按条件查询出结果后排序)
select * from mep order by hiredate desc,sal desc (按条件一升序后 相同的条件一在进行条件二排序)
二 Oracle的伪列
ROWID 是表中每一条记录的唯一标识符,数据库内部使用它来存储行的物理地址。
该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的某一行。
无法使用update语句修改
ROWNUM 是SQL查询返回的结果集中每一行的行号。
可以用它来限制查询返回的行数。
ROWNUM是先查到结果集之后再加上去的一个列 。
在oracle中使用rownum来进行分页
select t.* ,rownum as rn from emp where rownum>=10 and rownum<=20这是错误的
因为行的循环查找 从索引1 开始 第一条记录的索引为1 不满足 循环第二条时 记录索引从1 开始 。。。。所以的行的行号都是1 永远不满足
select * from (select t.*,rownum as rn from emp t) where rn>=10 and rn<=20 这是正确的 (一般使用)
分页另一种写法
select * from (select t.*,rownum as rn from emp t where rownum<=20) where rn>=10 正确的
select * from emp where rownum<=10 这是正确
记录:rownum大于1的记录永远不可能成立 rownum<等于任何值都成立
三 oracle的单行函数
字符串函数
lower(n) 将字符转换成小写
select lower('AAAA') from dual; --aaaa
select lower(ename) from emp; --列输出结果全部小写
upper(n) 将字符串转换成大写
replace(列名,被替换的字符串,替换的字符串)
select ename,replace(job,'MANAGER','经理') from emp; --job列中 所有的MANAGER都被替换成了经理
select replace('AAAtestgggg','test','测试') from dual; --AAA测试gggg
instr(列名,被搜索的字符串)
select instr('AAAtestgggg','test') from dual; --4 索引从1开始
substr(列名,开始位置,总长度)
select instr('AAAtestgggg',4,3) from dual; --tes
concat(参数1,参数2)
select concat('a','b') from dual; --- ab 等价于 'a'||'b'
length(列名) 获取字符的长度
trim(列名) 去空格
ltrim 去左侧的空格
rtrim 去右侧的空格
nvl(列名,值) 当列的值为空时 输入第二参数的值 如果不为空 输出当前列的值
nvl2(列名,值1,值2) 当列的值为空时 输出第二个参数的值 如果不为空输出第三个参数的值
decode(列名,条件1,值1,条件2,值2......,条件n,值n) 当列的值等于条件n时输出值n
数字函数
mod(5,2) 取余数 等价于java 5%2
round(n) 对整数位进行四舍五入 满5进1
round(n,p) 对小数位进行四舍五入 比如 round(5.6767,2) 输出为5.68
trunc(n) 截断小数位 只保留整数位
trunc(n,p) 截断小数位意外的位数 比如 trunc(5.666,2) 输出为5.66 就是保留p位小数
日期函数
sysdate 获取系统的当前时间
add_months(日期,月数) 将日期加上月数 并返回 比如 (sysdate=2016-3-3)+5个月 =2016-8-3
select sysdate+天数 from dual 将当前日期加上某个数字 表示+天数
months_between(日期1,日期2) 比较日期1和日期2的相差的月份数 结果=日期1-日期2
last_day(日期) 返回日期对应月份的最后一天
round(日期,格式)
YEAR 获取当年的第一天
MONTH 获取当月的第一天
DAY 获取 第一个周末的第一天
next_day(日期,第几天) 获取当前日期下一个星期的第几天