东北大学数据库实验报告 联系客服

发布时间 : 星期三 文章东北大学数据库实验报告更新完毕开始阅读46e0a43dce2f0066f43322c2

4. 利用INSERT语句向应收费用表中为该客户插入2个月份的应收费信息。

Insert into monthlyneedpay

(id,deviceno,clientno,logdate,sfrom,sto,basicfee,addfee1,addfee2,latefee,needpay,actualpay,payday,paystatus)values(1,1,1001,to_date(?2015-1-31?,?YYYY-MM-DD?),120,150,10,1,2,0,14.7,0,to_date(?2015-2-5?,?yyyy-mm-dd?,),0) Insert into monthlyneedpay

(id,deviceno,clientno,logdate,sfrom,sto,basicfee,addfee1,addfee2,latefee,needpay,actualpay,payday,paystatus)values(2,2,1001,to_date(?2015-2-28?,?YYYY-MM-DD?)150,180,10,1,2,0,14.7,0,to_date(?2015-3-5?,?yyyy-mm-dd?,),0)

5. 在不考虑附加费和违约金的情况下,给定一个客户号,查询该客户号下所有设备累计应收基本费

用;

Select sum(needpay)+sum(addfee1)+sum(addfee2)+sum(latefee) from monthlyneedpay where clientno=1001;

第三部分:(理解关系运算)

1. 已知关系表r和s如下:

给出差运算r-s和s-r的结果;

表r A a d c 表s D b E g 4

B b a b F a C c f d

d R-S

A a c B b b a f C c d S-R

D b E g F a

2.描述下面查询的结果,如果将UNION用EXCEPT替代,又会有什么样的查询结果?

( SELECT A FROM r, s WHERE r.a = s.d ) UNION ( SELECT A FROM r, s WHERE r.c = s.d );

UNION 这条语句是查询数据库中r表的a字段的值和s表中的d字段的值,r表中c字段的值和s表中d字段的值相等的部分,取出相等的部分后,相同的结果只保留一个。将union换位EXPECT后 得到的结果是只存在表a中和d相等的部分,并且去掉重复行。

5

2.SQL

请写出针对以下问题的SQL语句(每一问必需用一条SQL语句实现,但该SQL语句可以包含子查询)。

1.

查询姓张的所有客户信息

Select * from clinet where clientname like ?张%?; 2.

查询客户号1001的客户拥有的计费设备个数。

Select count(*) from device where clientno=1001; 3.

计算客户号1001在2016年1月产生的附加费用1和附加费用2; Select

addfee1,addfee2

from

monthlyneedpay

where

to_char(logdate,?yyyy?)=2016 and to_char(logdate,?mm?)=1; 4.

查询客户号1001在2016年的历史缴费记录;

Select * from paylog where clientno=1001 and to_char(payday,?yyyyy?)=2016; 5.

更新客户号1001在2016年1月份的收费标识为1;

Update monthlyneedpay set paystatus=?1? where to_char(payday,?yyyy?)=2016 and

to_char(payday,?mm?)=1; 6.

Select * from monthlyneedpay order by clientno asc,payday desc; 查询应收费用表,先按照客户号升序排序,再按照年份排序降序排序。

3.Advanced SQL

在该练习中,我们根据银行代收费系统的需求,完成以下高级SQL语句的编写:

1. 查询前一年所有客户的欠费记录,按照客户编号升序排列。

Select clientno,needpay,payday from monthlyneedpay where paystatus=0 and to_char(payday,?yyyy?)=2015 order by clientno asc; 2. 查询当前年份欠费记录超过5条以上的用户。

select * from (select sum(case PAYSTATUS when '0' then 1 else 0 end) as QUANTITY from monthlyneedpay where to_char(LOGDATE,'yyyy')='2016' group by CLIENTNO)where QUANTITY>=5;

3计算客户号1001的客户,其名下所有设备的应收基本费用之和,附加费用1之和,附加费用

2之和。

Select count(needpay),count(addfee1),count(addfee2) from monthlyneedpay

6

where clientno=1001;

4.计算客户号1001在2016年1月份,计费设备号100的应收违约金。

Select latefee from monthlyneedpay where clientno=1001 and deviceno=100 and to_char(payday,?yyyy?)=2016 and to_char(payday,?mm?)=1;

5.计算银行代号为19的银行在20160130产生的缴费总次数和总金额,冲账的记录不记录总次数和总金额中。

select

banktotalcount,banktotalmoney

from

checktotal

where

bank_id=19

and and

to_char(checkdate,,?yyyy?)=2016 to_char(checkdate,?dd?)=30;

and to_char(checkdate,?mm?)=1

4.Programming with Transactions and Procedure Process

编写存储过程完成以下问题(如果不熟悉存储过程的编写,也可以顺序执行多条SQL语句来实现功能需求): 第一部分【查询】: 交易描述:

判断客户号是否存在,然后根据客户号取得客户姓名,地址,应收费用。

其中应收费用的计算:该用户下所有计费设备,计算所有计费设备未交费的所有月份应收费用的和。计费设备应收费用的计算:根据计费设备号取得基本费用,附加费用1,附加费用2,应收违约金,实收违约金 ,减免违约金后,应收费用=基本费用+附加费用1+附加费用2+应收违约金-减免违约金,依次获取该计费设备收费标志为0的所有月份应收费用的和。修改应收费用表中的应收违约金,附加费用1,附加费用2几个字段,避免执行缴费操作后的重复计算。获取的客户姓名、地址、应收费用等数据返回。 createorreplaceprocedure checkclient(client_no innumber,error outvarchar2, outclientnanme outvarchar2,outaddress outvarchar2,outneedpay outnumber)is

Tclientnanme varchar2(20); Taddress varchar2(20); Tneedpay number(7,2); clientnum number(4); Taddfee1 number(7,2); Taddfee2 number(7,2); Terror varchar2(20); Tlatefee number(7,2); begin

7