【SQL server】期末模拟

考试时间2 hours

分制15 + 85 = 100
 

一、单选题(每题1.5分,共 15 分)

  1. 在存在下列关键字的SQL语句中,不可能出现Where子句的是( )。
    A. Update
    B. Delete
    C. Insert
    D. Alter

  2. 在SELECT语句的WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是( )
    A. *   B.%   C.-   D.?

  3. 下面不属于数据定义功能的SQL语句是:( )
    A. CREATE TABLE
    B. CREATE CURSOR
    C. UPDATE
    D. ALTER TABLE

  4. 列值为空值(NULL),则说明这一列( )。
    A. 数值为0
    B. 数值为空格
    C. 数值是未知的
    D. 不存在

  5. SQL的聚集函数COUNT、SUM、AVG、MAX、MIN不允许出现在查询语句的( )子句之中。
    A. SELECT
    B. HAVING
    C. GROUP BY… HAVING
    D. WHERE

  6. 如果要在一张管理职工工资的表中限制工资的输入范围,应使用( )约束。
    A. PDRIMARY KEY
    B. FOREIGN KEY
    C. unique
    D. check

  7. ( )是位于用户与操作系统之间的一层数据管理软件,它属于系统软件,它为用户或应用程序提供访问数据库的方法。数据库在建立、使用和维护时由其统一管理、统一控制。
    A.DBMS
    B.DB
    C.DBS
    D.DBA

  8. 在查询语句的Where子句中,如果出现了“age Between 30 and 40”,这个表达式等同于( )。
    A. age>=30 and age<=40
    B. age>=30 or age<=40
    C. age>30 and age<40
    D. age>30 or age<40

  9. SQL的视图是从( )中导出的。
    A. 基本表   B. 视图   C. 基本表或视图   D. 数据库

  10. 下列哪个不是sql 数据库文件的后缀。( )
    A. .mdf   B. .ldf    C. .tif    D. .ndf

 
答案(对应选择1~10):DBCCD DAACC

分析(不对应题号):

  1. DML语句包括增删改查:insert, delete, update, select
  2. DDL语句包括create, alter, drop
  3. SQL中模糊查询中匹配0到多个字符的通配符是%,而不是*
  4. SQL中的null的含义为数值为未知的,或者说尚未填入的;是有具体含义的,并不是"不存在"
  5. DBS数据库系统DBMS数据库管理系统(Management),是数据库系统的核心(SQL Server,MySQL就是DBMS)
  6. SQL视图是从基本表视图中导出的

二、设计题(共 85 分)



--1.已知字符串ABCDEFG,写出T-SQL语句,使得输出的结果为ab
select lower(left('ABCDEF', 2))



--2.使用T-SQL语句建立数据库university,它包含2个文件组:主文件组、u1文件组。
--	主文件组包含30MB的umgt1和30MB的umgt2两个文件,两个文件的最大尺寸为100MB,增长长度为10%;
--	u1文件组包含20MB的umgt3一个文件,这个文件的最大尺寸不限,增长长度为3MB。
--	该数据库同时还包含一个日志文件umgtlog,文件大小为20MB,增长长度为10%。(存储路径都为d:\ university)(10分)

create database university

on primary
(
	name = umgt1,
	filename = 'd:\university\umgt1.mdf',
	size = 30MB,
	maxsize = 100MB,
	filegrowth = 10%
),
(
	name = umgt2,
	filename = 'd:\university\umgt2.mdf',
	size = 30MB,
	maxsize = 100MB,
	filegrowth = 10%
),
filegroup u1
(
	name = umgt3,
	filename = 'd:\university\umgt3.ndf',
	size = 20MB,
	maxsize = unlimited,
	filegrowth = 3MB
)

log on
(
	name = umgtlog,
	filename = 'd:\university\umgtlog.ldf',
	size = 20MB,
	filegrowth = 10%
)
-- 这题有个小bug,一个数据库只能有一个主数据文件(.mdf),但这里创建了两个


--3.在university数据库中包含有学生信息表(student)、课程信息表(course)和成绩表(score),它们的定义分别为:
--	student (学号 char(6)  not null,姓名 char(8),性别 char(2),出生时间 datetime,专业 char(12),总学分int 0到100学分之间,备注varchar(500)) 
--	course (课程号 char(3)  not null,课程名 char(16)not null,开课学期tinyint default 1,学时tinyint default 0,学分tinyint default 0)
--	score (学号 char(6)  not null,课程号 char(3)  not null,成绩int default 0, 主键为学号与课程号的组合)

-- (1)用T-SQL语句分别创建表student 表,course表,score表,并插入相关数据,相关数据见附录。(6分)
create table student
(
	学号			char(6) not null,
	姓名			char(8) not null,
	性别			char(2),
	出生日期		datetime,
	专业			char(12),
	总学分		int check(总学分 >= 0 and 总学分 <= 100),
	备注			varchar(500)
)
create table course
(
	课程号		char(3) not null,
	课程名		char(16) not null,
	开学日期		tinyint default(1),
	学时			tinyint default(0),
	学分			tinyint default(0)
)
create table score
(
	学号			char(6) not null,
	课程号		char(3) not null,
	成绩			int default(0),
	constraint pk_sc primary key(学号, 课程号)
)




--(2)查询student 表中通信工程系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换,列标题更改为“等级”。
--	  若总学分为空值,则替换为“尚未选课”;
--	  若总学分小于42,则替换为“不及格”;
--	  若总学分在42与52之间,则替换为“合格”;
--	  若总学分大于52,则替换为“优秀”。(6分)

select 学号, 姓名, '等级' = case
		when 总学分 is null then '尚未选课'
		when 总学分 < 42 then '不及格'
		when 总学分 between 42 and 52 then '合格'
		when 总学分 > 52 then '优秀' end 
from student
where 专业 = '通信工程'



--(3)在student表中查询出生于1990年1月1日以前的学生的所有信息,并按学号降序排列。(6分)
select *
from student
where 出生日期 < '1990-01-01'
order by 学号 desc


--(4)查找选修了102号课程的学生姓名及该课程成绩。(6分)
select 姓名, 成绩
from student s, score sc
where s.学号 = sc.学号 and sc.课程号 = '102'


--(5)查找score表中所列选修课程信息中平均成绩在76分以上的课程名和平均成绩。(6分)
select c.课程名, AVG(成绩) as 平均成绩
from course c, score sc
where c.课程号 = sc.课程号
group by c.课程名 having AVG(成绩) > 76


--(6)创建视图ZH_VIEW,包括计算机专业张姓同学的相关信息,包括学号(在视图中列名为num)、姓名、其选修的课程名及成绩。(8分)
create view ZH_VIEW
as
select s.学号, s.姓名, c.课程名, sc.成绩
from student s, course c, score sc
where s.学号 = sc.学号 and c.课程号 = sc.课程号
and 专业 = '计算机' and s.姓名 like '张%'


--(7)创建用户定义函数,实现计算全体学生某门功课平均成绩的功能,并调用该函数计算课程号为102课程的平均成绩并输出。(函数名为AVG_FUN)(6分)
create function AVG_FUN(@courseId char(3)) returns int
as
begin
	declare @avg int
	set @avg = (select AVG(成绩) from score where 课程号 = @courseId group by 课程号)
	return @avg
end

select dbo.AVG_FUN('102')




--(8)创建一个存储过程PRO,计算某门课程(用课程号表示)的成绩最高分、最低分与平均分,
--	  并执行存储过程,显示课程号为101的课程的最高分、最低分与平均分。(8分)
create procedure PRO
	@courseId char(3)
as
begin
	select 课程号, 最高分 = MAX(成绩), 最低分 = MIN(成绩), 平均分 = AVG(成绩)
	from score where 课程号 = @courseId
	group by 课程号
end

exec PRO '101'


--(9)为student表创建一个名称为student_delete的触发器,当用户成功删除该表中的一条或多条记录时,触发器自动删除score表中与之有关的记录。
--   (注:在创建触发器之前要判断是否有同名的触发器存在,若存在则删除之。)(8分)

if exists(select name from sysobjects where name = 'student_delete' and type = 'tr')
drop trigger student_delete

create trigger student_delete on student
after delete
as
begin
	delete from score
	where score.学号 in (select 学号 from deleted)
end




--4. 在数据库university上给用户Ying授予创建表的权限,并使她有对course表的所有操作权限。(5分)
grant create table to Ying
grant all on course to Ying


--5.采用文件备份的方式将university数据库备份一份。(备份目录为d:\u_BP)(5分)
exec sp_addumpdevice 'DISK', 'uBP', 'd:\u_BP\university.bak'	
backup database university to uBP















-- 附录(直接复制):

-- student表:
insert into student values('081101','王林','男','1990-2-10','计算机',50,null)
insert into student values('081102','程明','男','1991-2-1','计算机',50,null)
insert into student values('081103','王燕','女','1989-10-6','计算机',50,null)
insert into student values('081104','韦严平','男','1990-8-26','计算机',50,null)  
insert into student values('081106','李方方','男','1990-11-20','计算机',50,null)
insert into student values('081107','李明','男','1990-5-1','计算机',54,'提前修完《数据结构》,并获学分')
insert into student values('081108','林一帆','男','1989-8-5','计算机',52,'已提前修完一门课')
insert into student values('081109','张强民','男','1989-8-11','计算机',50,null)
insert into student values('081110','张蔚','女','1991-7-22','计算机',50,'三好学生')
insert into student values('081111','赵琳','女','1990-3-18','计算机',50,null)
insert into student values('081113','严红','女','1989-8-11','计算机',48,'有一门课不及格,待补考')
insert into student values('081201','王敏','男','1989-6-10','通信工程',42,null)  
insert into student values('081202','王林','男','1989-1-29','通信工程',40,'有一门课不及格,待补考')
insert into student values('081203','王玉民','男','1990-3-26','通信工程',42,null)
insert into student values('081204','马琳琳','女','1989-2-10','通信工程',43,null)
insert into student values('081206','李计','男','1989-9-20','通信工程',44,null)
insert into student values('081210','李红庆','男','1989-5-1','通信工程',50,'已提前修完一门课,并获得学分')
insert into student values('081216','孙祥欣','男','1989-3-19','通信工程',48,null)
insert into student values('081218','孙研','男','1990-10-9','通信工程',47,null)
insert into student values('081220','吴薇华','女','1990-3-18','通信工程',47,null)  
insert into student values('081221','刘燕敏','女','1989-11-12','通信工程',42,null)
insert into student values('081241','罗琳琳','女','1990-1-30','通信工程',54,'转专业学习')

--course表:
insert into course values('101','计算机基础',1,80,5)
insert into course values('102','程序设计与语言',2,68,4)  
insert into course values('206','离散数学',4,68,4)
insert into course values('208','数据结构',5,68,4)
insert into course values('210','计算机原理',5,85,5)  
insert into course values('209','操作系统',6,68,4)  
insert into course values('212','数据库原理',7,68,4)
insert into course values('301','计算机网络',7,51,3)  
insert into course values('302','软件工程',7,51,3)

--score表:
insert into score values('081101','101',80)
insert into score values('081101','102',78)
insert into score values('081101','206',76)
insert into score values('081103','101',62)
insert into score values('081103','102',70)
insert into score values('081103','206',81)
insert into score values('081104','101',90)
insert into score values('081104','102',84)
insert into score values('081104','206',65)

猜你喜欢

转载自blog.csdn.net/m0_46202073/article/details/106920625
今日推荐