SQL考试练习题及全部答案3

Posted 兔老大RabbitMQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL考试练习题及全部答案3相关的知识,希望对你有一定的参考价值。

五、简答题(每题5分,共20)

1.(1)创建SQL Server登录账户Sql1,密码为“123456”;(2分)

(2)将Comments表的查询、删除和插入的权限授予数据库用户Sql1和Sql2,并且这两个数据库用户还可以将得到的权限再授予其他人。(3分) 

2. 参照第三道应用题所给数据库的部分模式,创建一个函数FunBook,根据用户提供的图书类别名查看相应类别图书的详细信息。

3. 根据第三道应用题所给数据库的部分模式,创建一个触发器TrInsUpd,当向图书表中插入或更新一条记录的类别代号时,新记录的类别代号必须在图书类别表中存在,否则提示类别代号不正确。

答案:

1.

CREATE LOGIN Sql1 WITH PASSWORD='123456'

GRANT SELECT,DELETE,INSERT ON Comments TO Sql1,Sql2  WITH GRANT OPTION

2. CREATE FUNCTION FunBook(@categoryName nvarchar(50))

RETURNS TABLE

AS RETURN

(SELECT b.*

FROM 图书 b JOIN 图书类别 c ON b.类别代号=c.类别代号

WHERE c.类别名=@categoryName

)

3. CREATE TRIGGER TrInsUpd ON 图书 AFTER INSERT,UPDATE

AS

IF NOT EXISTS(SELECT * FROM inserted WHERE 类别代号 IN(

SELECT 类别代号 FROM 图书类别))

       BEGIN

              PRINT '类别代号不正确!'

              ROLLBACK TRANSACTION

       END

六、应用题(每题2分,共20分)

某书店后台数据库的部分关系模式如下:

图书类别类别代号,类别名)

图书书号,书名,ISBN,作者,单价,类别代号)

顾客顾客编号,姓名,地址,推荐人编号

推荐人编号表示推荐这名顾客注册的老顾客的编号

订单订单号,顾客编号,订购日期,出货日期)

订单明细订单号,书号,数量,总价)

按要求实现下列操作:

1.在图书表中查看有哪些类别代号。

2.显示类别代号是LA01或者单价低于20元的图书的书号、书名、单价和类别代号。

3.显示所有图书的书号、书名、单价和类别代号,首先按照类别代号升序排序,对于类别代号相同的图书再并按照图书单价降序排。

4.统计类别代号是CO01的图书册数和单价总和。

5.统计销售次数超过5次的图书的书号和销售总册数。

6.显示那些有推荐人的顾客的详细信息以及其推荐人的姓名。

7.显示2009年以后购买过图书的顾客的编号和姓名。

8.创建一个名为ViewComputers的视图,该视图包含所有计算机类的图书详细信息以及类别名。

9.向表图书中除了类别代号以外的所有列中插入数据,书号为“11”,书名为“英语阅读词汇双突破”, ISBN为“7560922171”,作者为“杨建荣”,单价为19.00。

10.删除编号为101的图书记录。

答案:

1.在图书表中查看有哪些类别代号。

SELECT DISTINCT 类别代号

FROM 图书

2.显示类别代号是LA01或者单价低于20元的图书的书号、书名、单价和类别代号。

SELECT 书号, 书名, 单价, 类别代号

FROM 图书

WHERE 类别代号='LA01' OR 单价<20

3.显示所有图书的书号、书名、单价和类别代号,首先按照类别代号升序排序,对于类别代号相同的图书再并按照图书单价降序排。

SELECT 书号, 书名, 单价, 类别代号

FROM 图书

ORDER BY 类别代号, 单价 DESC

4.统计类别代号是CO01的图书册数和单价总和。

SELECT COUNT(书号) AS 图书册数, SUM(单价) AS 单价总和

FROM 图书

WHERE 类别代号='CO01'

5.统计销售次数超过5次的图书的书号和销售总册数。

SELECT 书号, SUM(数量) AS 销售总册数

FROM 订单明细

GROUP BY 书号

HAVING COUNT(订单号)>5

6.显示那些有推荐人的顾客的详细信息以及其推荐人的姓名。

SELECT c1.*, c2.姓名

FROM 顾客 c1, 顾客 c2

WHERE c1.推荐人编号=c2.顾客编号

7.显示2009年以后购买过图书的顾客的编号和姓名。

SELECT c.顾客编号, c.姓名

FROM 顾客 c

WHERE EXISTS ( SELECT *

                FROM 订单 o

                WHERE o.订购日期>='01/01/2009'  AND c.顾客编号=o.顾客编号)

8.创建一个名为ViewComputers的视图,该视图包含所有计算机类的图书详细信息以及类别名。

CREATE VIEW ViewComputers

AS

SELECT b.*, c.类别名

FROM 图书 b JOIN 图书类别 c ON b.类别代号=c.类别代号

WHERE c.类别名='计算机'

9.向表图书中除了类别代号以外的所有列中插入数据,书号为“11”,书名为“英语阅读词汇双突破”, ISBN为“7560922171,作者为“杨建荣”,单价为19.00

INSERT INTO 图书(书号,书名,ISBN,作者,单价)

       VALUES(‘11’,'英语阅读词汇双突破','7560922171','杨建荣',19.00)

10.删除编号为101的图书记录。

DELETE FROM 图书

WHERE 书号=’101’

七、简答题(每题5分,共20)

1.(1)创建基于登录账户Sql2的数据库用户Sql2,并为该用户指定默认架构Sale。(3分)

(2)把用户U5对SC表的INSERT权限收回。(2分)

2. 参照第三道应用题所给数据库的部分模式,创建一个存储过程PrcSelect,根据用户提供的图书类别名查看相应类别图书的详细信息。

3. 根据第三道应用题所给数据库的部分模式,创建一个函数FunBookSale,该函数根据给定的书号返回该图书销售的数量。

答案:

1.1)(3分)

CREATE USER Sql2 FROM LOGIN Sql2

WITH DEFAULT_SCHEMA=Sale

2)(2分)

REVOKE  INSERT  ON  TABLE SC  FROM  U5 

2. CREATE PROCEDURE PrcSelect  @categoryName nvarchar(50)

AS

SELECT b.*

FROM 图书 b JOIN 图书类别 c ON b.类别代号=c.类别代号

WHERE c.类别名=@categoryName

3. CREATE FUNCTION FunBookSale (@bookID int)

RETURNS int

AS

BEGIN

       DECLARE @quantity int

       SELECT @quantity=SUM(quantity)

       FROM OrderItems

       WHERE bookID=@bookID

RETURN @quantity

END

八、请按要求完成操作(30分)

某校学生-课程数据库部分关系模式如下:

学生表 Student(Sno,Sname,Sage,Ssexdepartment)  

课程表Course(Cno,Cname, CcreditTno)   

成绩表 SC(Sno,Cno, grade)  

教师表Teacher(Tno,Tnametsex) 

  1. 数据查询(每题2分,共20分)
  1. 查询张姓学生的信息

(2) 查询计算机学院女学生的信息,并按年龄降序排列

(3) 查询选修了项天老师课程的学生信息

(4) 查询至少有一门课程与李燕所选课程相同的学生的学号、姓名

(5) 求各门课程最高成绩、最低成绩、课程号。

  1. 求选修了全部课程的学生信息
  2. 求1995年前出生的学生信息
  3. 查询所有学生的选课情况,包括没有选课的学生
  4. 查询两门以上不及格课程的同学的学号及其平均成绩
  5. 检索至少选修两门课程的学生学号

2. 请SQL语句完成下列要求(共10分)

(1)创建课程表(2分)

(2) 删除成绩表中成绩为空的记录(2分)

(3) 在课程表的教师编号列上建立降序索引。(2分)

(4)在学生表上创建一个触发器trigger_delete,当删除学生信息时,将删除的学生保存到oldstudent表中,oldstudent和student表结构相同。(4分)

答案:

数据查询(每题2分,共20分)

1. select *  from student where sname like '%'

2 select * from student where department ='IS' and ssex='' order by sage desc

3 select  *

from student a,sc b,course c,teacher d

where a.sno = b.sno and

      b.cno = c.cno and

      c.tno = d.tno and

      tname = '项天'

4 select a.sno,sname

from student a,sc b

where a.sno = b.sno and sname <>'李燕' and

cno in(

  select distinct cno

  from student c,sc d

  where c.sno = d.sno and sname = '李燕'

)

5  select cno,max(grade),min(grade)

from sc

grop by cno

6 select *

from student

where not exists(

   select *

   from course

   where not exists(

      select *

      from sc

      where sno = student.sno and

            cno = course.cno

   )

)

7 select *

from student

where (year(getdate())-sage)<1995

8 select*

from student left outer join sc

on student.sno = sc.sno

9  select sno ,avg(grade)

from sc

where sno in (

 select sno

 from sc

 group by sno

 having count(case when grade<60 then 1)>=2

)

10   select sno

from sc

group by sno

having count(*)>=2

2. SQL语句完成下列要求(共10分)

1create table course(

  cno varchar(5) primary key,

  cname varchar(30),

  ccredit float,

  tno varchar(5),

  foreign key (tno) refrences  teacher(tno)

2) delete

from sc

where grade is null

3) create index index_tno on teacher(tno desc)

4) create trigger trigger_delete

on student

after delete

as

begin

  insert into oldstudent

  select *  from deleted

end

九. 已知学生数据库中存放了这样的两张表,一张为毕业生信息表(graduation),记录毕业生的一些基本信息,一张为学生缴费表(fee),记录了学生的缴费信息。由于学生毕业,我们要从学生信息表中把毕业生的记录删除,但是如果这个学生欠费的话,则不允许删除这个学生的记录。 (字段名都是中文,可以直接使用) (10分)

graduation (学号 姓名 性别 地址 联系方式)

fee(学号 姓名 已交费用 欠费)

  1. 建立一个存储过程pro_deletestudent在graduation表中删除指定毕业学生的信息,输入参数为学号。
  2. 在graduation表上建立一个触发器tr_checkfee,判断要删除的学生是否欠费,欠费则不允许删除该记录,否则删除该记录

答案:

1) 建立一个存储过程pro_deletestudentgraduation表中删除指定毕业学生的信息,输入参数为学号。

   create procedure pro_deletestudent

   @sno  char(9)

   as

    begin

              delete  from graduation where 学号 = @sno

      end

(2) graduation表上建立一个触发器tr_checkfee,判断要删除的学生是否欠费,欠费则不允许删除该记录,否则删除该记录

create  TRIGGER  tr_checkfee

on  graduation

for delete

as

begin

       DECLARE @sno char(9);

       Select @sno=deleted.sno from  deleted

       if exists(select * from  fee where 学号 = @sno and欠费>0)

              rollback

end

十、某书店后台数据库的部分关系模式如下:

图书类别类别代号,类别名)

图书书号,书名,ISBN,作者,单价,类别代号)

顾客顾客编号,姓名,地址,推荐人编号

推荐人编号表示推荐这名顾客注册的老顾客的编号

订单订单号,顾客编号,订购日期,出货日期)

订单明细订单号,书号,数量,总价)

按要求实现下列操作:

1.使用数据定义语言建立顾客、订单明细两张表的结构(注意添加相应的主外键约束)。(6分)

  1. 在图书表中查看有哪些类别代号。(2分)
  2. 显示类别代号是LA01或者单价低于20元的图书的书号、书名、单价和类别代号。(2分)
  3. 显示所有图书的书号、书名、单价和类别代号,首先按照类别代号升序排序,对于类别代号相同的图书再并按照图书单价降序排。(3分)
  4. 统计类别代号是CO01的图书册数和单价总和。(3分)
  5. 显示有推荐人的顾客的详细信息以及其推荐人的姓名。(3分)
  6. 删除编号为101的图书记录。(2分)
  1. 向表图书中除了类别代号以外的所有列中插入数据,书号为“11”,书名为“英语阅读词汇双突破”, ISBN为“7560922171”,作者为“杨建荣”,单价为19.00。(2分)
  2. 创建一个视图,要求显示订单编号、书名、ISBN、并且要求书的作者为“王珊”。(3分)
  3. 创建一个角色ROLE1,将顾客表的查询、更新、删除的权限授予该角色,并使用该角色对张明、赵强、李峰授权。(4分)

答案:

1.使用数据定义语言建立顾客、订单明细两张表的结构(注意添加相应的主外键约束)。(6分)顾客顾客编号,姓名,地址,推荐人编号

订单明细订单号,书号,数量,总价)

CREATE TABLE 顾客

(

  顾客编号 CHAR(9) PRIMARY KEY,

  姓名  CHAR(10),

  地址  VARCHAR(20),

  推荐人编号 CHAR(9),

  FOREIGN KEY (推荐人编号) REFERENCES 顾客(顾客编号)

);

CREATE TABLE 订单明细

(

  订单号 CHAR(8),

  书号  CHAR(10),

  数量  SMALLINT),

  总价 NUMERIC(8,2),

  PRIMARY (订单号, 书号),

  FOREIGN KEY (订单号) REFERENCES 订单(订单号),

FOREIGN KEY (书号) REFERENCES 图书(书号)

);

2.在图书表中查看有哪些类别代号。(2分)

SELECT DISTINCT 类别代号

FROM 图书

3.显示类别代号是LA01或者单价低于20元的图书的书号、书名、单价和类别代号。(2分)

SELECT 书号, 书名, 单价, 类别代号

FROM 图书

WHERE 类别代号='LA01' OR 单价<20

4.显示所有图书的书号、书名、单价和类别代号,首先按照类别代号升序排序,对于类别代号相同的图书再并按照图书单价降序排。(3分)

SELECT 书号, 书名, 单价, 类别代号

FROM 图书

ORDER BY 类别代号, 单价 DESC

5.统计类别代号是CO01的图书册数和单价总和。(3分)

SELECT COUNT(书号) AS 图书册数, SUM(单价) AS 单价总和

FROM 图书

WHERE 类别代号='CO01'

6.显示有推荐人的顾客的详细信息以及其推荐人的姓名。(3分)

SELECT c1.*, c2.姓名

FROM 顾客 c1, 顾客 c2

WHERE c1.推荐人编号=c2.顾客编号

7.删除编号为101的图书记录。(3分)

DELETE FROM 图书

WHERE 书号=’101’

8.向表图书中除了类别代号以外的所有列中插入数据,书号为“11”,书名为“英语阅读词汇双突破”, ISBN为“7560922171”,作者为“杨建荣”,单价为19.00。(3分)

INSERT INTO 图书(书号,书名,ISBN,作者,单价)

       VALUES(‘11’,'英语阅读词汇双突破','7560922171','杨建荣',19.00)

9. CREATE ROLE ROLE1

  GRANT SELECT,UPDATE,DELETE

  ON TABLE 顾客

  TO ROLE1

  GRANT ROLE1

  TO 张明,赵强,李峰

以上是关于SQL考试练习题及全部答案3的主要内容,如果未能解决你的问题,请参考以下文章

SQL考试练习题及全部答案

SQL考试练习题及全部答案

SQL考试练习题及全部答案4

SQL考试练习题及全部答案4

SQL考试练习题及全部答案2

SQL考试练习题及全部答案2