前言

作为精算师,在保险公司需要处理千万量级+保单数据和财务数据。
经验分析团队利用庞大的历史保单数据及理赔数据建议合适的最优估计假设(Best Estimate Assumption);
评估团队利用有效/新业务保单和财务数据报送高质量的报告;
产品团队对产品的回溯和分析离不开数据的支持;
再保团队和再保公司处理再保账单也需要保单数据和理赔数据。
因此数据库软件算是除了Excel和精算模型软件之外必备的第三大软件。
目前,国内保险公司常用的数据库软件主要有Access,SQL server,FoxPro和Oracle。
一般小公司喜欢使用Access和FoxPro,这两个软件适用于小型程序,处理的数据相对较少,像FoxPro支持2G字节的数据,但是价格便宜,操作简单,对小公司来说是不错的选择,但是当公司业务庞大后,数据表不得不分为多个表,降低了程序的效率,也不利于保存。
因此大公司青睐SQL server和Oracle。
SQL server和Oracle是企业级数据库,支持海量数据存储和应用, 数据安全性较高,但是收费较贵。许多数据处理软件都有Oracle的接口,像Tableau,使得后续的数据可视化、数据处理更加方便,因此像友邦人寿、太平洋人寿等大公司选择Oracle作为数据库。
今天简单介绍一下Oracle常用语句,都是一些简单但是使用频率高的语句,本人接触Oracle时间不长,还请数据库高手手下留情,如果有高效的语句,也欢迎留言或者分享在论坛,一起交流。
数据

以TableA和TableB作为示例

TableA:保单信息
Pol | Product | IssueAge | Sex | AP | ID |
---|---|---|---|---|---|
P01 | TermLife A | 20 | F | 2500 | A11 |
P02 | WholeLife B | 30 | M | 10000 | A12 |
P03 | TermLife C | 45 | M | 3000 | A13 |
P04 | UniversalLife D | 20 | F | 50000 | A11 |

TableB:被保险人信息
ID | Salary | Smoker | City |
---|---|---|---|
A11 | 5000 | Y | SH |
A12 | 10000 | N | BJ |
A13 | 20000 | N | SZ |
查询语句

简单查询TableA里的数据
Select * from TableA;
2条件查询
查询承保年龄在30岁以内的保单
Select *from TableA where IssueAge<=30;
查询男性保单的总保费
Select sum(AP) from TableA where Sex='M';
查询产品A和产品C被保险人的平均承保年龄
Select Sum(IssueAge)/Count(*) from TableA where Product='TermLife A' or Product='TermLife C';
3模糊查询
查询IDnum开头为‘A’的保单
Select * from TableA where ID like'A%';
查询定期寿险保单
Select * from TableA where Product like '%Term%';
4聚合查询
查询男性和女性的总保费
Select sex,sum(AP) from TableA group by sex;
创建、插入、删除及清空表

创建一张新表TableC,将TableA导入
Create table TableCas select * from TableA;
创建一张新表TableC,将TableA中男性导入
Create table TableC as select * from TableA where where Sex='M';
创建一张新表TableC,将TableA导入,将其放在USERS的存储空间
Create table TableC tablespace users as select * from TableA;
2多表关联创建
创建一张新表TableC,将TableA导入,并导入TableB的收入信息和城市信息
Create table TableC as select a.*,b.Salary,b.City from TableA a left join TableB b on trim(a.ID)=trim(b.ID);
3插入表
将TableA插入到TableC(插入的表是已经存在的表)
Insert into TableC select * from TableA;
4清空表
清空TableA
Truncate table TableA;
5删除表
删除TableA
Drop table TableA;
添加、更改,删除列或数据
1添加列给TableA添加列Age,格式为Number
Alter table TableA add (Age number);
给TableA添加列SmokerStatus,格式为varchar2(2),括号里20是设置的最大字节数
Alter table TableA add (SmokerStatus varchar2(20));
2更新列
更新TableA的列AnnualPrem,对AnnualPrem乘以1.1
Update table TableA set AP= AP*1.1
更新TableA的列AnnualPrem,对吸烟者AnnualPrem乘以1.1
Update table TableC set AP= AP*1.1 where SmokerStatus ='Y';
3删除列
删除TableA列ID
Alter table TableA drop column ID;
删除TableA列AnnualPrem和列ID
Alter table TableC drop (AP, ID);
4删除数据
删除TableA男性保单数据
Delete from TableC where Sex='M';
在TableA里删除ID在TableB的数据
Delete from TableA where ID in (select ID from TableB);
5提交数据
在insert/delete/update操作后,需要提交数据,数据库才能真正修改数据
Commit;
多条件查询
1Case when在TableA查询保单号和性别,如果是M则显示“男”,F显示“女”,都不是显示“其他”
Select Pol, (Case Sex when M then '男' when F then '女' else '空' END) 性别from TableA
2Decode
Sex如果是M返“男“,F返回“女“
Decode (Sex,'M','男','F','女')
数据格式转换
1转为日期将20190101转为日期类型
To_date('20190101','YYYYMMDD')
2转为数字
将20190101转为数字类型
To_number(20190101)
3截取字符串
截取20190101中的月份
Substr(20190101,5,2)
投票
以上就是常用的一些语句,比较简单,欢迎大家点击阅读原文进入论坛分享一些高端语句和交流,最后推荐一个学习数据库程序的网站https://www.w3school.com.cn/sql/index.asp,里面有所有语句的用法和实例,对学习非常有帮助。
另外我们发起了关于公司使用的数据库软件的投票,欢迎投票!

完
图片来源:网络
往期 精彩回顾行业洞察
解读 | 市场收款可调费率终身医疗险独家深度解读
解读 | 百万医疗险长期化探讨 ——固定免赔额是橘是枳?
解读 | 重大疾病保险形态演进的回顾和预判(上)
解读 | 重大疾病保险形态演进的回顾和预判(下)
精算考试
大事件 | 机 考 or 笔 试 ?
分享 | 【SOA系列】我是如何取得FSA的
分享 | 【SOA系列】我是如何通过前五门基础课程的
分享 | 【SOA系列】我是如何通过高级课程的
名校之旅
分享 | 在人大统计学院就读精算是一种什么样的体验(上)
分享 | 在人大统计学院就读精算是一种什么样的体验(下)
分享 | 在卡斯商学院就读精算科学是一种什么样的体验 —— 实习工作篇
分享 | 在卡斯商学院就读精算科学是一种什么样的体验 —— 学习生活篇
分享 | 在卡斯商学院就读精算管理是一种什么样的体验
分享 | 在赫瑞瓦特大学就读精算管理是一种什么样的体验
论坛杂谈
解惑 | 作 为 精 算 师 是 怎 样 一 种 体 验 ?
投票 | 刚起步的精算师最适合/不适合哪些岗位
求职 | 精算招聘信息-2020.7.15.
精算屋熊猫论坛,旨在为精算师及未来精算师提供交流平台
在这里我们提倡平等,开放,互助,创新
或许你还不是精算师,来到这里,你已经成为了我们的一员