2024年3月6日发(作者:)

实验五 查询数据库

1) 启动SQL Server查询分析器,打开“SQL查询分析器”窗口。

2) 在“SQL查询分析器”窗口中选择要操作的数据库,如“XSCJ”数据库。

3) 在KC表中查询学分低于3的课程信息,并按课程号升序排列。

select *

From KC

Where 学分<=3

4) 在XS_KC表中按学号分组汇总学生的平均分,并按平均分的降序排列。

Select 学号,avg(成绩)

From XS_KC

Group by 学号

Order by 学号

5) 在XS_KC表中查询选修了3门以上课程的学生学号。

Select 学号

From XS_KC

Group by 学号

Having count(*)>=3

6) 按学号对不及格的成绩记录进行明细汇总。

Select 学号,成绩

From XS_KC

Where 成绩<60

7) 分别用子查询和连接查询,求107号课程不及格的学生信息。

Select *

From XSQK

Where 学号in

(select 学号

From XS_KC

Where 课程号= '107' and 成绩<60 )

8) 用连接查询在XSQK表中查询与杨颖住在同一寝室的学生,即其联系电话相同

Select *

From XSQK

Where 联系电话 in

(Select 联系电话

From XSQK

Where 姓名='杨颖')

9) 查询XSQK表中所有的系名。

10)查询有多少同学选修了课程。

select count(distinct 学号)

From

XS_KC

11) 查询有多少同学没有选课。

select count(*)

from xsQK left join xs_KC on xs_KC.学号=xsQK.学号

where 成绩is null

12)查询与杨颖同一个系的同学姓名。

select 姓名

From

xsQK

Where

13) 查询选修了课程的学生的姓名、课程名与成绩。

14) 统计每门课程的选课人数和最高分。

select 课程号,count(学号),max(成绩)

from xs_kc

group by 课程号

15) 统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列。

select 学号,count(课程号),max(成绩)

from xs_kc

group by 学号

order by count(课程号)

实验七 创建和使用索引

1) 给KC表的课程号属性上创建聚集索引K1,在XS_KC表的[学号,课程号]上创建复合索引IX_XS_KC。

create clustered index k1 on [KC](课程号)

create clustered index IX_XS_KC on [XS_KC](学号,课程号)

2)强制使用索引进行查询

select *

from kc with(index (k1))

实验八 创建并使用约束和默认值对象

1)建立一个默认值对象“DFO_出生日期”,其值为1980-1-1

Create default DFO_出生日期

As '1980-1-1'

2)将默认值对象绑定到XSQK表的出生日期列。

exec sp_bindefault DFO_出生日期,'xsqk.出生日期'

实验九 实现数据完整性

1)在XSQK表中创建一个规则X_R,只能接收8位的数字,并邦定到电话号码列中。

create rule x_R

as

@a like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

exec sp_bindrule x_r,'xsqk.电话号码 '

2)XSQK表再插入数据,电话号码为“7768971”,“34ar”,检查完整性

参照完整性

1)给XSQK,KC,XS_KC建立参照完整性,确定主码,外码。

alter table KC

add constraint skc primary key(课程号)

alter table xsqk

add constraint skc1 primary key(学号)

alter table xs_kc

add constraint skc2 primary key(学号,课程号)

alter table xs_kc

add constraint xs foreign key(学号) references xsqk(学号)

on

delete cascade

on update cascade

alter table xs_kc

add constraint xs1 foreign key(课程号) references kc(课程号)

on delete no action

on update noaction

2)设置SXQK表对于删除和更新操作是级连,KC表对于删除更新操作是拒绝。

3)在XS_Kc表中分别插入两条记录,学号分别为“020208”和“020201”检查完整性。

4)更新XS_KC,更改学号“020201”为“020206”,检查完整性。

5)删除XSQK表中的学号为“020201”的记录,更改学号为“020201”的记录为“020208”

实验十 用户自定义函数

1)创建一个函数,输入学生学号,要求出此学生所选课程的门数

create function n1

(@id int ) -- 参数

returns int -- 返回值类型

begin

declare @nu int

select @nu=count(*)

from xs_kc

where 学号=@id

return @nu -- 返回值

end

select dbo.n1('020101')

2)创建一个函数,输入教师姓名,要求输入此教师所授课程被选修的情况

create function table1

(@tname varchar(50))

returns table

return

(select *

from kc

where 教师=@tname and 课程号 in

(select 课程号

from xs_kc

))select *

from t('陈红')

3)创建一个函数,输入学号,输出这个学生选修的情况以及成绩的等级。

小于60 不及格 60-70 及格 70-80 中等 80-90 良好

90以上 优秀

create function m6

(@sno nchar(10))

returns @my_table table

(

sno nchar(10),

cno nchar(10),

grade nchar(10),

l nchar(10)

)

as

begin

insert @my_table select 学号,课程号, 成绩,l=

case

when 成绩 <60 then '不及格'

when 成绩>=60 and 成绩<70 then '及格'

when 成绩>=70 and 成绩<80 then '中等'

when 成绩>80 and 成绩<=90 then '良好'

else '优秀'

end

from XS_kc

where 学号=@sno

return

end

select *

from m6('020101')

实验十一 实现存储过程

1)建立一个存储过程,要求输入一个课程号,查询该课成绩不及格的学生的基本信息,包括学号、姓名、性别和联系电话信息,最后输出。

create proc mp4

@cno varchar(10)

as

select xsqk.学号,姓名,性别,联系电话

from xsqk,xs_kc

where xsqk.学号=xs_kc.学号 and 成绩<60 and 课程号=@cno

exec mp4 ‘001’

2)创建一个存储过程,要求输入教师号,输出该教师所教课程的课程的被选修的人数

create proc mp5

@tno varchar(10)

as

select count(*)

from kc,xs_kc

where kc.课程号=xs_kc.课程号 and 教师=@tno

exec mp5 '陈红'

3)执行所创建的二个存储过程

4) 删除新建的存储过程

Drop proc mp5