1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Oracle数据库:条件表达式case when then else end decode函数 oracle单行函数练习示例

Oracle数据库:条件表达式case when then else end decode函数 oracle单行函数练习示例

时间:2020-03-23 03:29:15

相关推荐

Oracle数据库:条件表达式case when then else end decode函数 oracle单行函数练习示例

Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例

找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开

测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金融企业、安全机构啥的,他们必须要用oracle数据库

这oracle比sql安全,强大多了,所以你需要学习,最重要的,你要是考网络警察公务员,这玩意你不会就别去报名了,耽误时间!

oracle系列文章:

【1】Oracle数据库:啥是oracle数据库?你为啥要学oracle?

【2】Oracle数据库:oracle 11g安装教程,已安装好的oracle各个文件夹的作用,oracle用户权限怎么样

【3】Oracle数据库:oracle启动,oracle客户端工具plsql安装教程和使用方法

【4】Oracle数据库:创建表空间,创建新用户,给用户分配对象、角色和系统权限,登录新用户建表

【5】Oracle数据库:链接配置,包括sqlnet.ora里面的transnames.ora配置数据库标识符SID,listener暂时简单了解

【6】Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库

【7】Oracle数据库:oracle字符类型、数字类型、创建表表名的命名规则

【8】Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写

【9】Oracle数据库:表的关系:一对多,一对一,多对多,一一继承和修改的关系,表不是重点,重点是数据和约束关系

【10】Oracle数据库:sql语言结构,数据查询语言DQL,select * from table;算术,别名,连接,去重等操作

【11】Oracle数据库:约束行限制where语句,判断条件,比较条件,字符串日期格式,in,like,escape,null语句

【12】Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制

【13】Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例

【14】Oracle数据库:oracle函数,单行函数,多行函数,upper,lower,initcap,字符串函数

【15】Oracle数据库:数字函数,日期函数,round,trunc,mod,months_between,add_months,next_day,last_day,sysdate

【16】Oracle数据库:oracle数据类型转换to_char()日期和数字转字符,to_number()字符转数字,to_date()字符转日期函数

【17】Oracle数据库:oracle函数嵌套,nvl函数,nvl2函数,nullif函数,coalesce合并函数

文章目录

Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例@[TOC](文章目录) oracle条件表达式CASE 表达式DECODE函数单行函数样例总结

oracle条件表达式

能力相同

写法不同而已

CASE 表达式

switch(a)

case 1,2,3

xxxxx

default

yyyyy

类似

case xxx

when aaa then return1

else return2

end

类似的思路

SQL> select last_name,job_id,salary, CASE job_id WHEN 'IT_PROG' THEN salary*(1+10/100) WHEN 'ST_CLERK' THEN salary*(1+15/100) WHEN 'SA_REP' THEN salary*(1+20/100) ELSE salary END as saladd from employees;LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------King AD_PRES24000.0024000Kochhar AD_VP 17000.0017000De Haan AD_VP 17000.0017000HunoldIT_PROG 9000.00 9900Ernst IT_PROG 6000.00 6600AustinIT_PROG 4800.00 5280Pataballa IT_PROG 4800.00 5280Lorentz IT_PROG 4200.00 4620Greenberg FI_MGR 1.001FavietFI_ACCOUNT 9000.00 9000Chen FI_ACCOUNT 8200.00 8200Sciarra FI_ACCOUNT 7700.00 7700Urman FI_ACCOUNT 7800.00 7800Popp FI_ACCOUNT 6900.00 6900Raphaely PU_MAN 11000.0011000Khoo PU_CLERK3100.00 3100Baida PU_CLERK2900.00 2900TobiasPU_CLERK2800.00 2800HimuroPU_CLERK2600.00 2600ColmenaresPU_CLERK2500.00 2500LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------Weiss ST_MAN 8000.00 8000Fripp ST_MAN 8200.00 8200Kaufling ST_MAN 7900.00 7900Vollman ST_MAN 6500.00 6500Mourgos ST_MAN 5800.00 5800Nayer ST_CLERK3200.00 3680MikkilineniST_CLERK2700.00 3105LandryST_CLERK2400.00 2760MarkleST_CLERK2200.00 2530BissotST_CLERK3300.00 3795Atkinson ST_CLERK2800.00 3220MarlowST_CLERK2500.00 2875Olson ST_CLERK2100.00 2415MallinST_CLERK3300.00 3795RogersST_CLERK2900.00 3335Gee ST_CLERK2400.00 2760PhiltankerST_CLERK2200.00 2530LadwigST_CLERK3600.00 4140StilesST_CLERK3200.00 3680Seo ST_CLERK2700.00 3105Patel ST_CLERK2500.00 2875LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------Rajs ST_CLERK3500.00 4025DaviesST_CLERK3100.00 3565Matos ST_CLERK2600.00 2990VargasST_CLERK2500.00 2875Russell SA_MAN 14000.0014000Partners SA_MAN 13500.0013500Errazuriz SA_MAN 12000.0012000Cambrault SA_MAN 11000.0011000Zlotkey SA_MAN 10500.0010500TuckerSA_REP 10000.0012000Bernstein SA_REP 9500.0011400Hall SA_REP 9000.0010800Olsen SA_REP 8000.00 9600Cambrault SA_REP 7500.00 9000Tuvault SA_REP 7000.00 8400King SA_REP 10000.0012000Sully SA_REP 9500.0011400McEwenSA_REP 9000.0010800Smith SA_REP 8000.00 9600Doran SA_REP 7500.00 9000SewallSA_REP 7000.00 8400LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------Vishney SA_REP 10500.0012600GreeneSA_REP 9500.0011400Marvins SA_REP 7200.00 8640Lee SA_REP 6800.00 8160Ande SA_REP 6400.00 7680Banda SA_REP 6200.00 7440Ozer SA_REP 11500.0013800Bloom SA_REP 10000.0012000Fox SA_REP 9600.0011520Smith SA_REP 7400.00 8880Bates SA_REP 7300.00 8760Kumar SA_REP 6100.00 7320Abel SA_REP 11000.0013200HuttonSA_REP 8800.0010560TaylorSA_REP 8600.0010320LivingstonSA_REP 8400.0010080Grant SA_REP 7000.00 8400Johnson SA_REP 6200.00 7440TaylorSH_CLERK3200.00 3200FleaurSH_CLERK3100.00 3100Sullivan SH_CLERK2500.00 2500LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------Geoni SH_CLERK2800.00 2800Sarchand SH_CLERK4200.00 4200Bull SH_CLERK4100.00 4100Dellinger SH_CLERK3400.00 3400CabrioSH_CLERK3000.00 3000Chung SH_CLERK3800.00 3800Dilly SH_CLERK3600.00 3600Gates SH_CLERK2900.00 2900Perkins SH_CLERK2500.00 2500Bell SH_CLERK4000.00 4000Everett SH_CLERK3900.00 3900McCainSH_CLERK3200.00 3200Jones SH_CLERK2800.00 2800Walsh SH_CLERK3100.00 3100FeeneySH_CLERK3000.00 3000OConnell SH_CLERK2600.00 2600Grant SH_CLERK2600.00 2600WhalenAD_ASST 4400.00 4400Hartstein MK_MAN 13000.0013000Fay MK_REP 6000.00 6000MavrisHR_REP 6500.00 6500LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------Baer PR_REP 10000.0010000Higgins AC_MGR 1.001Gietz AC_ACCOUNT 8300.00 8300107 rows selected

逻辑好写

但是真的挺复杂的语句

骚得很,你不学的话,考试基本看不懂………………

怎么缩减呢???

简化case表达式

DECODE函数

还是上面那个案例,搞它

SQL> select last_name,job_id,salary, decode(job_id, 'IT_PROG', salary*1.1,'ST_CLERK',salary*1.15,'SA_REP', salary*1.2) as saladd from employees;LAST_NAME JOB_ID SALARYSALADD------------------------- ---------- ---------- ----------King AD_PRES24000.00 Kochhar AD_VP 17000.00 De Haan AD_VP 17000.00 HunoldIT_PROG 9000.00 9900Ernst IT_PROG 6000.00 6600AustinIT_PROG 4800.00 5280Pataballa IT_PROG 4800.00 5280Lorentz IT_PROG 4200.00 4620Greenberg FI_MGR 1.00 FavietFI_ACCOUNT 9000.00 Chen FI_ACCOUNT 8200.00 Sciarra FI_ACCOUNT 7700.00

比case简单多了操

单行函数样例

SQL> select sysdate as "Date" from dual;Date-----------/10/27

SQL> select employee_id,last_name,salary,round(salary*1.15) as "New salary" from employees;EMPLOYEE_ID LAST_NAME SALARY New salary----------- ------------------------- ---------- ----------100 King 24000.0027600101 Kochhar 17000.0019550102 De Haan 17000.0019550

取整,round四舍五入

trunc不舍

jam,in条件

首字母大写,其他小写,用一个函数,叫做那啥

有一个函数

排序好说

SQL> select initcap(last_name),length(last_name) from employees where last_name like 'J%' or last_name like 'A%' or last_name like 'M%' order by last_name;INITCAP(LAST_NAME) LENGTH(LAST_NAME)------------------------- -----------------Abel 4Ande 4Atkinson 8Austin6Johnson7Jones 5Mallin6Markle6Marlow6Marvins7Matos 5Mavris6Mccain6Mcewen6Mikkilineni11Mourgos716 rows selected

initcap直接首字母大写,其余小写

hire,月数

month_between,小数,需要四舍五入,round处理

嵌套函数了

最后还要按照这个排序

SQL> select last_name,round(months_between(sysdate,hire_date)) as month_work from employees order by round(months_between(sysdate,hire_date));LAST_NAME MONTH_WORK------------------------- ----------Kumar 174Banda 174Ande 175Lee176

round保留几位小数,后面要用参数的

默认0

SQL> select last_name||' earn '||to_char(salary,'fm999,999.99')||' monthly, but wants '||to_char(3*salary,'fm999,999.00') as dream_sal from employees;DREAM_SAL-------------------------------------------------------------------------King earn 24,000. monthly, but wants 72,000.00Kochhar earn 17,000. monthly, but wants 51,000.00De Haan earn 17,000. monthly, but wants 51,000.00

转格式,薪水转字符串打印

格式要搞清楚,反过来一样

格式化长度固定好像是咋搞来着

SQL> select last_name,lpad(salary, 15, '$') as sal from employees;LAST_NAME SAL------------------------- ------------------------------------------------------------King $$$$$$$$$$24000Kochhar $$$$$$$$$$17000De Haan $$$$$$$$$$17000Hunold$$$$$$$$$$$9000

左右填充

lpad

rpad

hire_date日期6个月之后的第一个星期一

函数嵌套

找next_day

SQL> select last_name,hire_date,salary,to_char(next_day(add_months(hire_date,6),2),'yyyy"年"mm"月"dd"日"') as review from employees;LAST_NAME HIRE_DATE SALARY REVIEW------------------------- ----------- ---------- -----------------King /6/1724000.00 12月22日Kochhar /9/2117000.00 03月27日De Haan 2001/1/1317000.00 2001年07月16日Hunold/1/3 9000.00 07月10日

加月之后的那个月,add_months

next_day(日期,1–7)这个日期之后的第一个星期几

1代表日

to_char(日期,格式)按照指定的格式转化日期为字符串

不是星期日,那太难星期几

用day来转字符串就行

这里是日期转字符串的又一个应用

SQL> select last_name,hire_date,to_char(hire_date,'day') as day from employees order by to_char(hire_date,'day');LAST_NAME HIRE_DATE DAY------------------------- ----------- ------------Greene/3/19 星期一Cambrault /10/15 星期一Walsh /4/24 星期一

如果日期-1

再去d

取的是星期几的那个几

来排序

SQL> select last_name,hire_date,to_char(hire_date,'day') as day from employees order by to_char(hire_date-1,'d');LAST_NAME HIRE_DATE DAY------------------------- ----------- ------------Ladwig/7/14 星期一Cambrault /10/15 星期一Mallin/6/14 星期一Ernst /5/21 星期一Greene/3/19 星期一Banda /4/21 星期一

这个就用那个三目呗

SQL> select last_name,nvl(to_char(commission_pct),'No Com') as com from employees;LAST_NAME COM------------------------- ----------------------------------------King No ComKochhar No ComDe Haan No Com

这里保证nvl函数的参数要一样

否则报错哦

decode函数写

不要写case,when then

面试的时候,一定要用decode函数

这比较简单

SQL> select job_id,decode(job_id,'AD_PRES','A','ST_MAN','B','IT_PROG','C','SA_REP','D','ST_CLERK','E') as JOB from employees;JOB_IDJOB---------- ---AC_ACCOUNT AC_MGRAD_ASST AD_PRES A

case 条件1,返回结果1

……

这用decode好说

SQL> select job_id,decode(job_id,'AD_PRES','A','ST_MAN','B','IT_PROG','C','SA_REP','D','ST_CLERK','E',to_char(0)) as JOB from employees;JOB_IDJOB---------- ---AC_ACCOUNT 0AC_MGR0AD_ASST 0AD_PRES AAD_VP0

直接给0也行的

SQL> select job_id,CASE job_id WHEN 'AD_PRES' THEN 'A' WHEN 'ST_MAN' THEN 'B' WHEN 'IT_PROG' THEN 'C' WHEN 'SA_REP' THEN 'D' WHEN 'ST_CLERK' THEN 'E' ELSE to_char(0) END as JOB from employees;JOB_IDJOB---------- ---AC_ACCOUNT 0AC_MGR0

最后的关键字是else哦

不是default

哈哈哈哈

小心了

这比decode复杂多了

总结

提示:重要经验:

1)

2)学好oracle,即使经济寒冬,整个测开offer绝对不是问题!同时也是你考公网络警察的必经之路。

3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。