文档库 最新最全的文档下载
当前位置:文档库 › 广药数据库实验答案参考

广药数据库实验答案参考

广药数据库实验答案参考
广药数据库实验答案参考

--实验三参考答案

(一)、数据库、表的创建及删除

1.将数据库bookdb的相关属性(系统默认设置),填入下表:

项目内容

数据库所有者XP-201104281226\Administrator(Windows身份登录SQL server)

数据库名称bookdb

数据库逻辑文件名bookdb

数据文件物理名D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\bookdb.mdf(本机SQL SERVER系统安装目录在D盘)

数据库初始大小3MB

数据文件最大值不限制增长

数据文件增长量1MB

日志逻辑文件名bookdb_log

日志文件物理名D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\bookdb_log.ldf(本机SQL SERVER系统安装目录在D盘)

日志文件初始大小1MB

日志文件最大值2,097,152MB

日志文件增长量10%

*/

--根据“二、实验内容”的要求,使用T-SQL命令创建/删除数据库EDUC,创建数据表student、course、sc。

--2.删除bookdb数据库。

DROP DA TABASE bookdb

--3.创建数据库EDUC。

CREA TE DA TABASE EDUC

ON PRIMARY

(

NAME='EDUC_data',

FILENAME='C:\EDUC_data.mdf',

SIZE=4MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

)

LOG ON

(

NAME='EDUC_log',

FILENAME='C:\EDUC_log.ldf',

SIZE=1MB,

MAXSIZE=UNLIMITED,

FILEGROWTH=10%

)

--4.创建数据表Student。

USE EDUC

CREA TE TABLE Student

(

Sno varchar(20) NOT NULL CONSTRAINT PK_Student PRIMARY KEY,

Sname varchar(10) NOT NULL,

Sage int,

Ssex varchar(2),

Sdept varchar(30)

)

--5.创建数据表Course。

CREA TE TABLE Course

(

Cno varchar(15) NOT NULL CONSTRAINT PK_Course PRIMARY KEY,

Cname varchar(30),

Cpno varchar(15),

Ccredit int

)

--6.创建数据表SC。

CREA TE TABLE SC

(

Sno varchar(20) NOT NULL,

Cno varchar(15) NOT NULL,

Grade DECIMAL(9,2),

CONSTRAINT PK_SC PRIMARY KEY(Sno,Cno)

)

--(二)、修改基本表的定义

--1.修改列属性

--(1)用SSMS将Student表中的Sage字段设为不能为空(not null)。

ALTER TABLE Student

ALTER COLUMN Sage int NOT NULL

--(2)用SQL语句将Student表中的属性Sno varchar(20)改成char(8)类型。

--先删除Sno上的各种约束(此例中Sno上的约束有:主键)

ALTER TABLE Student DROP CONSTRAINT PK_Student --CONSTRAINT 也可省略--再修改Sno列

ALTER TABLE Student ALTER COLUMN Sno CHAR(8) NOT NULL --需设置为不允许空,否则不能在该列上创建主键

--最后,恢复(添加)Sno上的主键约束

ALTER TABLE Student ADD CONSTRAINT PK_Student PRIMARY KEY(Sno)

--2.添加列

--(1)用SSMS在Course表中添加一列year,类型为varchar(4),默认置为空。ALTER TABLE Course

ADD year varchar(4) NULL

--(2)用SQL语句在year字段添加约束,year 的属性值在2006-2012之间。

ALTER TABLE Course

ADD CONSTRAINT CK_year CHECK(year BETWEEN 2006 AND 2012)

--3.删除列

--(1)用SQL语句将Course表中的year字段删除。

--先删除year上的各种约束(CHECK约束)

ALTER TABLE Course

DROP CONSTRAINT CK_year

--再删除year

ALTER TABLE Course

DROP COLUMN year --COLUMN不能省略

--实验四参考答案

--1. 统计各门课程所选修的人数,并把结果存储在一张新表中。(提示:用Select……Into……,group by)

SELECT Course_id,COUNT(*) AS 选修人数INTO Course_num

FROM StudentGrade

GROUP BY Course_id

--2.查询男生的资料。

SELECT *

FROM Student

WHERE Stu_sex='男'

--3.查询所有计算机系的班级信息。

--WHERE连接查询

SELECT *

FROM Class,Deparment

WHERE Class.depar_id=Deparment.depar_id AND Depar_name='计算机系'

--JOIN连接查询

SELECT *

FROM Class JOIN Deparment ON Class.depar_id=Deparment.depar_id

WHERE Depar_name='计算机系'

--嵌套查询

SELECT * --父查询:根据子查询找出的系别编号,查找该系别编号的班级

FROM Class

WHERE Depar_id=(SELECT Depar_id --子查询:找出计算机系的系别编号

FROM Deparment

WHERE Depar_name='计算机系')

--4.查询艾老师所教的课程号。(也可用嵌套查询)

SELECT Course_id,*

FROM CourseTeacher JOIN Teacher ON CourseTeacher.Teac_id=Teacher.Teac_id

WHERE Teac_name like '艾%'

--5.查询年龄小于30岁的女同学的学号和姓名。

--GETDA TE()为获取系统时间的函数,YEAR()为获取“年”,MONTH()为获取“月”,DAY()为获取“日”。

SELECT *

FROM Student

WHERE (YEAR(GETDA TE())-YEAR(Birthday))<30 AND Stu_sex='女'

--6.查询所有被选修的课程号。

SELECT DISTINCT Course_id --DISTINCT作用是去除重复行

FROM StudentGrade --存储在StudentGrade表中的数据均为选修数据,因此该表中的课程号即为被选修的课程号

--7.在学生基本信息表Student中检索学生的姓名和出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。

SELECT Stu_name AS STUDENT_NAME,YEAR(Birthday) AS BIRTH_YEAR --AS作用是起别名

FROM Student

--8.在StudnetGrade中,求选修课程“0511”且分数排名为前10%学生的学号和得分。SELECT TOP 10 PERCENT Stu_id,Grade

FROM StudentGrade

WHERE Course_id='0511'

ORDER BY Grade DESC

--9.查询选修课程号为“0109”或“0111”的学生学号。

SELECT Stu_id

FROM StudentGrade

WHERE Course_id='0109' OR Course_id='0111'

--或者

SELECT Stu_id

FROM StudentGrade

WHERE Course_id IN('0109','0111') --IN表示满足指定集合中的任意一个。

--10.查询课程“0101”的成绩在80与90之间的同学的学号。

SELECT Stu_id

FROM StudentGrade

WHERE Course_id='0101' AND (Grade BETWEEN 80 AND 90)

--11.查询平均成绩都在80分以上的学生学号及平均成绩。

SELECT Stu_id,A VG(Grade) AS 平均成绩

FROM StudentGrade

GROUP BY Stu_id HA VING A VG(Grade)>80

--实验五参考答案

--1.找出所有任教“数据库”的教师的姓名。

SELECT teac_name

FROM teacher JOIN courseteacher ON teacher.teac_id=courseteacher.teac_id JOIN course ON courseteacher.course_id=course.course_id

WHERE course_name='数据库'

--此处用连接查询,三个表连接后形成一个大表,然后从中筛选。

--练菲彰上了两个班级的数据库,因此有两条记录。可用DISTINCT去除重复行

--嵌套查询

SELECT teac_name --根据子查询得到的结果在teacher中找出上“数据库”的老师,上数据库的老师只有一个,故只有一条记录。

FROM teacher

WHERE teac_id in(SELECT teac_id FROM courseteacher

WHERE course_id=(SELECT course_id FROM course

WHERE course_name='数据库'))

--2.取出学号为“980101011”的学生选修的课程号和课程名。

SELECT course.course_id,course_name

FROM course JOIN studentgrade ON course.course_id=studentgrade.course_id

WHERE stu_id='980101001'

--嵌套查询

SELECT course_id,course_name

FROM course

WHERE course_id in(SELECT course_id FROM studentgrade WHERE stu_id='980101001')

--3.“涂杰杰”所选修的全部课程号及成绩。(注意:school中有同名,即有两名学生叫“涂杰杰”。)

SELECT course_id,grade

FROM studentgrade JOIN student ON studentgrade.stu_id=student.stu_id

WHERE stu_name='涂杰杰'

--嵌套查询

SELECT course_id,grade

FROM studentgrade

WHERE stu_id in(SELECT stu_id FROM student WHERE stu_name='涂杰杰')

--4.C语言成绩比数据结构成绩好的学生(自身连接)。

SELECT *

FROM studentgrade AS a JOIN studentgrade AS b ON a.stu_id=b.stu_id

WHERE a.course_id=(SELECT course_id FROM course WHERE course_name='C语言')

AND b.course_id=(SELECT course_id FROM course WHERE course_name='数据结构') AND a.grade>b.grade

--连接查询,比嵌套查询复杂

SELECT SG1.Stu_id,C1.Course_name,SG1.Grade,C2.Course_name, SG2.Grade

FROM StudentGrade AS SG1 JOIN Course AS C1 ON SG1.Course_id=C1.Course_id --此连接得到:每位学生的选课情况及所选课程信息,作为一个新表

JOIN StudentGrade AS SG2 ON SG1.Stu_id=SG2.Stu_id --此连接得到:将相同内容的表,表进行自身连接

JOIN Course AS C2 ON SG2.Course_id=C2.Course_id --此连接得到:每位学生的选课情况及所选课程信息,作为一个新表

WHERE SG1.Grade>SG2.Grade AND C1.Course_name='C语言' AND C2.Course_name='数据结构'

--5.显示所有课程的选修情况(外连接)。

SELECT *

FROM course LEFT JOIN studentgrade ON course.course_id=studentgrade.course_id

ORDER BY course.course_id --为了便于观察。将每门课程的选修情况列在一起

--或:列出各门课程的选修人数,无人选的课程的选修人数为0。

--COUNT(stu_id),此处不能为*,COUNT(*)为统计有多少行(记录)。因为course与studentgrade左连接后,每门课程都至少有一条行(记录)。

SELECT course.course_id,COUNT(stu_id) AS 选修人数

FROM course LEFT JOIN studentgrade ON course.course_id=studentgrade.course_id

GROUP BY course.course_id

--6.检索选修课程号为“0109”或“0111”的学生学号、姓名和所在班级。

SELECT student.stu_id,stu_name,class_id

FROM student JOIN studentgrade ON student.stu_id=studentgrade.stu_id

WHERE course_id in('0109','0111')

--若列出班级名称,则需在于Class表连接

SELECT student.stu_id,stu_name,class_name

FROM student JOIN studentgrade ON student.stu_id=studentgrade.stu_id

JOIN class ON student.class_id=class.class_id

WHERE course_id in('0109','0111')

--当多个表(A,B,C)进行连接时,B表同时具有A表和C表中的某一字段,最好将B表作为连接三个表的中介,

--如下,将student作为连接studentgrade和class的中介

SELECT student.stu_id,stu_name,class_name

FROM studentgrade JOIN student ON studentgrade.stu_id=student.stu_id

JOIN class ON student.class_id=class.class_id

WHERE course_id in('0109','0111')

--嵌套查询

SELECT student.stu_id,stu_name,class_id

FROM student

WHERE stu_id in(SELECT stu_id FROM studentgrade

WHERE course_id in('0109','0111')

)

--7.查询“0203”课程的最高分的学生的学号。

SELECT stu_id

FROM studentgrade

WHERE course_id='0203'

AND grade=(SELECT MAX(grade) FROM studentgrade --子查询的作用是:找出“0203”课程的最高分

WHERE course_id='0203')

--如果最高分的同学有两个以上(分数相同),此方法无法实现。

SELECT TOP 1 Stu_id

FROM StudentGrade

WHERE Course_id='0203'

ORDER BY Grade DESC

--8.没有选修以“01”开头的课程的学生信息。(用子查询完成。提示not in或not exists)SELECT *

FROM Student

WHERE stu_id NOT IN (SELECT stu_id FROM studentgrade

WHERE course_id like'01%')

SELECT *

FROM Student

WHERE NOT EXISTS (SELECT * FROM studentgrade

WHERE Student.stu_id=studentgrade.stu_id --EXISTS查询为相关子查询,依赖父表(student),需将两表连接

AND course_id like'01%')

--9.找出“苏贤兴”同学所学课程的名称和成绩。(请使用连接查询和嵌套查询分别来完成) SELECT course_name,grade

FROM course JOIN studentgrade ON course.course_id=studentgrade.course_id JOIN student ON studentgrade.stu_id=student.stu_id

WHERE stu_name='苏贤兴'

--嵌套查询

SELECT course_name,grade

FROM course JOIN studentgrade ON course.course_id=studentgrade.course_id

WHERE stu_id in(SELECT stu_id FROM student

WHERE stu_name='苏贤兴')

--实验六参考答案

--1.统计年龄大于30岁的学生的人数。

SELECT COUNT(*)

FROM Student

WHERE (year(getdate())-year(Birthday))>30

--2.统计数据结构有多少人80分或以上。

--嵌套查询

-- SELECT COUNT(*) as 人数

-- FROM StudentGrade

-- WHERE Grade>80 AND Course_id=(SELECT Course_id

-- FROM Course

-- WHERE Course_name='数据结构')

--连接查询

SELECT COUNT(*) as 人数

FROM StudentGrade,Course

WHERE Grade>80 AND StudentGrade.Course_id=Course.Course_id

AND Course_name='数据结构'

--3.统计各系开设班级的数目(系名称、班级数目),并创建结果表。

SELECT Depar_name,COUNT(*) AS '班级数目' INTO Class_Count

FROM Deparment,Class

WHERE Class.Depar_id=Deparment.Depar_id

GROUP BY Deparment.Depar_name

--4.找出最多人选修的三门课的课程编号,以及统计选修人数,并按人数降序排列。SELECT TOP 3 Course_id,COUNT(*) AS '选修人数'

FROM StudentGrade

GROUP BY Course_id

ORDER BY选修人数DESC

--或:

--ORDER BY COUNT(*) DESC

--5.统计每科目的最高分、最低分,平均分、总分,并以中文列名显示。

SELECT Course_name AS '课程名',MAX(Grade) 最高分,MIN(Grade) 最低分,A VG(ALL(Grade)) AS '平均分',SUM(ALL(Grade)) AS '总分'

FROM StudentGrade,Course

WHERE StudentGrade.Course_id=Course.Course_id

GROUP BY Course_name

--6.所有成绩都在70分以上的学生姓名(提示:使用子查询)

SELECT Stu_id,Stu_name

FROM Student

WHERE Stu_id IN

(SELECT Stu_id

FROM StudentGrade

GROUP BY Stu_id HA VING MIN(Grade)>=70) --注意:HA VING MIN(Grade)>=70 是关键。

--注意:MIN(Grade)是关键。此处分组条件不可以是Student.Stu_id。

SELECT Stu_id,Stu_name

FROM Student

WHERE (SELECT MIN(Grade)

FROM StudentGrade WHERE Student.Stu_id=StudentGrade.Stu_id GROUP BY StudentGrade.Stu_id )>=70

--或

SELECT Stu_id,Stu_name

FROM Student

WHERE Stu_id in

(select a.Stu_id from StudentGrade a --关键:Stu_id要来自StudentGrade表,否则就会出现问题:无法剔除没有选课的学生

where 70<=all (SELECT Grade FROM StudentGrade b WHERE a.Stu_id=b.Stu_id ))

--或

SELECT Stu_id,Stu_name

FROM Student

WHERE Stu_id in

(SELECT Stu_id FROM StudentGrade --关键:Stu_id要来自StudentGrade表,否则就会出现问题:无法剔除没有选课的学生

WHERE NOT EXISTS

(SELECT * FROM StudentGrade WHERE Student.Stu_id=StudentGrade.Stu_id AND Grade<70))

--7.“数据库”课程得最高分的学生的姓名、性别(提示:使用子查询)

SELECT Stu_name,Stu_sex

FROM Student JOIN StudentGrade ON Student.Stu_id=StudentGrade.Stu_id

WHERE Grade=(SELECT MAX(Grade) --数据库课程号的最高成绩

FROM StudentGrade JOIN Course ON StudentGrade.Course_id=Course.Course_id

WHERE Course_name='数据库')

AND Course_id=(SELECT Course_id

FROM Course

WHERE Course_name='数据库')

--8.至少选修了两门课及以上的学生姓名和性别

SELECT Stu_name,Stu_sex

FROM Student

WHERE Stu_id IN (SELECT Stu_id FROM StudentGrade

GROUP BY Stu_id HA VING COUNT(Course_id)>=2)

--9.检索至少选修课程“数据结构”和“C语言”的学生学号

SELECT Stu_id

FROM StudentGrade JOIN Course ON StudentGrade.Course_id=Course.Course_id

WHERE Course_name='数据结构' AND Stu_id IN

(SELECT Stu_id

FROM StudentGrade JOIN Course ON StudentGrade.Course_id=Course.Course_id

WHERE Course_name='C语言' )

--10.列出所有班名、班主任、班长、系名。(请使用连接查询;进一步考虑使用外连接,因为很多班级可能是没有班长的,考虑需要显示所有班级的信息)

--列出所有班名,班主任,班长,系名

/*SELECT Class_name,Stu_name,Teac_name,Depar_name

FROM Student JOIN Class ON Monitor=Student.Stu_id

JOIN Teacher ON Director=Teacher.Teac_id

JOIN Deparment ON Class.Depar_id=Deparment.Depar_id */

--或:(此方法的查询结果中还包括Monitor为NULL的记录)

SELECT Class_name,Stu_name,Teac_name,Depar_name

FROM Class LEFT JOIN Student ON Monitor=Student.Stu_id

JOIN Teacher ON Director=Teacher.Teac_id

JOIN Deparment ON Class.Depar_id=Deparment.Depar_id

--实验七参考答案

--l、新开设一门课程,名叫网络安全与防火墙,学时40,编号为“0118”,主要介绍网络的安全与主要的防火墙软件。

INSERT

INTO Course(course_id,course_name,course_hour,introduce)

V ALUES ('0118','网络安全与防火墙',40,'主要介绍网络的安全与主要的防火墙软件')

--2、先建立monitor表,其结构与student表大致一样.包含student表的学号、姓名、性别和班级编号,然后把班级编号为“0101”的学生的相应资料插入到monitor表中。

CREA TE TABLE monitor

( stu_id varchar(9) constraint pk_monitor primary key,

stu_name varchar(8),

stu_sex varchar(2),

class_id varchar(4)

)

INSERT

INTO monitor

SELECT stu_id,stu_name,stu_sex,class_id

FROM student

WHERE class_id='0101'

--3、更新所有职称为“助教”的教师职称为“助理教师”。

UPDA TE teacher

SET techpost='助理教师'

WHERE techpost='助教'

--4、在所有经济系班级的名称前加上“经济系”三个字。

UPDA TE class

SET class_name='经济系'+class_name

WHERE class_id=(SELECT class_id

FROM deparment

WHERE depar_name='经济系')

--5、学号为“980101005”的学生的“数据结构”课程成绩改为80分。

UPDA TE studentgrade

SET grade=80

WHERE course_id=(SELECT course_id

FROM course

WHERE course_name='数据结构')

AND stu_id='980101005'

--6、删除studentgrade表中所有成绩不及格的记录。

DELETE

FROM studentgrade

WHERE grade<60

--7、删除studentgrade表中学号以“99”开头的学生选修课程的记录。

DELETE

FROM studentgrade

WHERE stu_id like '99%'

--8、删除课程名为“C语言”的课程信息和所有这门课的选课信息

/*此题中由于course表与courseteacher和studentgrade存在外键联系,根据各表中的course_id 建立。

从现实中的逻辑角度考虑,应是:先开设一门课,然后指定讲授这门课的老师、时间和地点,再是学生们

根据自身情况选修这门课程。因此,如需删除这门课(撤销此课),先删除学生选课信息,再删除该课的授课信息,

最后删除该课的课程信息。

*/

DELETE

FROM studentgrade

WHERE course_id=(SELECT course_id

FROM course

WHERE course_name='C语言')

DELETE

FROM courseteacher

WHERE course_id=(SELECT course_id

FROM course

WHERE course_name='C语言')

DELETE

FROM course

WHERE course_name='C语言'

--实验八参考答案

--(一)、视图的操作

--1.建立一视图V iew_CSTeacher,列出计算机系各个老师的资料(姓名、性别、职称)。USE SCHOOL

GO

CREA TE VIEW VIEW_CSTEACHER

AS

SELECT TEAC_NAME,TEAC_SEX,TECHPOST

FROM TEACHER

WHERE DEPAR_ID=(SELECT DEPAR_ID FROM DEPARMENT WHERE DEPAR_NAME='计算机系')

--2.建立一视图V iew_Class,列出每个班级的名称、系别和班级人数。

USE SCHOOL

GO

CREA TE VIEW VIEW_CLASS

AS

SELECT CLASS_NAME,DEPAR_NAME,COUNT(STU_ID)

FROM CLASS JOIN DEPARMENT ON CLASS.DEPAR_ID=DEPARMENT.DEPAR_ID JOIN STUDENT ON CLASS.CLASS_ID=STUDENT.CLASS_ID

GROUP BY CLASS_NAME,DEPAR_NAME

--3.建立一视图View_Student,列出每个学生的学号、选修课程门数和平均成绩,并按平均成绩从大到小排列。

USE SCHOOL

GO

CREA TE VIEW VIEW_STUDENT

AS

SELECT TOP 1000 STU_ID,COUNT(COURSE_ID) AS 选修课程数,A VG(GRADE) AS 平均成绩--TOP 1000 目的是结合ORDER BY在子查询中使用,并排序

FROM STUDENTGRADE

GROUP BY STU_ID

ORDER BY A VG(GRADE) DESC

--4.查询视图V iew_Student。

--将视图作为基本表一样查询

USE SCHOOL

SELECT *

FROM VIEW_STUDENT

--5.修改视图V iew_Student,列出每个学生的学号、姓名、选修课程门数和平均成绩。

--此题要求实质是:先删除该视图(View_Student),然后在创建视图(View_Student)

USE SCHOOL

GO

DROP VIEW VIEW_STUDENT

CREA TE VIEW VIEW_STUDENT

AS

SELECT STUDENT.STU_ID,STU_NAME,COUNT(COURSE_ID) AS 选修课程数,A VG(GRADE) AS 平均成绩

FROM STUDENT JOIN STUDENTGRADE ON STUDENT.STU_ID=STUDENTGRADE.STU_ID

GROUP BY STUDENT.STU_ID,STU_NAME

--6.要通过视图View_Student,将学号为“000503002”的平均成绩改为90分,是否可以实现?并说明原因

不可以实现。

原因:

对视图的更新,本质就是转化为对基本表的更新。因此,更新视图会受到一些限制,比如:一些视图是不可更新的,

因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新。

简而言之,如果对视图的更新无法转换成对基本表的更新,此更新则不被允许。

本题中通过视图对平均成绩更新,平均成绩为从基本表中通过集合运算产生的结果,在视图的来源表中并没有与其对应的行/列,

因此无法对平均成绩的更新转化为对基本表中某些行/列的更新。

--7.删除视图V iew_CSTeacher。

USE SCHOOL

GO

DROP VIEW VIEW_CSTEACHER

--(二)、索引的创建与删除

--1.分别建立以下索引(如果不能成功建立,请分析原因)

--(1) 在Student表的Stu_name列上建立普通降序索引。

USE SCHOOL

GO

CREA TE INDEX IX_SNAME

ON STUDENT(STU_NAME DESC)

--(2) 在Course表的Course_name列上建立唯一索引。

USE SCHOOL

GO

CREA TE UNIQUE INDEX IX_COURSE_NAME

ON COURSE(COURSE_NAME)

--(3) 在studentgrade表的Stu_id列上建立聚集索引。

此题要求的聚集索引不能正常建立。

原因:

studentgrade中已创建主键,一个基本表在创建主键的同时,DBMS会自动在主键(stu_id,course_id)

上创建聚集索引。而一个基本表只能有一个聚集索引,故本题所要求的索引无法成功创建。

--(4) 在studentgrade表的Stu_id(升序),Course_id(升序)和Grade(降序)三列上建立一个普通索引。

USE SCHOOL

GO

CREA TE UNIQUE INDEX IX_studentgrade

ON studentgrade(STU_ID,COURSE_ID,GRADE DESC)

--2.删除索引

--(1)将studentgrade表的Sno列上的聚集索引删掉。

此题要求不能成功实现。

原因:

普通的索引可以用drop来删除:

drop index 表名.索引名;

但是在建立表的时候,主键自动在主键列上建立一个聚集索引(通过给表增加的一个唯一约束也会自动增加一个唯一索引)

这类通过主键和唯一约束创建的索引与主键或唯一约束是同名的,

是不能够通过DROP INDEX来删除的。

必须通过以下方法删除该聚集索引(其实就是通过删除主键的方式删除索引,但不能删除索引进而删除主键)才能创建其他的索引:

alter table 基本表名drop constraint 主键约束名;

通过此方法会删除主键,因此可以在建立了其他想要建立的索引之后,重新建立主键。(唯一索引的操作方法类似)

--实验九参考答案

--4.为U1账户设置对Student表的权限,让它查询Student,修改除了Stu-id之外的其他字段,并验证。

use school

go

grant select,update(stu_name,stu_sex,birthday,phone,address,class_id)

on student

to u1

--或

grant select,update on student to u1

revoke update(stu_id) on student from u1

--通过SQL命令或企业管理器查看用户U1的权限

--通过各种方式方法验证符合/违反U1所拥有权限的操作,仔细查看DBMS所作出的反应,并分析其原因。

--5.设置数据库角色。设置数据库角色A1,A1能查询、更新Course表,并把此角色赋予U2并验证U2是否具有此权限。

--创建数据库角色

use school

go

create role A1

--或

exec sp_addrole A1

--给数据库角色授权

grant select,update on course to A1

--把此角色赋予U2,其实是将U2添加为角色A1的成员

exec sp_addrolemember 'A1','U2'

--通过SQL命令或企业管理器查看用户U2的权限

--通过各种方式方法验证符合/违反U2所拥有权限的操作,仔细查看DBMS所作出的反应,并分析其原因。

--6.修改U1的权限,让它具有传递性,并传递给U3,并验证。

--修改U1的权限,实际操作是:对其重新授权

use school

go

grant select,update(stu_name,stu_sex,birthday,phone,address,class_id)

on student

to u1

with grant option

--用U1登录SQL SERVER,然后在U1中对U3进行授权(U1授给U3的权限必须得是U1能够授予的)

grant select,update(stu_name,stu_sex,birthday,phone,address,class_id)

on student

to u3

数据库实验3答案

实验三:交互式SQL语句的使用 1、实验目的 (1)掌握数据库对象的操作过程,包括创建、修改、删除 (2)熟悉表的各种操作,包括插入、修改、删除、查询 (3)熟练掌握常用SQL语句的基本语法 2、实验平台 使用SQL Server提供的Microsoft SQL Server Management Studio工具,交互式使用SQL语句。 3 实验容及要求 选择如下一个应用背景之一: ●学生选课系统 ●习题3、4、和5中使用的数据库 ●其它你熟悉的应用 (1)建立一个数据库和相关的表、索引、视图等数据库对象,练习对表、索引和视图的各种操作。 (2)要求认真进行实验,记录各实验用例及执行结果。 (3)深入了解各个操作的功能。 实验要求包括如下方面的容: 3.1 数据定义 1.基本表的创建、修改及删除 2.索引的创建 3.视图的创建 3.2 数据操作 完成各类更新操作包括: 1.插入数据

2.修改数据 3. 删除数据 3.3 数据查询操作 完成各类查询操作 1.单表查询 2.分组统计 3. 连接查询 4. 嵌套查询 5. 集合查询 3.4 数据操作 1.创建视图 2.视图查询 参考示例: 建立一个学生选课数据库,练习对表、视图和索引等数据库对象的各种操作。 一、数据定义 创建学生选课数据库ST,包括三个基本表,其中Student表保存学生基本信息,Course表保存课程信息,SC表保存学生选课信息,其结构如下表: 表1. Student表结构 表2. Course表结构

表3. SC表结构 1.创建、修改及删除基本表 (1)创建Student表 CREATE TABLE Student (Sno CHAR(8)PRIMARY KEY, Sname CHAR(8), Ssex CHAR(2)NOT NULL, Sage INT, Sdept CHAR(20) ); (2)创建Course表 CREATE TABLE Course (Cno CHAR(4)PRIMARY KEY, Cname CHAR(40)NOT NULL, Cpno CHAR(4), Ccredit SMALLINT, ); (3)创建SC表 CREATE TABLE SC (Sno CHAR(8)FOREIGN KEY (Sno)REFERENCES Student(Sno), Cno CHAR(4), Grade SMALLINT, ); (4)创建员工表Employee

数据库实验四作业及答案

实验4数据查询 一、实验目的 1.掌握使用Transact-SQL的SELECT语句进行基本查询的方法。 2.掌握使用SELECT语句进行条件查询的方法。 3.掌握嵌套查询的方法。 4.掌握多表查询的方法。 5.掌握SELECT语句的GROUP BY和ORDER BY子句的作业和使用方法。 6.掌握联合查询的操作方法。 7.掌握数据更新语句INSERT INTO、UPDATE、DELETE的使用方法。 二、实验准备 1.了解SELECT语句的基本语法格式和执行方法。 2.了解嵌套查询的表示方法。 3.了解UNION运算符的用法。 4.了解SELECT语句的GROUP BY和ORDER BY子句的作用。 5.了解IN、JOIN等子查询的格式。 6.了解INSERT INTO、UPDATE、DELETE的格式与作用。 三、实验内容及步骤 0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码 1.在studentsdb数据库中,使用下列SQL语句将输出什么? (1)SELECT COUNT(*) FROM grade (2)SELECT SUBSTRING(姓名,1,2) FROM student_info (3)SELECT UPPER('kelly')

(4)SELECT Replicate('kelly',3) (5)SELECT SQRT(分数) FROM grade WHERE 分数>=85 (6)SELECT 2,3,POWER(2,3) (7)SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()) 2.在studentsdb数据库中使用SELECT语句进行基本查询。 (1)在student_info表中,查询每个学生的学号、姓名、出生日期信息。 SELECT*FROM student_info (2)查询学号为0002的学生的姓名和家庭住址。 SELECT姓名,家庭住址FROM student_info WHERE学号=0002 (3)找出所有男同学的学号和姓名。 SELECT学号,姓名FROM student_info

数据库实验题目和答案

按照如下方式重新定义四张表: 定义新的books表,其所拥有的属性与属性类型与原有的books表一致 以列级完整性的方式定义属性bookId为主码,同时在定义的时候必须提供约束名 定义属性category为”非空” ,同时在定义的时候必须提供约束名 create table Books( bookId number(9,0) constraint BooksKey primary key, title varchar(80), author varchar(40), year integer, category varchar(15) constraint B1 not null ); commit; 定义新的customers表,其所拥有的属性与属性类型与原有的customers表一致 以表级完整性的方式定义属性cid为主码 以列级完整性的方式定义属性cname为”唯一”,同时在定义的时候必须提供约束名 create table Customers ( cid number(9,0), cname char(40) constraint C1 unique, age integer, primary key(cid) ); commit; 定义新的purchases表,其所拥有的属性与属性类型与原有的purchases表一致 定义属性cid与bookId为主码,同时在定义的时候必须提供约束名 以列级完整性的方式定义属性bookId为外码,它参照Books表的主码,同时在定义的时候必须提供约束名。当删除Books表中的某一本书时,级联删 除与它相关的购买记录 以表级完整性的方式定义属性cid为外码,它参照customers表,同时在定义的时候必须提供约束名。当删除customers表中的某个顾客时,如果存在 与该客户相关的购买记录,拒绝删除。 create table Purchases( cid number(9,0), bookId number(9,0)

数据库实验四(含答案)

实验四使用SQL语句创建和删除数据库、表 一. 实验目的: 1、了解SQL Server 2005数据库的逻辑结构和物理结构。 2、掌握使用SQL 语句创建和删除数据库。 3、学会使用T-SQL语句创建表。 二. 实验准备 1.明确能够创建数据库的用户必须是系统管理员,或是被授权使用CREATE DATABASE语句的用户。 2.了解用SQL语句创建和删除数据库的基本语法。 3.是用查询分析器,完成用SQL语句创建和删除基本表。 三. 实验要求 1、熟练使用查询分析器进行数据库的创建和删除操作。 2、用查询分析器,完成用SQL语句创建和删除基本表。 3、完成实验报告。 四. 实验内容 一、数据库 1.以下是创建数据库userdb1的SQL语句, create database userdb1 on (name=userdb4_data,--数据文件的逻辑名称,注意不能与日志逻辑同名 filename='g:\xygl\userdb4.mdf' ,--物理名称,注意路径必须存在 size=5,--数据初始长度为5M maxsize=10,--最大长度为10M filegrowth=1)--数据文件每次增长1M log on ( name=userdb4_log, filename='g:\xygl\userdb4.ldf ' , size=2 , maxsize=5 , filegrowth=1) 运行上诉语句建立数据库userdb1

句,并建立“学生信息”数据库.(.mdf的名字可以修改) 3.数据库的修改(alter database 数据库名add file),将一个大小为10MB 的数据文件mrkj添加到userdb1的数据库中,该数据文件的大小为10MB,最大的文件大小为100MB,增长速度为2MB,物理地址与原有的mdf,ldf文件放在一起。 alter database 数据库名 add file() 注括号内格式同下: ( name=userdb4_log, filename='g:\xygl\userdb4.ldf ' , size=2 , maxsize=5 ,

数据库实验五题目答案

实验五 实验5.1 数据查询 1)要求 以School数据库为例,在该数据库中存在四表格,分别为: ●表STUDENTS(sid, sname, email, grade); ●表TEACHERS(tid, tname, email, salary); ●表COURSES(cid, cname, hour); ●表CHOICES(no, sid, tid, cid, score) 在数据库中,存在这样的关系:学生可以选择课程,一个课程对应一个教师。在表CHOICES中保存学生的选课记录。 按以下要求对数据库进行查询操作: (1)查询年级为2001的所有学生的名称并按编号升序排列。 程序:Select sname from students where grade='2001' order by sid asc; (2)查询学生的选课成绩合格的课程成绩。 程序:Select score from choices where score>'59';

(3)查询课时是48或60的课程的名称。 程序:select cname from courses where hour='48'or hour='60'; (4)查询所有课程名称中含有data的课程编号。 程序:select cid from courses where cname like'%data%';

(5)查询所有选课记录的课程号(不重复显示)。 程序:select distinct cid from choices; (6)统计所有教师的平均工资。 程序:select avg(salary) from teachers;

数据库实验上机答案整理-中国石油大学-龚安

实验四SQL练习2 一、实验目的 1.掌握索引的建立、删除及使用; 2.掌握单表查询、连接查询、嵌套查询和集合查询; 3.掌握插入数据、修改数据和删除数据语句的非常用形式。二、实验学时 2学时 三、实验内容 1.利用Query Analyzer完成以下操作: ⑴在预算日期、结算日期和入账日期上分别建立索引,并在查询操作中体会索引的作用。 ⑵在完成第2题的查询操作后,删除预算日期、结算日期和入账日期上的索引。 2.利用Query Analyzer完成以下操作: ⑴采油一矿二队2016-5-1到2016-5-28有哪些项目完成了预算,列出相应明细。 ⑵采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应明细。 ⑶采油一矿二队2016-5-1到2016-5-28有哪些项目完成了结算,列出相应的材料费消耗明细。 ⑷采油一矿二队2016-5-1到2016-5-28有哪些项目完成了入账,列出相应明细。

⑸列出采油一矿二队2016-5-1到2016-5-28总的预算金额。 ⑹列出采油一矿二队2016-5-1到2016-5-28总的结算金额。 ⑺列出采油一矿二队2016-5-1到2016-5-28总的入账金额。 ⑻列出采油一矿2016-5-1到2016-5-28总的入账金额。 ⑼有哪些人员参与了入账操作。 ⑽列出2016-5-1到2016-5-28进行了结算但未入账的项目。 ⑾列出采油一矿二队的所有项目,按入账金额从高到低排列。 ⑿列出有哪些施工单位实施了项目,并计算各单位所有项目结算金额总和。 ⒀找出消耗了材料三且消耗超过了2000元的项目,列出相应消耗明细(利用子查询)。 ⒁作业公司二队参与了哪些项目。 ⒂作业公司一队和二队参与了哪些项目(利用union)。 ⒃采油一矿的油井是哪些作业队参与施工的。 3.利用Query Analyzer完成以下操作: ⑴建立数据表(包含3个属性列:★施工单位、★年月、◆结算金额)保存各个施工单位每月的结算金额总和。 ⑵用子查询将各个施工单位每月的结算金额总和插入到所建立的数据表中。 ⑶用带子查询的修改语句将采油一矿油井作业项目的结算人改为“李兵”。 ⑷用带子查询的删除语句删除采油一矿油井作业项目。

数据库试验答案

计算机与信息学院 数据库实验报告 专业班级 学生姓名及学号 课程教学班号 任课教师 实验指导教师 实验地点 2012 ~2013 学年第二学期

实验1 使用向导创建和删除数据库 一、实验目的 1.熟悉SQL Server 中SQL Server Management Studio的环境 2.了解SQL Server 数据库的逻辑结构和物理结构 3.掌握使用向导创建和删除数据库的方法 二、实验要求 1.熟练使用SSMS进行数据库的创建和删除操作。 2.完成实验报告。 三、实验内容 设有一学籍管理系统,其数据库名为“EDUC”。 初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%比例增长; 日志文件初始为2MB,最大可增长到5MB,按1MB增长。 数据库的逻辑文件名为“student_data”, 物理文件名为“student_data.mdf,存放路径为“E:\sql_data”。 日志文件的逻辑文件名为“student_log”, 物理文件名为“student_log.ldf”,存放路径为“E:\sql_data”。 四、实验步骤

1.使用SQL Server Management Studio(简称SSMS)创建数据库。 (1)启动SSMS 在开始菜单中:所有程序-SQL Server 2005 -SQL Server Management Studio单击“连接”按钮,便可以进入【SQL Server Management Studio】窗口。如果身份验证选择的是“混合模式”,则要输入sa的密码。 (2)建立数据库 在“对象资源管理器”窗口,建立上述数据库EDUC。在数据库节点上右击选择新建。同时建立一个同样属性的数据库EDUC1。

数据库实验四(含答案)

实验四使用SQL语句创建与删除数据库、表 一、实验目的: 1、了解SQL Server 2005数据库的逻辑结构与物理结构。 2、掌握使用SQL 语句创建与删除数据库。 3、学会使用T-SQL语句创建表。 二、实验准备 1.明确能够创建数据库的用户必须就是系统管理员,或就是被授权使用CREATE DATABASE语句的用户。 2.了解用SQL语句创建与删除数据库的基本语法。 3.就是用查询分析器,完成用SQL语句创建与删除基本表。 三、实验要求 1、熟练使用查询分析器进行数据库的创建与删除操作。 2、用查询分析器,完成用SQL语句创建与删除基本表。 3、完成实验报告。 四、实验内容 一、数据库 1.以下就是创建数据库userdb1的SQL语句, create database userdb1 on (name=userdb4_data,--数据文件的逻辑名称,注意不能与日志逻辑同名 'g:\xygl\userdb4、mdf' ,--物理名称,注意路径必须存在 size=5,--数据初始长度为5M maxsize=10,--最大长度为10M )--数据文件每次增长1M log on ( name=userdb4_log, 'g:\xygl\userdb4、ldf ' , size=2 , maxsize=5 , ) 运行上诉语句建立数据库userdb1

2.根据步骤1的sql语句,写出创建实验二中“学生信息”数据库的sql语句,并建立“学生信息”数据库、(、mdf的名字可以修改) 3、数据库的修改(alter database 数据库名add file),将一个大小为10MB 的数据文件mrkj添加到userdb1的数据库中,该数据文件的大小为10MB,最大的文件大小为100MB,增长速度为2MB,物理地址与原有的mdf,ldf文件放在一起。 alter database 数据库名 add file() 注括号内格式同下: ( name=userdb4_log, 'g:\xygl\userdb4、ldf ' , size=2 , maxsize=5 ,

数据库实验答案

实验3 使用T-SQL语言完成单表查询 一、实验目的 掌握使用T-SQL语言完成单表查询 掌握常用谓词的用法 掌握where子句的用法 掌握order by 子句的用法 掌握group by 子句和having短语的用法 实验环境 Microsoft SQL Server 2000。 实验内容和要求 查询全体学生的详细信息。 查询所有课程的详细信息。 查询所有选课记录的详细信息,要结果表中的列名以中文的形式显示,分别为:学号,课程号,成绩。 查询已被学生选修了的课程的编号。 查询系别编号为“d002”的学生的姓名和性别。 查询年龄在19至21岁或者性别为“女”的学生的学号和所在系别编号。 查询系别编号为d001、d002和d003的学生的学号和姓名。 查询课程名为“C_”开头的课程名和学分。 某些学生入学后还没有确定所在的系,查询还没有确定系的学生的姓名。 查询成绩大于60分的学生的学号、课程号和成绩,并将查询结果按课程编号升序排列,同一课程的成绩按分数降序排列。 查询学校所开设的总的课程数。 计算2号课的学生成绩总和以及平均成绩,对应的列名分别为“总成绩”和“平均成绩”。 查询选修了3号课程的学生的最高分和最低分,对应的列名分别为“最高分”和“最低分”。 求各个系别的编号以及各系的人数。 查询选课人数大于等于2人的课程编号以及选课的人数。 查询学生2选修课程的总成绩对应的列名为“总成绩”,并显示出学号。 查询有2门以上课程是80分以上的学生的学号及课程数。 查询选修了1号课的学生的学号和成绩,结果按成绩降序、学号升序排列。 实验1 使用T-SQL语言建库、建表 实验2 向表中增、删、改数据 实验目的 掌握使用T-SQL建库、建表、修改表; 掌握使用T-SQL对表中数据进行插入、删除和修改。 实验环境 Microsoft SQL Server 2000。 实验内容和要求 建立数据库STDB 在数据库STDB中建立四个表:

同济大学数据库实验5答案

create proc procA as select* from student exec proca create proc procB @_year char(4) as select* from student where year(birthday )=@_year declare @_year char(4) set @_year ='1994' exec procB@_year create proc procf @_Snum char(30) as select s.snum ,avg(score)as平均成绩,count(https://www.wendangku.net/doc/3c9592989.html,um)as选秀门数,sum(1-score/60)as不及格门数 from student s,course c,sc,sections st where s.snum =sc.snum and sc.secnum =st.secnum and https://www.wendangku.net/doc/3c9592989.html,um =https://www.wendangku.net/doc/3c9592989.html,um and S.Snum =@_Snum group by S.Snum DECLARE @_SUNM char(30) set @_SUNM ='s001' exec procf@_sunm CREATE PROC Procd @_snum char(4),@_avg int out,@_selected_course int out,@_failed_course int out AS SELECT @_avg=AVG(score),@_selected_course=COUNT(cnum),@_failed_course=sum(1-score/60) FROM sc JOIN sections ON sc.secnum =sections.secnum WHERE snum=@_snum

数据库原理实验报告四(有答案)

南京晓庄学院 《数据库原理与应用》课程实验报告 实验四查询设计实验 所在院(系):数学与信息技术学院 班级: 学号: 姓名:

1.实验目的 (1)了解查询的目的,掌握SELECT语句的基本语法和查询条件的表示方法。 (2)掌握数据排序和数据联接查询的方法。 (3)掌握SQL Server查询分析器的使用方法。 2.实验要求 (1)针对“TM”数据库,在SQL Server查询分析器中,用T-SQL语句实现以下单表查询 操作,并将将调试成功的T-SQL命令,填入实验报告中。 a)查询所有课程的详细情况。 b)查询来自江苏或山东的学生学号和姓名,并以中文名称显示输出的列名。 c)查询选修了课程的学生学号(一人选了多门课程的话,学号只显示一次)。 d)查询选修课程号为07253001的学号和成绩,并要求对查询结果按成绩降 序排列,如果成绩相同则按学号升序排列。 e)查询所有学生的学号、姓名和年龄。 f)查询选修课程号为07253001的成绩在85-95之间的学生学号和成绩,并 将成绩乘以0.7输出。 g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院 (DEPT_ID为09)姓张的学生的信息。。 h)查询所有核心课程(课程名中带*的)的情况。 i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。 (2)在SQL Server查询分析器中,用T-SQL语句实现下列数据联接查询操作: a)查询每个学生的情况以及他(她)所选修的课程。 b)查询学生的学号、姓名、选修的课程名及成绩。 c)查询选修C语言程序设计且成绩为85分以上的学生学号、姓名及成绩。 d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。 e)分别用等值联接和内联接查询有授课记录的老师的姓名。 f)用外联接查询所有老师的授课情况,输出老师的工号、姓名、职称、院 系、担任的课程号和授课的学期,结果按院系和职称升序排列。如果该 老师没有授课历史,在课程号和授课的学期中显示空值 (3)在SQL Server Management Studio中新建查询,完成以上查询命令的同时,熟悉SQL编 辑器工具栏中各快捷按钮的作用。 (4)按要求完成实验报告。

mysql数据库实验答案

实验一创建、修改数据库和表结构 1、用create建立教学数据库的五个基本表: (1)学生表(学号,姓名,性别,年龄),student((Sno, sname,ssex,sage) ; (2)课程表(课程号,课程名,学分),Course (Cno, Cname, credit) ; (3)选课表(学号,课程号,成绩),SC (Sno,, Cno, grade ) ; (4) 教师表(教师号,姓名,性别,出生年月,系部,职称,地址), T(Tno,Tname,ssex,birthday,dept,title,address) ; (5) 工资表(教师号,基本工资,职务工资,合计),Salary(Tno,jbgz,zwgz,hj); Create Database Student default character set utf8 default COLLATE utf8_bin;

Use Student; Create Table Student( SNo c har(20) primary key, SName char(20) , SSex char(4) default '男', SAge int ) ENGINE=InnoDB; Create Table Course( CNo c har(20) primary key, CName char(20) NOT NULL,

CRedit f loat ) ENGINE=InnoDB; Create Table SC( SNo c har(20) NOT NULL, CNo c har(20) NOT NULL, Grade float, Primary Key(SNo, CNo), Foreign Key(SNo) References Student(SNo) On Delete Cascade, Foreign Key(CNo) References Course(CNo) )ENGINE=InnoD B;

数据库实验1-6参考答案

实验一SQL Server使用初步 一、实验目的 1、熟悉SQL Server2000的组成及基本功能。 2、掌握SQL Server2000的登录及注册。 3、掌握SQL Server2000企业管理器的使用方法。 4、熟悉查询分析器的基本使用。 二、实验预习 1、什么是数据库管理系统DBMS?你所知道的DBMS有哪些? 答:DBMS是位于用户和操作系统之间的一层数据管理软件。常见的DBMS主要有:Oracle、db2、SQL Server、MySQL、PostgreSQL、SQLite、Firebird等等。 2、SQL Server 2000(2005)的安装步骤? 答:以企业版安装为例,步骤为: 将企业版安装光盘插入光驱后,出现以下提示框。请选择“安装 SQL Server 2000 组件” 出现下面对话框后,选择 "安装数据库服务器" 。 选择 "下一步",然后选择 "本地计算机" 进行安装。 在 "安装选择" 窗口,选择 "创建新的SQL Server实例..."。对于初次安装的用户,应选用这一安装模式,不需要使用 "高级选项" 进行安装。 "高级选项" 中的内容均可在安装完成后进行调整。 在 "用户信息" 窗口,输入用户信息,并接受软件许可证协议。 在“安装定义”窗口,选择“服务器和客户端工具”选项进行安装。 在“实例名”窗口,选择“默认”的实例名称。 在“安装类型”窗口,选择“典型”安装选项,并指定“目的文件夹”。 在 "服务账号" 窗口,请选择 "对每个服务使用统一账户..." 的选项。 在 "身份验证模式" 窗口,选择 "混合模式..." 选项,并设置管理员"sa"账号的密码。 最后按“下一步”即可完成安装。 检测安装:如果安装成功,应该能成功启动SQL Server,并且能和SQL Server 客户端连接上。 可以通过服务管理器来进行启动。

数据库认证实验四答案

--1,创建登陆用户temp1,密码是1234,加入到school数据库中并赋予db_owner数据库角色. Sp_addlogin'temp1','1234','School'; ---添加用户 use School go exec sp_grantdbaccess'temp1'; --- /* CREATE LOGIN tmp1 WITH PASSWORD = '123',default_database=School; -- Creates a database user for the login created above. CREATE USER user1 FOR LOGIN tmp1; */ --查看登录账号的信息 Select*from sys.syslogins where name='temp1'; /* use School go exec sp_addsrvrolemember 'temp1','sysadmin';--添加服务器角色 */ --赋予db_owner数据库角色. use School go exec sp_addrolemember'db_owner','temp1'; --2,创建登陆用户temp2,密码是1234, --加入到school数据库中,并赋予该用户对student表select,insert权限 Sp_addlogin'temp2','1234','School'; ---添加用户 use School go exec sp_grantdbaccess'temp2';

grantselect,insert on student to temp2; --3,对数据库school进行完全数据库备份,写出备份语句 Use School Go Sp_addumpdevice'disk','schoolinfo','e:\data\schoolinfo.bak' Go Backupdatabase school to schoolinfo withinit; --4,将student学生信息表中所有学生信息年龄改为20,进行差异化备份--修改表的数据 use school go update student set sage=20; ---执行差异化的备份 Use School Go Backupdatabase School todisk='e:\data\schoolinfo.bak'; Use school Go Backupdatabase School to schoolinfo withdifferential,init Use school Go select*from student Backupdatabase school to schooldemo withdifferential,init

数据库管理系统实验报告含答案

xxxx大学《数据库管理系统》课程实验报告 班级: _______姓名:实验时间:年月日指导教师:_______ 一、实验目的 1、通过实验,使学生全面了解最新数据库管理系统的基本内容、基本原理。 2、牢固掌握SQL SERVER的功能操作和Transact-SQL语言。 3、紧密联系实际,学会分析,解决实际问题。学生通过小组项目设计,能够运用最新数据库管理系统于管理信息系统、企业资源计划、供应链管理系统、客户关系管理系统、电子商务系统、决策支持系统、智能信息系统中等。 二、实验内容 1.导入实验用示例数据库: f:\教学库.mdf f:\教学库_log.ldf f:\仓库库存.mdf f:\仓库库存_log.ldf 1.1 将数据库导入 在SqlServer 2005 导入已有的数据库(*.mdf)文件,在SQL Server Management Studio 里连接上数据库后,选择新建查询,然后执行语句 EXEC sp_attach_db @dbname = '教学库', @filename1 = 'f:\教学库.mdf', @filename2 = 'f:\教学库_log.ldf' go use [教学库] EXEC sp_changedbowner 'sa' go EXEC sp_attach_db @dbname = '仓库库存', @filename1 = 'f:\仓库库存.mdf',

@filename2 = 'f:\仓库库存_log.ldf' go use [仓库库存] EXEC sp_changedbowner 'sa' go 1.2 可能出现问题 附加数据库出现“无法打开物理文件"X.mdf"。操作系统错误5:"5(拒绝访问。)"。(Microsoft SQL Server,错误: 5120)”。 解决:找到要附加的.mdf文件-->右键-->属性-->安全-->选择当前用户-->编辑-->完全控制。对.log文件进行相同的处理。 2.删除创建的数据库,使用T-SQL语句再次创建该数据库,主文件和日志文件的文件名同上,要求:仓库库存_data最大尺寸为无限大,增长速度为20%,日志文件初始大小为2MB,最大尺寸为5MB,增长速度为1MB。 CREATE DATABASE仓库库存 (NAME = '仓库库存_data', FILENAME = 'F:\仓库库存_data.MDF' , SIZE = 10MB, FILEGROWTH = 20%) LOG ON (NAME ='仓库库存_log', FILENAME = 'F:\仓库库存_log. LDF', SIZE = 2MB, MAXSIZE = 5MB, FILEGROWTH = 1MB) 2.1 在数据库“仓库库存”中完成下列操作。 (1)创建“商品”表,表结构如表1: (2)创建“仓库”表,表结构如表2: 表2 仓库表

数据库实验5答案

实验五:数据库综合查询 一、实验目的 1.掌握SELECT语句的基本语法和查询条件表示方法; 2.掌握查询条件种类和表示方法; 3.掌握连接查询的表示及使用; 4.掌握嵌套查询的表示及使用; 5.了解集合查询的表示及使用。 二、实验环境 已安装SQL Server企业版的计算机(120台); 具有局域网环境,有固定IP; 三、实验学时 2学时 四、实验要求 1.了解SELECT语句的基本语法格式和执行方法; 2.了解连接查询的表示及使用; 3.了解嵌套查询的表示及使用; 4.了解集合查询的表示及使用; 5.完成实验报告; 五、实验内容及步骤 1.利用Transact-SQL嵌套语句实现下列数据查询操作。 1) 查询选修了计算机体系结构的学生的基本信息。 select*from student where Sno in(select Sno from course where Cno in(select Cno from sc where Cname='计算机体系结构')) 2) 查询年龄比李勇小的学生的学号和成绩。 select a.sno,grade from student a,course where a.sno=course.sno and sage<(select sage from student where sname='李勇') 3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1') 4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。 select*from student where dnum<>'D3'AND SAGE>all(select sage from student where dnum='D3')

数据库实验三作业及答案.docx

实验3 SQL Server 数据表的管理 一、实验目的 1.学会使用企业管理器和Transact-SQL语句CREATE TABLE和ALTER TABLE创建和修改表。 2.学会在企业管理器中对表进行插入、修改和删除数据操作。 3.学会使用Transact-SQL语句对表进行插入、修改和删除数据操作。 4.了解SQL Server的常用数据类型。 二、实验准备 1.了解在企业管理器中实现表数据的操作,如插入、修改和删除等。 2.掌握用Transact-SQL语句对表数据进行插入(INSERT)、修改(UPDATE)和删除(DELETE和TRANCATE TABLE)操作。 三、实验内容及步骤 1.启动企业管理器,展开studentsdb数据库文件夹。 2.在studentsdb数据库中包含有数据表student_info、curriculum、grade,这些表的数据结构如图1-2、图1-3和图1-4所示。 图1-2 学生基本情况表student_info 图1-3 课程信息表curriculum 图1-4 学生成绩表grade 3.在企业管理器中创建student_info、curriculum表。 4.在企业管理器中,将student_info表的学号列设置为主键,非空。 5.使用Transact-SQL语句CREATE TABLE在studentsdb数据库中创建grade表。 CREATE TABLE grade (学号varchar(4), 课程编号varchar(4), 分数decimal(5,0) ) 6.student_info、curriculum、grade表中的数据如图1-5、图1-6和图1-7所示。 图1-5 student_info的数据

数据库实验四答案

数据库实验四答案 --实验四-- --1.定义“IS”系学生基本情况视图V_IS 并查询结果; create view V_IS as select * from S where Sdept='IS' with check option; select * from V_IS; --2.将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果; create view V_S_C_G as select S.Sno,Sname,https://www.wendangku.net/doc/3c9592989.html,o,Cname from S,C,SC where S.Sno=SC.Sno and https://www.wendangku.net/doc/3c9592989.html,o=https://www.wendangku.net/doc/3c9592989.html,o; select * from V_S_C_G; --3.将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果; create view V_NUM_AVG as select count(Sno) DeptNum ,avg(Sage) DeptAvgAge,Sdept from S group by Sdept; select * from V_NUM_AVG; --4.定义一个反映学生出生年份的视图V_YEAR并查询结果; create view V_YEAR as select Sno,2012-Sage birthday from S;

select * from V_YEAR; --5.将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果; create view V_AVG_S_G as select SC.Sno,count(https://www.wendangku.net/doc/3c9592989.html,o) CountCno,avg(Grade) AvgGrade from S,C,SC where S.Sno=SC.Sno and https://www.wendangku.net/doc/3c9592989.html,o=https://www.wendangku.net/doc/3c9592989.html,o group by SC.Sno; select * from V_AVG_S_G; --6.将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果; create view V_AVG_C_G as select count(SC.Sno) Cnum,avg(Grade) AvgGrade from S,C,SC where S.Sno=SC.Sno and https://www.wendangku.net/doc/3c9592989.html,o=https://www.wendangku.net/doc/3c9592989.html,o group by https://www.wendangku.net/doc/3c9592989.html,o; select * from V_AVG_C_G; --7.查询平均成绩为90分以上的学生学号、姓名和成绩; select SC.Sno,Sname,avg(Grade) AvgGrade from S,SC where S.Sno=SC.Sno group by SC.Sno,Sname having avg(Grade) >90; --8.查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;create view V_AVG as select https://www.wendangku.net/doc/3c9592989.html,o,avg(Grade) AvgGrade from C,SC where https://www.wendangku.net/doc/3c9592989.html,o=https://www.wendangku.net/doc/3c9592989.html,o group by https://www.wendangku.net/doc/3c9592989.html,o; select distinct S.Sno,Sname,https://www.wendangku.net/doc/3c9592989.html,o,Grade

数据库系统概论实验设计答案

数据库系统概论 实验报告册 姓名: momo 学号: 教师: 实验一需求分析(一)——业务流程调查 一、实验目的:掌握需求分析的步骤和业务流程调查的方法;掌握应用Powerbuilder绘制BPM模型 二、学时:6H(课内4H,课外2H) 三、实验软件平台:Windows 2k或Windows XP, Powerduilder9.5,Visio 四、实验内容:根据该VCD连锁店的业务需求调查文字,利用PD绘制该VCD连锁店管理系统的BPM

模型。 五、实验结果: 出售租借:根据购买人或租借人提供的VCD租借单,查阅库存,如果有,则办理销售或租借并登记销售或租借流水帐;如果没有相应的VCD,则可根据购买人或租借人的要求办理预约登记,当有VCD时,及时通知购买人或租借人。 归还:根据租借人提供的所还VCD,检查VCD是否完好,如果完好,则办理归还登记,如果有损坏的VCD,办理赔偿登记。并把赔偿通知单通知给租借人。

逾期罚款通知:查询逾期未还的VCD,及时通知租借人,并进行相应的罚款登记。 六、思考题 1、数据库设计为什么需要进行详细的需求分析? 答:需求分析简单地说就是分析用户的要求。需求分析是设计数据库的起点,需求分析的结果是不是准确的反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是不是合理使用情况。 2、需求分析的目标是什么?其调查步骤是什么?常用的调查方法有哪些?

答:(1)需求分析的目标: 1.通过详细调查现实世界要处理的对象,充分了解原系统(手工系统或计算机系统)工作概况, 明确用户的各种需求。 2.在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当 前应用需求来设计数据库。 (2) 调查步骤: 1. 了解组织机构。 2. 调查部门的数据输入、处理、输出。(调查重点之一) 3. 在熟悉业务活动的基础上,协助用户明确对新系统的各种要求。(调查重点之二) 4. 确定新系统的边界 (3)常用的调查方法: ⑴跟班作业 ⑵开调查会 ⑶请专人介绍 ⑷询问 ⑸设计调查表请用户填写 ⑹查阅记录 3、数据库设计的特点是什么? 答: 特点一:三分技术,七分管理,十二分基础数据。 特点二:结构(数据)设计和行为(处理)设计相结合。 实验二需求分析(二)——数据流程调查 一、实验目的:掌握需求分析的步骤和数据流程调查的方法;掌握应用VISIO绘制数据流程图(DFD),掌握数据流程图分层次的绘制方法。掌握编写数据字典的方法和步骤。 二、实验学时:8H(课内6H,课外2H) 三、实验软件平台:Windows 2k或Windows XP, Visio 四、实验内容: 1、掌握数据流程调查和分析的方法; 2、利用Visio绘制分层次的数据流程图并在绘制的过程中建立标准、统一的编码; 3、根据该VCD连锁店的业务需求调查文字以及第一次作业所完成的内容,利用VISIO,绘制该连锁店管理系统的DFD模型。 4、编写详细正确的数据字典。 五、实验步骤 1、数据流程图的层次绘制方法复习 数据流程图分层次绘制模型:

相关文档