实验三:交互式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表
CREATETABLE Student
(Sno CHAR(8)PRIMARYKEY,
Sname CHAR(8),
Ssex CHAR(2)NOTNULL,
Sage INT,
Sdept CHAR(20)
);
(2)创建Course表
CREATETABLE Course
(o CHAR(4)PRIMARYKEY,
ame CHAR(40)NOTNULL,
Cpno CHAR(4),
Ccredit SMALLINT,
);
(3)创建SC表
CREATETABLE SC
(Sno CHAR(8)FOREIGNKEY (Sno)REFERENCES Student(Sno), o CHAR(4),
Grade SMALLINT,
);
(4)创建员工表Employee
CREATETABLE Employee
(
编号CHAR(8)PRIMARYKEY,
某VARCHAR(8)notnull
部门CHR(40),
工资numeric(8,2),
生日datetime,
职称char(20),
);
指出该语句中的错误并改正后执行。
(5)检查表是否创建成功
SELECT*FROM Student
SELECT*FROM Course
SELECT*FROM SC
SELECT*FROM Employee
(6)修改表结构及约束
●增加班级列
ALTERTABLE Student ADD Sclass char(4)
●修改年龄列
ALTERTABLE Student ALTERCOLUMN Sage smallint
●增加约束
ALTERTABLE Course ADDUNIQUE(ame)
(7)删除表
DROPTABLE Employee
2.创建索引
(1)为Course表按课程名称创建索引
CREATEINDEX iame On Course(ame)
(2)为Student表按学生某创建唯一索引
CREATEUNIQUEINDEX iSname ON Student(Sname) (3)为SC表按学号和课程号创建聚集索引
CREATECLUSTEREDINDEX iSnoo On SC(Sno,o desc) (4)为Course表按课程号创建唯一索引
请自己完成该操作
3.创建视图
建立信息系学生的视图:
CREATEVIEW IS_Student
AS
SELECT Sno,Sname,Sage FROM Student
WHERE Sdept='IS';
3.2 数据操作
1.插入数据
将如下表格中的数据分别插入到数据库相应的表中:
表4.学生基本信息表
表5.课程信息表
表6.学生选课信息表
(1)插入到Student表
INSERTINTO Student VALUES('20100001','李勇','男',20,'CS','1001')
INSERTINTO Student VALUES('20100002','X晨','女',19,'CS','1001')
INSERTINTO Student(Sno,Sname,Ssex,Sage,Sdept,Sclass)VALUES('20100021','王敏','女',18,'MA','1002') INSERTINTO Student(Sno,Sname,Ssex,Sage,Sdept,sclass)VALUES('20100031','X立','男',19,'IS','1003') INSERTINTO Student(Sno,Sname,Ssex,sclass)VALUES('20100003','X洋','女','1001')
检查下列语句中的错误,并改正:
INSERT INTO Student(Sno,Sname,Ssex,Sage,Sdept,sclass) VALUES('20100010',赵斌,'男','19','IS','1005') INSERT INTO Student VALUES('20100022','X明明',19,'男','CS','1002')
(2)插入到Course表
INSERTINTO Course(o,ame,Cpno,Ccredit)VALUES('1','数据库系统原理','5',4)
INSERTINTO Course(o,ame,Cpno,Ccredit)VALUES('2','高等数学',null,2)
INSERTINTO Course(o,ame,Cpno,Ccredit)VALUES('3','管理信息系统','1',4)
请写出插入其余行的插入语句,并插入数据。
(3)插入到SC表
INSERTINTO SC VALUES('20100001','1',92)
INSERTINTO SC VALUES('20100002','2',80)
INSERTINTO SC(Sno,o)VALUES('20100003','1')
INSERTINTO SC(Sno,o,Grade)VALUES('20100010','3',null)
请写出插入其余行的插入语句,并运行。
(4)多行插入到表中
创建存一个表,保存学生的学号、某和年龄:
CREATETABLE cs_Student
(
学号char(8),
某char(8),
年龄smallint
);
插入数据行:
INSERTINTO cs_Student
SELECT Sno,Sname,Sage
FROM student Where Sdept='CS';
(5)检查插入到表中的数据
SELECT*FROM Student
SELECT*FROM Course
SELECT*FROM SC
2.修改数据
(1)将学生20100001的年龄改为22岁。
UPDATE student SET Sage= 22 WHERE Sno='20100001';
(2)将所有学生的年龄增加一岁。
UPDATE Student SET Sage=Sage+1
(3)填写赵斌同学的管理信息系统课程的成绩
UPDATE SC SET Grade= 85
WHERE Sno='20100010'AND o='3'
(4)将计算机科学系全体学生的成绩加5分
UPDATE sc SET Grade=Grade+ 5
WHERE'CS'=(select Sdept from student where student.Sno=sc.Sno);
(5)请自己完成如下操作
●将X晨同学的2号课程成绩修改为80
●将“20100021”同学的学号修改为“20100025”
(6)检查数据是否修改
3. 删除数据
(1)删除学号为201000022的学生记录
DELETEFROM Student WHERE Sno='20100022'
(2)删除学号20100001学生的1号课程选课记录
将选课信息复制到一个临时表tmpSC中:
SELECT*INTO tmpSC FROM SC
在tmpSC中执行删除操作:
DELETEFROM tmpSC WHERE Sno='20100001'and o='1'