数据库上机试验(二)

来源:互联网 发布:python界面开发 编辑:程序博客网 时间:2024/05/18 12:03

     这是第二次上机内容以及结果,大家在运行程序的时候,第一次是可以直接运行的,但第二次运行的时候要把原来建的表删除,否则回显示表已存在的错误。所有完整代码在我空间的代码库中均存放,可以直接运行。

上机实验三 基本表的建立与修改

一、实习目的

通过建立基本表和向表中输入记录,加深对关系数据库模型中型与值概念的理解;学会对基本表进行修改、删除和建立索引等基本操作。

二、实习准备

1.复习Create table, Create index, Altertable, Drop table等命令。

2.复习Insert, Update,Delete命令的使用。

三、实验内容

在查询分析器中用Create table命令在实验二创建的GradeManager数据库中定义基本表:学生表(Student),课程表(Course),班级表(Class),成绩表(Grade)。表结构如下:

学生表

属性名

数据类型

可否为空

含义

Sno

Char(7)

学号(唯一)

Sname

Varchar(20)

学生姓名

Ssex

Char(2)

性别

Sage

Smallint

年龄

Clno

Char(5)

所在班级

课程表

属性名

数据类型

可否为空

含义

Cno

Char(1)

课程号(唯一)

Cname

Varchar(20)

课程名

Credit

Smallint

学分

班级表

属性名

数据类型

可否为空

含义

Clno

Char(5)

班级号(唯一)

Speciality

Varchar(20)

班级所在专业

Inyear

Char(4)

入学年份

Number

Int

班级人数

Monitor

Char(7)

班长学号

成绩表

属性名

数据类型

可否为空

含义

Sno

Char(7)

学号

Cno

Char(1)

课程号

Gmark

Numeric(4,1)

成绩

上述四个表中的数据依次如下:

2000101,李勇,男,20,00311      2000102,刘诗晨,女,19,00311

2000103,王一鸣,男,20,00312    2000104,张婷婷,女,21,00312

2001101,李勇敏,女,19,01311    2001102,贾向东,男,22,01311

2001103,陈宝玉,男,20,01311    2001104,张逸凡,男,21,01311

 

1,数据库,4      2,离散数学,3     3,管理信息系统,2

4,操作系统,4    5,数据结构,4     6,数据处理,2

7,C语言,4

 

00311,计算机软件,2000,120,2000101      00312,计算机应用,2000,140,2000103

01311,计算机软件,2001,220,2001103

 

2000101,1,92    2000101,3,88    2000101,5,86    2000102,1,78    2000102,6,55

2000103,3,65    2000103,6,78    2000103,5,66    2000104,1,54    2000104,6,83

2001101,2,70    2001101,4,65    2001102,2,80    2001102,4,90     2001102,6,83

2001103,4,76    2001103,6,56

要求完成如下操作:

(1)   给学生表增加一属性Nation(民族),数据类型为varchar(20);

(2)   删除学生表中新增的属性Nation。

(3)   向成绩表中插入记录(‘2001110’,’3’,80)。

(4)   修改学号为2001110的学生成绩为70分。

(5)   删除学号为2001110的学生的成绩记录。

(6)   为学生表创建一个名为IX_Class的索引,以班级号排序。

(7)   删除索引IX_Class。

四、实习报告内容

(1)   写出用Create Table语句对四个基本表的定义。

(2)   写出实习内容中七个操作的SQL语句。

 

上机实验四 SELECT语句的使用(一)

一、实习目的

掌握SELECT的基本格式,能使用SQL Server对表进行简单查询。

二、实习准备

1.复习SELECT语句的基本使用格式。

2.复习5种集合函数:AVG,SUM,MAX,MIN,COUNT。

三、实习内容

完成以下查询语句:

(1) 找出所有被学生选修了的课程号。

(2) 找出01311班女生的个人信息。

(3) 找出0311班,0312班学生的姓名、性别、出生年月。

(4) 找出所有姓李的学生的个人信息。

(5) 找出学生李勇所在班级的学生人数。

(6) 找出课程名为操作系统的平均成绩、最高分、最低分。

(7) 找出选修了课程的学生人数。

(8) 找出选修了课程操作系统的学生人数。

(9) 找出2000级计算机软件班的成绩为空的学生姓名。

四、实习报告内容

    写出上述操作的SQL语句。



试验结果以及程序:

/*
CREATE DATABASE GradeManager;
*/
USE GradeManager;
/*******创建数据表**********/
/*学生表*/
CREATE TABLE Student(Sno Char(7) NOT NULL UNIQUE,
 Sname Varchar(20) NOT NULL,
 Ssex Char(2) NOT NULL,
 Sage Smallint,
 Clno Char(5) NOT NULL
 );


/*课程表*/
CREATE TABLE Course(Cno Char(1) NOT NULL UNIQUE,
Cname Varchar(20) NOT NULL,
Credir Smallint
);
/*班级表*/
CREATE TABLE Class(Clno Char(5) NOT NULL UNIQUE,
   Speciality Varchar(20) NOT NULL,
   Inyear Char(4) NOT NULL,
   Number Int,
   Monitor Char(7)
   );


/*成绩表*/
CREATE TABLE Grade(Sno Char(7) NOT NULL,
   Cno Char(1) NOT NULL,
   Gmark Numeric(4,1)
   ); 
/******创建表结束************/


/***************向表中插入数据******************/
/*学生表中插入数据*/    
INSERT INTO Student VALUES('2000101','李勇','男',20,'00311');
INSERT INTO Student VALUES('2000102','刘诗晨','女',19,'00311');
INSERT INTO Student VALUES('2000103','王一鸣','男',20,'00312');
INSERT INTO Student VALUES('2000104','张婷婷','女',21,'00312');
INSERT INTO Student VALUES('2001101','李勇敏','女',19,'01311');
INSERT INTO Student VALUES('2001102','贾向东','男',22,'01311');
INSERT INTO Student VALUES('2001103','陈宝玉','男',20,'01311');
INSERT INTO Student VALUES('2001104','张逸凡','男',21,'01311');


/*课程表中插入数据*/
INSERT INTO Course VALUES('1','数据库',4);
INSERT INTO Course VALUES('2','离散数学',3);
INSERT INTO Course VALUES('3','管理信息系统',2);
INSERT INTO Course VALUES('4','操作系统',4);
INSERT INTO Course VALUES('5','数据结构',4);
INSERT INTO Course VALUES('6','数据处理',2);
INSERT INTO Course VALUES('7','C语言',4);


/*班级表中插入数据*/
INSERT INTO Class VALUES('00311','计算机软件','2000',120,'2000101');
INSERT INTO Class VALUES('00312','计算机应用','2000',140,'2000103');
INSERT INTO Class VALUES('01311','计算机软件','2001',220,'2001103');


/*成绩表中插入数据*/
INSERT INTO Grade VALUES('2000101','1',92);
INSERT INTO Grade VALUES('2000101','3',88);
INSERT INTO Grade VALUES('2000101','5',86);
INSERT INTO Grade VALUES('2000102','1',78);
INSERT INTO Grade VALUES('2000102','6',55);
INSERT INTO Grade VALUES('2000103','3',65);
INSERT INTO Grade VALUES('2000103','6',78);
INSERT INTO Grade VALUES('2000103','5',66);
INSERT INTO Grade VALUES('2000104','1',54);
INSERT INTO Grade VALUES('2000104','6',83);
INSERT INTO Grade VALUES('2001101','2',70);
INSERT INTO Grade VALUES('2001101','4',65);
INSERT INTO Grade VALUES('2001102','2',80);
INSERT INTO Grade VALUES('2001102','4',90);
INSERT INTO Grade VALUES('2001102','6',83);
INSERT INTO Grade VALUES('2001103','4',76);
INSERT INTO Grade VALUES('2001103','6',56);


/***********插入数据结束*******************/




/***********上级试验三***************/


/**给学生表增加一属性Nation(民族),数据类型为varchar(20)**/
ALTER TABLE Student ADD Nation Varchar(20);
/**删除学生表中新增的属性Nation**/
ALTER TABLE Student DROP COLUMN  Nation;
/**向成绩表中插入记录(‘2001110’,’3’,80)**/
INSERT INTO Grade VALUES('2001110','3',80);
/**修改学号为2001110的学生成绩为70分**/
UPDATE Grade SET Gmark=70 WHERE Sno='2001110';
/**删除学号为2001110的学生的成绩记录**/
DELETE FROM Grade WHERE Sno='2001110';
/**为学生表创建一个名为IX_Class的索引,以班级号排序**/
CREATE INDEX IX_Class ON Student(Clno);
/**删除索引IX_Class**/
DROP INDEX IX_Class ON Student;




/***********上级试验四***************/


/**找出所有被学生选修了的课程号**/
SELECT DISTINCT Cno '课程号' 
FROM Grade;  /*DISTINCT表示重复的只打印一次*/


/**找出01311班女生的个人信息**/
SELECT Sno '学号',Sname '姓名',Ssex '性别',Sage '年龄',Clno '班级' 
FROM Student 
WHERE Clno='01311' AND Ssex='女';


/**找出01311班,01312班学生的姓名、性别、出生年月*/
SELECT Sname '姓名',Ssex '性别',2012-Sage '出生年月' 
FROM Student 
WHERE Clno IN('01311','01312');


/**找出所有姓李的学生的个人信息**/
SELECT Sno '学号',Sname '姓名',Ssex '性别',Sage '年龄',Clno '班级' 
FROM Student 
WHERE Sname LIKE '李%';


/**找出学生李勇所在班级的学生人数**/
SELECT Number '班级人数'
 FROM Class
  WHERE Clno =(
SELECT Clno 
FROM Student 
WHERE Sname = '李勇');


/**找出课程名为操作系统的平均成绩、最高分、最低分**/
SELECT AVG(Gmark) '平均分',MAX(Gmark) '最高分',MIN(Gmark) '最低分' 
FROM Grade 
WHERE Cno =
(SELECT Cno 
FROM Course WHERE Cname='操作系统');
/**找出选修了课程的学生人数**/
SELECT COUNT(DISTINCT Sno) '选修人数' 
FROM Grade;


/**找出选修了课程操作系统的学生人数**/
SELECT COUNT(DISTINCT Sno) '选修操作系统人数' 
FROM Grade 
WHERE Cno = 
(SELECT Cno
 FROM Course
 WHERE Cname = '操作系统');


/**找出2000级计算机软件班的成绩为空的学生姓名**/
SELECT Sname '姓名'
 FROM Student,Class
WHERE Student.Clno=Class.Clno and Inyear='2000'and Speciality='计算机软件'and sno NOT IN
                                                                           (SELECT sno 
                                                                           FROM Grade)