保险业务 :

表结构 :

sql语句 : 
/*1. 根据投保人电话查询出
投保人 姓名 身份证号 所有保单 编号 险种 缴费类型*/
SELECT
t2.cust_name,
t2.idcard,
t4.pro_id,
t5.pay_type_name,
t6.protype_name
FROM
contact t1, -- 联系表
customer t2, -- 客户表
holder t3, --
product t4,
pay_type t5,
protype t6
WHERE
t1.contact_text = '15987654565'
AND t1.cust_id = t2.cust_id
AND t3.cust_id = t2.cust_id
AND t3.pro_id = t4.pro_id
AND t4.pay_type = t5.pay_type_id
AND t4.pro_type = t6.protype_id

/*
2. 根据保单号 查询 保单号 保单险种 
投保人 姓名 身份证号 被保人 姓名身份证号 和受益人的姓名身份证
*/
SELECT
t1.pro_id,
t1.pro_type,
c1.cust_name,
c1.idcard,
c2.cust_name,
c2.idcard,
c3.cust_name,
c3.idcard
FROM
product t1, 
holder t2,
insurer t3,
benefit t4,
customer c1,
customer c2,
customer c3
WHERE
t1.pro_id = '1100012313441122'
AND t1.pro_id = t2.pro_id
AND t2.cust_id = c1.cust_id
AND t1.pro_id = t3.pro_id
AND t3.cust_id = c2.cust_id
AND t1.pro_id = t4.pro_id
AND t4.bene_id = c3.cust_id

/*
4. 找到 所有 投保人 被保人 受益人都是同一个人的 保单
*/
select * from product t1 ,holder t2, insurer t3, benefit t4
where t1.pro_id = t2.pro_id
and t1.pro_id = t3.pro_id
and t1.pro_id = t4.pro_id
and t2.cust_id = t3.cust_id
and t3.cust_id = t4.bene_id

/*
6 找到 各险种中 保费最多的 前三张保单 (分组后排序)*/
select * from(
select row_number() over(partition by pro_type order by premium desc) rn ,
product.* from product 
) where rn<=3

//============================================

-- 关于时间 的比较
select * from product where pro_start_date < to_date('2017-04-10 23:12:12','yyyy-mm-dd hh24:mi:ss')
/* 关于时间和字符串的转换

mm 月份 注意不是 MM
mi 分钟

hh24 24小时的小时
hh 12小时的小时

字符串 不能超过 格式的长度 
*/
视图
一 : 什么是视图 view

视图(view),也称虚表, 数据不占用物理空间。
视图只有逻辑定义。每次使用的时候,只是重新执行SQL。
一个视图 可以插叙多张表 查询的每张表 叫做基表
修改视图的数据 基表的数据也会改变

二 : 试图的作用 
1. 简化查询
2. 规避敏感列
3. 简化权限管理 增加安全性

三: 创建视图 用户需要拥有 create view 权限 grant create view to USERNAME; 
-- 授权时 必须使用管理员权限

四 语法:
create [ or replace ] [ force ] view [schema.]view_name
[ (column1,column2,...) ]
as 
select ...
[ with check option ] [ constraint constraint_name ]
[ with read only ];
tips:
1 or replace: 如果存在同名的视图, 则使用新视图"替代"已有的视图
2 force: "强制"创建视图,不考虑基表是否存在,也不考虑是否具有使用基表的权限
3 column1,column2,...:视图的列名, 列名的个数必须与select查询中列的个数相同; 
如果select查询包含函数或表达式, 则必须为其定义列名.此时, 既可以用column1, column2指定列名, 也可以在select查询中指定列名.
4 with check option: 指定对视图执行的dml操作必须满足“视图子查询”的条件即,对通过视图进行的增删改操作进行"检查",
要求增删改操作的数据, 必须是select查询所能查询到的数据,否则不允许操作并返回错误提示. 默认情况下, 
在增删改之前"并不会检查"这些行是否能被select查询检索到. 
5 with read only:创建的视图只能用于查询数据, 而不能用于更改数据.

五 : 示例 : 
create view customer_contact_inner
as 
select t1.cust_name custname,
t1.cust_id custid,
t1.idcard idcard,
t1.age age,
t1.sex sex,
t1.brith birth,
t2.contact_type contacttype,
t2.contact_text text
from customer t1, contact t2
where t1.cust_id = t2.cust_id

select * from customer_contact_inner where custname = '张效民'
这样就减少了查询的逻辑语句

SQL强化(一)保险业务的更多相关文章

  1. SQL强化练习(面试与学习必备)

    一.经典选课题A 1.1.请同时使用GUI手动与SQL指令的形式创建数据库.表并添加数据. 题目:设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教 ...

  2. SQL强化(三) 自定义函数

    ---恢复内容开始--- Oracle中我们可以通过自定义函数去做一些逻辑判断,这样可以减少查询语句,提高开发效率 create  -- 创建自定义函数 or replace -- 有同名函数就替换, ...

  3. SQL强化(二) 在Oracle 中写代码

    一  : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, 'L', '长', 'm', '短', ' ...

  4. 基本的sql 语句

    1,登陆数据库:mysql -u root -p2,退出数据库:exit quit ctr+d3,创建数据库:create database 数据库名 charset=utf84,使用数据库:use ...

  5. 数据库语言sql

    数据库语言SQL SQL的形式 交互式SQL 一般DBMS都提供联机交互工具 用户可直接键入SQL命令对数据库进行操作 由DBMS来进行解释 嵌入式SQL 能将SQL语句嵌入到高级语言(宿主语言) 使 ...

  6. 一个小时学会MySQL数据库

    随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道. 一.数据库概要 数据库(Database)是存储与管理数据的软件系统,就像一个存入 ...

  7. [工具]K8tools github/K8工具合集/K8网盘

    K8tools 20190428 声明: 工具仅供安全研究或授权渗透,非法用途后果自负. 博客: https://www.cnblogs.com/k8gege 下载: https://github.c ...

  8. 【转载】一个小时学会MySQL数据库

    一个小时学会MySQL数据库   目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数 ...

  9. 3sql

    -------------------- 三范式-- 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列. -- 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个 ...

随机推荐

  1. xamarin android打开拍照

    xamarin android打开摄像头 Intent intentBrowser = new Intent("android.media.action.IMAGE_CAPTURE" ...

  2. RabbitMQ 1-入门学习

    环境: 软件环境MacOS ,Homebrew包管理工具 IDE: Eclipse 项目:Maven项目 1.安装RabbitMQ Server: 方式一:通过homebrew :终端执行:brew ...

  3. Python学习(四):模块入门

    1.模块介绍 模块:代码实现的某个功能的集合 模块分类: 自定义模块 内置标准模块 开源模块 模块的常用方法: 是否为主文件:__name__ == '__main__' 如果是直接执行的某程序,那么 ...

  4. jQuery模块化开发

    //定义了命名空间. var Itcast = {}; //定义第二级别的 命名空间. var Itcast.Model = {}; var Itcast.Model.UIJs = (function ...

  5. 1.1 About Percona XtraDB Cluster

    摘要: 出处:kelvin19840813 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎 ...

  6. SQL基础学习_02_查询

    SELECT语句 1. SELECT语句查询列(字段):     SELECT <列名>    FROM <表名>;     该语句使用了两个SQL子句,SELECT子句列举了 ...

  7. Head First设计模式之责任链模式

    一.定义 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止. 主要解决:职责链上的处理者负责处理请求,客户只需要将请求 ...

  8. 利用lsof恢复进程占用的文件

    说明:经常会遇到这种情况,没有使用正确的方式清理进程占用的文件,比如日志.导致空间并没有释放.也有的时候需要恢复进程占用的文件. 解决方式 lsof |grep del # 找出自己要恢复的文件名称. ...

  9. IDEA第八章----远程调试

    大家有没有遇到相同分支的代码在本地就是没有问题的,但是到测试环境死活不能实现功能,且还不报错.通常我们的解决办法就是打日志,然后一点一点跟踪日志. 这时我们在想如果也可以按照本地一样能断点测试的程序就 ...

  10. Java学习笔记7(简易的超市库存管理系统示例)

    用以前学过的知识,可以简单地做一个超市库存管理系统: 定义一个商品类: public class FruitItem { int ID; String name; double price; int ...