实验三 数据表、视图的操作
实验要求:
掌握数据库中基本表、视图的创建、删除与修改。
实验目的:熟练掌握库、表的定义、删除与修改,为后继学习做准备。
实验设备:装有SQL SERVER 2012以上的电脑
实验步骤:
对于如下给定的数据表格进行实验
表中数据可以自行给定。
一 .定义基本表
1. 建立学生表Students,每个属性名的意义为Sno-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。
CREATE TABLE Students /*列级完整性约束条件*/
(Sno CHAR(5) NOT NULL, /* Sno不能为空值*/
Sname CHAR(20) NOT NULL, /*Sname不能为空值*/
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15),
CONSTRAINT un_Sno UNIQUE(Sno), /* Sno取值唯一的约束*/
CONSTRAINT un_Sname UNIQUE(Sname)); /* Sname取值唯一的约束*/
说明:在Microsoft SQL Server中使用单条SQL语句,其末尾不需要分号“;”作为命令结尾标记。通常,SQL Server对大多数末尾带有分号的SQL命令都能顺利执行,但对少数的SQL命令,末尾若带分号,则SQL Server会给出错误信息提示。
2. 建立课程表Courses,其属性名意义分别为Cno-课程号, Cname-课程名, Pre_Cno-先修课程号, Credits-学分。
CREATE TABLE Courses
(Cno CHAR(5) NOT NULL, /* Cno不能为空值*/
Cname CHAR(20) NOT NULL, /*Cname不能为空值*/
Pre_Cno CHAR(5),
Credits INT,
CONSTRAINT un_Cno UNIQUE(Cno)); /*Cno取值唯一的约束*/
3. 建立成绩表Sc。其中的属性名意义分别为Sno-学号,Cno-课程号和Grade-考试成绩。
CREATE TABLE Sc
( Sno CHAR(5) NOT NULL, /* Sno不能为空值*/
Cno CHAR(5) NOT NULL, /* Cno不能为空值*/
Grade INT,
CONSTRAINT Sno_Cno UNIQUE(Sno,Cno)); /*Sno+Cno取值唯一的约束*/
二、 修改基本表
1.向基本表Students中增加“入学时间”属性列,其属性名为Sentrancedate,数据类型为DATETIME型。
ALTER TABLE Students ADD Sentrancedate DATETIME
2. 将Sage(年龄)的数据类型改为SMALLINT型。
ALTER TABLE Students ALTER COLUMN Sage SMALLINT
3. 删除Sname(姓名)必须取唯一值的约束。
ALTER TABLE Students DROP CONSTRAINT un_Sname
说明:⑴ 为了保证后面例子能够顺利运行,请大家一定将属性列Sentrancedate从Students表中删除。
⑵ 为了调试SQL语句方便,这里没有在表Sc中增加参照完整性约束,甚至没有定义主键。
三、 删除基本表
1. 删除Students表。
DROP TABLE Students;
说明:此表删除后,请立即用例1将其建立起来,以便后面的例子使用。
四、建立视图
1. 建立数学系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有数学系的学生,视图的属性名为Sno,Sname,Sage,Sdept。
CREATE VIEW C_Student
AS
SELECT Sno, Sname, Sage, Sdept
FROM Students
WHERE Sdept=’数学’
WITH CHECK OPTION
2. 建立学生的学号(Sno)、姓名(Sname)、选修课程名(Cname)及成绩(Grade)的视图。
本视图由三个基本表的连接操作导出,其SQL语句如下:
CREATE VIEW Student_CR
AS
SELECT Students.Sno, Sname, Cname, Grade
FROM Students, Sc, Courses
WHERE Students.Sno= Sc.Sno AND Sc.Cno=Courses.Cno
3. 定义一个反映学生出生年份的视图。
CREATE VIEW Student_birth(Sno, Sname, Sbirth)
AS SELECT Sno, Sname, 1996-Sage
FROM Students
五、删除视图
1. 删除视图Student_CR。
DROP VIEW Student_CR;