首页 > 代码库 > .net 面试题(3)

.net 面试题(3)

96、题目:

活期存款中,“储户”通过“存取款单”和“储蓄所”发生联系。假定储户包括:账号,姓名,电话,地址,存款额;“储蓄所”包括:储蓄所编号,名称,电话,地址(假定一个储户可以在不同得储蓄所存取款)
1、写出设计以上表格的语句。

  Create table 储户

账号 int primary key,姓名char(10),电话 int,地址 nvarchar(50),存款金额 money  )

  Create table 储蓄所

   编号 int primary key,名称 char(10),电话 int,地址 nvarchar(50)   )

  Create table  存取款单

  账号 Int not null,编号 Int not null,时间 datetime not null, 存取标志 int not null,存取金额 money )

2、创建一个触发器TR1完成下面内容:
当向“存取款单”表中插入数据时,如果存取标志=1则应该更改储户表让存款额加上存取金额,如果存取标志=0则应该更改储户表让存款额减去存取金额,如果余额不足显示余额不足错误。

  Create trigger InsertInfo on 存取款单 for insert 
       As 
      Declare @BZ int,@money money,@zh int
     Select @BZ=存取标志,@money=存取金额,@zh=账号
       From inserted   //从inserted 表中得到插入的记录信息
     If @BZ=0    //取钱
       Begin
         Declare @sy money
         Select @sy=存款金额 from 储户  //拿到用户的存款金额
         If (@sy<@money)  //如果存款金额小于所取的金额,说明金额不够
          begin
                raiserror (余额不足)
                rollback
          End
       Else
        begin
             Update 储户 set 存款金额-=@money where 账号=@zh   //更新储户表
        End 
        end
      If @BZ=1
      Begin
          Update 储户 set 存款金额+=@money where 账号=@zh
      end

 

97、本题用到下面三个关系表:

CARD     借书卡:   (CNO 卡号,NAME  姓名,CLASS 班级)

BOOKS    图书:     (BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数 )

BORROW   借书记录: (CNO 借书卡号,BNO 书号,RDATE 还书日期

备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。

要求实现如下处理:

1. 写出自定义函数,要求输入借书卡号能得到该卡号所借书金额的总和

 Create function fun_GetPrice
       (   @cno int  )
      Returns money   //指定函数的类型
      As
       Begin
          Declare @sum money
         Select @sum=sum(price) from book where bno in (select BNO from borrow where CNO=@cno )
      Return @sum  //函数的最后一条必须是return语句
       end

2. 找出借书超过5本的读者,输出借书卡号及所借图书册数。

  Select CNO,Count(bno) as 借书数量 from borrow group by CNO having Count(bno)>3

3. 查询借阅了"水浒"一书的读者,输出姓名及班级。

   Select Name,Class from Card where CNO in (select CNO from borrow where BNO in(select BNO from books where  bname=水浒 ) ) 

4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。

    Select CNO,BNO,RDate from borrow where RDate<getdate()

5. 查询书名包括"网络"关键词的图书,输出书号、书名、作者。

     Select BNO,BName,AUTHOR from books where BName like %网络%

6. 查询现有图书中价格最高的图书,输出书名及作者。 

    Select BName,AUTHOR from books where price in(select max(prcie) from  books)

7. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。

Select CNO from borrow where BNO in (select BNO from books Where bname=计算方法) and cno not in (select cno from borrow where bno in (select bno from books where bname=计算方法习题集))order by cno 

 

98.创建以下表结构,并添加一些测试数据:

Student(S#,Sname,Sage,Ssex) 学生表 

Course(C#,Cname,T#) 课程表 

SC(S#,C#,score) 成绩表 

Teacher(T#,Tname) 教师表 

 

1. 查询001课程比002课程成绩高的所有学生的学号; 

  - -把SC表查询两边,用来做比较

 Select c1.S# from SC as c1 join SC as c2 on c1=S#=c2.S# Where c1.C#=001 and c2.C#=002and c1.score>c2.score

2. 查询平均成绩大于60分的同学的学号和平均成绩; 

  Select S#,AVG(score) from SC group by S# having AVG(score)>60

3. 查询所有同学的学号、姓名、选课数、总成绩; 

 Select s.S#,Sname,Count(*) as 选课数,AVG(score) as 平均成绩 From Student as s join SC as c on s.S#=c.S# group by s.S#,Sname  - - 和聚合函数出现在一起的列,必须都在group by 语句中出现

4. 查询姓的老师的个数;  

1,Select Count(distinct(Tname)) from Teacher where Tname like %

2,select Count(Tname),Tname from Teacher where Tname like ‘李%‘ group by Tname  - -group by 相当于distinct

5. 查询没学过叶平老师课的同学的学号、姓名; 

 Select S#,Sname from Student where S# not  in( Select S# from  SC where C# in (Select C# from Course as c join Teacher as t on c.T#=t.T# where Tname=叶平))

 

 

 

.net 面试题(3)