oracle sql 笔记

分页sql:

select b.*  from (

       select a.*, rownum rn from t_dup  a where rownum< = maxRowNum

) b where b.rn > minRowNum

 maxRowNum:最大的数据条数

 minRowNum:最小的数据条数

 

dbms_random:

dbms_random是一个可以生成随机数值或者字符串的程序包
最常用的方法
dbms_random.value():返回的是number类型,并且返回的值介于1和0之间,并实现排序
dbms_random.random():返回的是BINARY_INTEGER类型

 

TRUNC:
对数字
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
对日期:
TRUNC(TO_DATE('1999-12-25','yyyy-mm-dd'),'yyyy')=  1999-1-1
TRUNC(TO_DATE('1999-12-25','yyyy-mm-dd'),'mm')=  1999-12-1   
TRUNC(TO_DATE('1999-12-25','yyyy-mm-dd'),'dd')=  1999-12-25

 

decode:
decode(a.q, 1, a.bal, 2,b.bal,0....) :如果a.q的值为1则显示a.bal,为2则显示b.bal,否则为0

 

row_number() over():
select username,mobile,row_number() over (order by mobile) as num from SYS_USER,其结果为
username mobile  num
tt             2               1
rr             4               2
ee           4               3

cc            8               4
tt 1          23              5
根据mobile的值排序,得到排序的行号
row_number() over (PARTITION BY userid order by mobile)根据主键userid分组。这样得到的结果

全部为1

 

rank() over():
该函数和row_number()over()函数的使用时相同的,主要区别为rank表示等级。举例

select username,mobile,rank() over (order by mobile) as num from SYS_USER,其结果为
username mobile  num
tt             2               1
rr             4               2
ee           4               2
cc            8               3
tt1          23              4

 

start with...connect by prior:
其基本语法是:
select ... from tablename start with 条件1
connect by 条件2
where 条件3;
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是

说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。

 

sys_connect_by_path(column,';'):
该函数必须和connect by连用,该函数实现将根据父节点条件得到column内容,并以;的格式分开的形

式显示出来

 

substr:
substr('This is a test', 6, 2) would return 'is'
substr('This is a test', 6) would return 'is a test'
substr('TechOnTheNet', -6, 3) would return 'The'

 

instr:

我们经常这样使用:从一个字符串中查找指定子串的位置

select instr('yuechaotianyuechao','ao') position from dual;---6
从第7个字符开始搜索
select instr('yuechaotianyuechao','ao', 7) position from dual;--17
从第1个字符开始,搜索第2次出现子串的位置
select instr('yuechaotianyuechao','ao', 1, 2) position from dual;--17
从倒数第1个字符开始,搜索第2次出现子串的位置
select instr('yuechaotianyuechao','ao', -1, 2) position from dual;--6

 

insert all:

insert all
when 条件1 then
into 表 values(值)
when 条件2 then
into 表 values(值)
select col from 表
按条件插入不同的表中

 

merge into:

USING (SELECT 'the code' code, 'the name' NAME FROM dual) b
ON (a.code = b.code)
WHEN matched THEN   //如果匹配则更新
  UPDATE SET a.NAME = b.NAME
WHEN NOT matched THEN //否则插入数据
  INSERT (code, NAME) VALUES (b.code, b.NAME);
merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表,使用与大数据量

 

Lag和Lead:

LagLead函数如可以在一次查询中取出同一字段的前N行的数据和后N行的值

l如:

select card_code,bal,lead(bal,1) over(partition by card_code order by bal)  as change_val from  T_CHANGE_LC

card_code  bal  change_val

001             14              40

001             40              48

001             48              49

001             49

002             20              51 

002             51              58

002            58

 

select card_code,bal,lag(bal,1) over(partition by card_code order by bal)  as change_val from  T_CHANGE_LC

card_code  bal  change_val

001             14             

001             40              14

001             48              40

001             49             48

002             20 

002             51              20

002            58             51

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值