sql语句书写与阅读要点:
1>分结构阅读与书写。 拆分阅读,拆分书写再组合,由简到繁。
Oracle基础数据类型:
4类:
字符型:字符串
char(最大2000), nchar(最大1000, 支持Unicode)--->固定长度
varchar2(最大4000), nvarchar2(最大2000, 支持Unicode)--->可变长度
数字类型
包括整数和小数
number(有效数字, 总位数);
float()--->存储二进制类型的数据, 1-126位0.30103
日期类型:时间
date:取值范围:公元前4712年1月1号---公元9999年12月31号, 可以直接精确到秒
timestamp(时间戳: 更精确的数据, 可以精确到毫秒)
其它类型:大文本, 文件
blob: 最大4G, 以二进制的形式来存放数据
clob: 最大4G, 以字符串的形式存放
Oracle运算符和表达式
表达式类似于java, 可以是常量, 可以是变量, 也可以是表中的一个字段
算术运算符(+ - * /)
比较运算符(> >= < <= = <>/!=)
逻辑运算符(and or not)
字符串连接符(||)
常用关键字
insert into----insert into 表名 values ();
delete-----DELETE 表名 WHERE 列名 运算符 条件
update----UPDATE 表名 SET 列名=值 WHERE 限制条件
select---尽量不要写*
select into
where
in
like(%, _)---模糊查询,%表示0个或多个;_表示一个;
order by----SELECT * FROM emp ORDER BY deptid DESC, ID DESC(排序,加上desc成倒序)
group by--(group by 增强)-------结合分组函数使用 SELECT deptid FROM emp GROUP BY deptid
having
set
distinct----去除一列中的重复;
between...and(闭合区间, 即包括前面的数, 也包括后面的数)
all-------SELECT * FROM emp e WHERE e.intime>=ALL(SELECT e1.intime FROM emp e1);
asc,desc
union all与union
-----
select jkhtbh, jkrxm, jkrzjh, htdkje, b.mc
from grdk_sq_htxx a, bm_khjg b
where jkhtbh in
(select jkhtbh
from grdk_dk_zz
where dkffrq >= to_Date('20180101', 'yyyymmdd')
and grbh in
(select grbh
from grdk_Sq_htxx
where jkhtbh in
(select jkhtbh
from grdk_dk_zz
where dkffrq < to_Date('20180101', 'yyyymmdd'))
union
select grbh
from grdk_Sq_gtjkr
where jkhtbh in
(select jkhtbh
from grdk_dk_zz
where dkffrq < to_Date('20180101', 'yyyymmdd'))))
and a.jgbm = b.bm;
select jkhtbh, count(jkhtbh) ts, sum(dkye) je
from (select jkhtbh, dkye
from grdk_dk_zz
where dkffrq <= to_date('20171231', 'yyyymmdd')
union all
select jkhtbh, sum(bjje + zczyqbjje) dkje
from grdk_dk_hkmx
where jkhtbh in
(select jkhtbh
from grdk_dk_zz
where dkffrq <= to_date('20171231', 'yyyymmdd'))
and ywfsrq > to_date('20171231', 'yyyymmdd')
group by jkhtbh
)
where dkye <> 0
group by jkhtbh;
insert into tmp_hfb_jkr_hkmx_cx (id,hkrq,pzbh,hkny,hkbj,hklx,hkfx,dkje,zlx,dkye,lxye,jkr,sfzh,hkzy,zqgjj,yhkkje,jkrzqe,pozqe)
select 0,a.dkffrq ,a.rzywlsh,' ',0,0,0,a.dkffe,a.dqzlx,0,0,b.jkrxm ,b.jkrzjh ,'贷款发放' hkzy,0,0,0,0
from grdk_dk_zz a inner join grdk_sq_htxx b on a.jkhtbh=b.jkhtbh
where a.jkhtbh='09008770' and dkffrq is not null
union all
select c.id,ywfsrq,ywlsh,hkqs,bjje+ZCZYQBJJE,lxje+YQLXJE,fxje,0,0,0,0,' ',' ',nvl(d.mc,' ') hkzy,gjjzqe,bjje+lxje+fxje+wyj+ZCZYQBJJE+YQLXJE-gjjzqe,jkrzqe,pozqe
from grdk_dk_hkmx c
left join bm_gd_hkzt d on d.bm=c.hkzt
where jkhtbh='09008770' and ywfsrq is not null and hkzt in ('01','02','03','04') and trim(bczywlsh) is null order by c.id;
exists
----
select * from grdk_tx_hk_yh a where hkrq=date '2018-05-01'
and swtyhbm like '0103' and ykbxhj=gjjtqje and exists(
select * from grdk_dk_hkmx where jkhtbh=a.jkhtbh and ywlsh='218051601_0002268866'
);
select nvl(sum(1),0) into v_cnt from dual
where exists(select crbh from cr_jbxx_bg where crbh=v_dwbh and spzt='0' and bgxmdm='jcblbm');
if v_cnt<>0 then
v_msg:='此单位已录入单位缴存比例批量调整清册!';
return ;
end if;
select '单位编号:【'||a.dwbh||'】单位经济类型值:【'||a.dwjjlx||'】' from cr_dw a
where not exists(select bm from bm_dwjjlx b where b.jgbm like '01'||'%' and b.bm=a.dwjjlx) and a.jgbm like '01'||'%'
select count(*) from cr_gr a where f_sfz(a.zjhm)<>1 and a.zjlx='01'
and exists(select 1 from gjzf_gr_zz where grzhzt in('01','02') and grbh=a.grbh);------------exists和in的类比
select count(*) from cr_gr a where f_sfz(a.zjhm)<>1 and a.zjlx='01'
and a.grbh in(select grbh from gjzf_gr_zz where grzhzt in('01','02') and grbh=a.grbh);------------exists和in的类比
inner join,left outer join,right outer join
case...when...then...else ---SELECT CASE E.SSEX WHEN 1 THEN '男' WHEN 0 THEN '女' ELSE '不详' END bb FROM EMP E;
----
insert into tmp_hfb_jcdw_jkdzhd_cx
(id,
jyrq,
skyhmc,
skyhbm,
yhzhhm,
zhaiyao,
fse,
skzhhm,
skzhmc,
yhjslsh,
beizhu,
dwzh,
dwmc,
fkzhhm,
fkzhmc,
fkyhmc,
fkyhbm,
lsztmc,
lsztbm)
select a.id,
jysj,
nvl(b.mc, ' ') yhmc,
a.yhbm,
a.yhzhhm,
zhaiyao,
fse,
skzhhm,
skzhmc,
yhjslsh,
' ',
nvl(d.dwzh, ' ') dwzh,
nvl(c.dwmc, ' ') dwmc,
fkzhhm,
fkzhmc,
nvl(e.sszh, ' ') skzhhm,
nvl(f.mc, ' ') skzhmc,
case
when hdid = 0 then
'未核对'
else
'已核对'
end,
case
when hdid = 0 then
'01'
else
'02'
end
from im_yhzh_yemx a
left join bm_yhbm b
on a.yhbm = b.bm
and b.jgbm like '01%'
left join cr_dw c
on a.fkzhmc = c.jbzhkhmc
and (a.fkzhhm = c.jbzhkhyh or a.fkzhhm = c.jbzhyhzh2 or
a.fkzhhm = c.jbzhyhzh3 or a.fkzhhm = c.jbzhyhzh4)
left join gjzf_dw_zz d
on d.dwbh = c.dwbh
left join im_zhsz_dw e
on a.fkzhhm = e.yhzhhm
and a.fkzhmc = e.yhzhmc
left join bm_sszh f
on e.sszh = f.bm
where jysj between v_ksrq and v_jsrq
and fse between v_ksjyje and v_jsjyje
and fsefx = '01'
and a.yhbm like v_yhbm;
select dkffe 贷款发放额,
(case
when dkhkfs='01' then '等额本息'
when dkhkfs='70' then '等本等息'
when dkhkfs='02' then '等本本金'
when dkhkfs='03' then '一次还款付息'
when dkhkfs='03' then '自由还款方式'
end) as dkhkfs from grdk_dk_zz;
转载于:https://blog.51cto.com/11218855/2090969