实验内容:
- 将数据库myDataBase.MDF使用附加操作导进数据库中。
- 对myDataBase.MDF使用T-SQL进行如下操作:
- 在学生情况表中增加一个Email列,要求检查输入的是否为Email;
- 删除学生情况表中的备注列;
- 对学生情况表增加约束条件,要求姓名唯一;
- 对课程表增加约束,要求学分取值范围为1-4;
- 删除课程表的学分约束;
- 修改学生情况表的学号类型,改成char(15);
- 为学生情况表的姓名创建一个唯一索引,按照姓名降序排列;
- 查看三个表的所有索引。
- SM中四个表说明:
教职工表Teacher(Tno, TName, age, sal, mgr, DNo),TNo为教职工编号,TName为教职工姓名,age年龄,sal为月薪,mgr为教职工的上一级领导的职工号,DNo为部门号;
课程表为Course(Cno, CName, CCredits, CTno),Cno为课程编号,CName为课程名字,CCredits为课程学分,类型为NUMERIC(2,0), CTno为该课程上课老师的编号,其中外键CTno来自表Teacher的Tno键;
学生表为Student(Sno, CLno, SName, SSex, SBir, Sage, Email),其中Sno为学生学号,CLno为系别编号,SName为学生姓名,SSex为学生性别,SBir为学生出生日期,Sage为学生年龄,Email为学生Email;
学生选课表为SC(Sno, Cno, Score),其中Sno为学生学号,Cno为课程号,Score为分数,外键Sno和Cno分别来自表Student的Sno和Coures的Cno。
对SM进行以下查询:
单表查询:
(1)查询所有教职工的情况。
(2)查询所有教职工的职工编号、姓名。
(3)查询所有教职工的工号和年薪,并且将输出结果中的列名显示为“教职工号”、“年薪”。
(4)查询职工编号为0002的教职工情况。
(5)查询教职工中年龄在30-40岁之间的教职工姓名。
(6)查询在部门01、02、或03的教职工情况。
(7)查询没有给出成绩的选课情况。
(8)查询姓马的同学信息。
(9)查询所有职工的姓名和年龄,按年龄从小到大的顺序排列。
(10)查询课程号为001的成绩前五名的学生学号和成绩。
源代码:
2(1)
USE myDataBase
ALTER TABLE 学生情况表
add Email varchar(20) check(Email like ('%@ %.com'));
2(2)
ALTER TABLE 学生情况表 drop column 备注;
2(3)
ALTER TABLE 学生情况表 ADD CONSTRAINT UQ_学生情况表_姓名 UNIQUE(姓名);
2(4)
ALTER TABLE 学生课程表
add CHECK(学分 BETWEEN 1 and 4);
2(5)
Alter Table 学生课程表
Drop Constraint CK__学生课程表__学分__239E4DCF;
2(6)
exec sp_helpconstraint 学生成绩表
--删除学生情况表的外键与主键约束
alter table 学生成绩表
drop constraint FK_学生成绩表_学生成绩表
alter table 学生成绩表
drop constraint PK_学生成绩表
--修改学号的数据类型
alter table 学生情况表
alter column 学号 char(15) not null
alter table 学生成绩表
alter column 学号 char(15) not null
--为学生情况表创建主键
alter table 学生情况表
add primary key (学号)
--建立学生情况表与学生成绩表的外键联系
alter table 学生成绩表
add constraint FK_学号
foreign key (学号) references 学生情况表(学号)
2(7)
CREATE UNIQUE NONCLUSTERED INDEX 姓名 ON 学生情况表(姓名 DESC);
2(8)
EXEC SP_HELPINDEX 学生情况表
EXEC SP_HELPINDEX 学生课程表
EXEC SP_HELPINDEX 学生成绩表
3(1)
USE SM
SELECT * from Teacher;
3(2)
SELECT Tno,Tname FROM Teacher;
3(3)
SELECT Tno AS '教职工号',SAL*12 AS '年薪' FROM Teacher;
3(4)
SELECT * FROM Teacher WHERE Tno=0002;
3(5)
SELECT TName FROM Teacher WHERE age>30AND age<40;
3(6)
SELECT * FROM Teacher WHERE DNo=01 OR DNo=02 OR DNo=03;
3(7)
SELECT * FROM SC WHERE Score IS NULL;
3(8)
SELECT * FROM STUDENT WHERE SName LIKE '马%';
3(9)
SELECT TName, AGE
FROM Teacher
ORDER BY age ASC;
3(10)
SELECT TOP 5*
FROM SC
WHERE Cno = 001
ORDER BY Score desc