重点SQL

某银行有集中的关系数据库,其中有用下面的SQL语句创建的三张表:

表1:

字段名

类型

说明

BRNNUM

CHAR(4)

网点编号

ACC_NO

CHAR(10)

账户号

ACC_SERIAL

SMALLINT

子账户序号

ACC_TYP

CHAR(2)

账户类别 ‘01’表示存款

         ‘02’表示贷款

CRYNUM

CHAR(2)

币种 ‘10’ 表示人民币

      ‘21’表示港币

      ‘32’表示美元

BLAV

NUMEBER(14,2)

金额

 

 

表2:BRNNUM

字段名

类型

说明

BRNNUM

CHAR(4)

网点编号

BRN_NAM

CHAR(40)

网点名称

BANKNO

CHAR(4)

网点归属分行编号

 

表3:BANKNO

字段名

类型

说明

BANKNO

CHAR(4)

分行编号

BANK_NAM

CHAR(40)

分行名称

 

表4:EXCH_RATE

字段名

类型

说明

CRYNUM

CHAR(2)

币种

RAT_RMB

NUMBER(9,5)

该币种对人民币汇率

 

 

 

其中,表中的数据具有以下特征:、

a.      任何一个账户号都明确的归属某个银行网点。

b.      账户号(ACC_NO)下可以有多个账户序号(ACC_SERIAL)

c.      账户类别(ACC_TYP)和币种(CRYNUM)是ACC_NO+ACC_SERIAL的属性,在特定ACC_NO+ACC_SERIAL 下ACC_TYP+CRYNUM不会重复。

d.      任何一个网点都归属一个上级机构….分行

e.      ACC_BLAV表已经有基于ACC_NO,ACC_TYP,CRYNUM的索引

f.       ACC_BLAV表中记录条数大于1000万。

 

 

请用标注sql语句回答下面问题

1为保证特征c中的要求的完整性(不会重复),有一种实现方法是建立索引,请写出语名。

 

 

 

 

 

 

 

2.列出账户号为’001’的客户的人民币存款余额合计。内容:余额。

 

 

 

 

 

 

 

3.列出分行编号为’7501’的分行下全部账户人民币存款情况。

内容:网点编号,账户号,余额

其中余额是该账户号的人民币存款余额合计

 

 

 

 

 

 

 

 

4.为了最大限度提高第3题中你所写语句的执行效率,请写一条建立该表索引的语句。

 

 

 

 

 

 

 

 

5列出各分行合计人民币存款余额。内容:分行代码,分行名称,余额。

 

 

 

 

 

 

6现有下面的嵌套SQL语句

        Select *

        From ACC_BLAV

        WhereBRNNUM=(select BRNNUM

                       From BRNNUM

                       Where BANKNO=’7501’)

请将其改写为不用嵌套的SQL语句,要求结果完全一样。

 

 

 

 

 

 

 

 

 

 

 

7.列出分行编号为’7501’的分行下全部账户存款情况。

内容:网点编号,账户号,余额

其中余额是该账户号的各币种存款余额都折成人民币后的余额

 

 

 

 

 

 

 

 

 

 

 

 

8.假设在前面表结构和说明基础上,还有一张交易表ACC_TRAN.某一笔交易过程要对

ACC_TRAN表做插入操作。和对ACC_BLAV做更新操作。请写一段SQL流程,完成此笔

交易,不必写出更新和插入细节,更新和插入用自然语言描述即可。

 

 

 

 

create database bankdb
go
use bankdb
go
create table ACC
(
   BRNNUM char(4) not null,   --网点编号
   Acc_No char(10) not null,  --帐户号
   Acc_Serial smallint not null,  --子帐户序号
   Acc_Typ char(2) not null,      --帐户类别 '01'表存款 02不贷款
   CRYNUM char(2) not null,       --币种  10RMB  21 港币 32表美元
   BLAV numeric(14,2) not null    --金额
 )
 
 create table Branch
 (
     BRnNum char(4) not null,   --网点编号
     brn_nam char(40) not null, --网点名称
     bankNo char(4) not null    --网点归属分行编号
 )
 
 create table bank
 (
    bankNo char(4) not null,    --分行编号
    bank_Nam char(40) not null  --分行名称
 )
 
 create table exch_rate
 (
     cryNum char(2) not null,    --币种
     rat_rmp  numeric(9,5) not null   --对人民币汇率
 )
 
 --1.建立Acc_No+Acc_Serial+Acc_TYP +CRYNUM的唯一索引
 
 --2.列出帐户号为'001'的客户的人民币余额合计
 select SUM(blav) as 合计
 from ACC 
 where Acc_No='001' and acc_type='01'
 
 --3
 select acc.brnnum,acc_no,sum(blav) as 合计
 from ACC inner join Branch on acc.BRNNUM= Branch.BRnNum 
          inner join bank on bank.bankNo = Branch.bankNo
 where Branch.bankNo='7501'
 group by acc.brnnum,acc_no
 
 --4建立brnnum +acc_no的索引
CREATE NONCLUSTERED INDEX [idx_accNO_BrnnUM] ON [dbo].[ACC] 
(
[BRNNUM] ASC,
[Acc_No] ASC
) on [PRIMARY]  --文件组Primary
 
   
   
   --5
   select b.bankNO,Bank_Nam,SUM(BLAV)
   from bank as b,
        Branch as br,
        ACC as a
   where b.bankNO = br.bankNO and
         br.brnnum = a.brnnum and
         a.Acc_Typ='01'
   group by b.bankNO,Bank_Nam
   
   
   --6
   select acc.*
   from ACC inner join Branch on acc.BRNNUM = Branch.BRnNum
   where  bankNo ='7501'
   
   --7
   select Branch.BRnNum,ACC.Acc_No,SUM(blav*exch_rate.rat_rmp)
   from acc inner join branch on acc.BRNNUM = branch.BRnNum
            inner join bank on bank.bankNo = branch.bankNo
            inner join exch_rate on acc.CRYNUM = exch_rate.cryNum
   where bank.bankNo='7501' and
 acc.Acc_Typ='01'
    group by Branch.BRnNum,ACC.Acc_No
      
 
 --8

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值