实验二 - 交互式SQL实验报告

更新时间:2023-09-20 08:38:01 阅读量: 医药卫生 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

交互式SQL

一 实验目的

1.熟悉数据库的交互式SQL工具。 2.熟悉通过SQL对数据库进行操作。 3.完成作业的上机练习。

二 实验工具SQL Server 2005

利用SQL Server 2005及其交互式查询来熟悉SQL语句。

三 实验内容和要求

1.在SQL Server 2005中建立一个数据库,进行实验所要求的各种操作,所有的SQL操作均在建立的新库里进行;

2.根据以下要求认真填写实验报告,记录所有的实验用例的SQL语言;

3.1 数据定义

(1)熟悉基本表的创建、修改及删除。 (2)熟悉索引的创建和删除。

3.2 数据操作

(1)完成各类查询操作(单表查询,连接查询,嵌套查询); (2)完成各类更新操作(插入数据,修改数据,删除数据);

3.3 视图的操作

视图的定义(创建和删除),查询,更新(注意更新的条件)。

3.4 具体操作内容

在MS SQL Server中创建学生-课程数据库,要求有学生表(Student)、课程表(Course)和选课表(SC),向三个表中分别插入相关数据,再用SQL语句完成一下要求的查询。

1.使用SQL语言创建下面的三个表。 表一:学生信息表(Student) 列名 说明 数据类型 约束 Sno 学号 字符串,长度为10 非空 Sname 姓名 字符串,长度为10 非空 Ssex 性别 字符串,长度为10 非空 Sage 年龄 字符串,长度为10 非空 Sdept 所在系 字符串,长度为10 非空 表二:课程信息表(Course) 列 名 说 明 数据类型 约 束 Cno 课程号 整形 非空 Cname 课程名 字符串,长度为10 非空 Cpno 先行课 整型 允许为空 Ccredit 学分 整型 非空 表三:学生选课信息表(SC)

1

列名 说明 数据类型 Sno 学号 字符串,长度为10 Cno 课程号 整型 Grade 成绩 字符串,长度为10 2.在以上的三个表中,分别插入下面的数据; 表一:学生信息表(Student) Sno Sname Ssex 男 女 女 男 200215121 李勇 200215122 刘晨 200215123 王敏 200215125 张立 表二:课程信息表(Course) Cno Cname 1 2 3 4 5 6 7 数据库 数学 信息系统 操作系统 数据结构 数据处理 PASCAl语言 20 19 18 19 约束 主码,引用Student的外码 主码,引用Course的外码 取值0~100 Sage Sdept CS CS MA IS Ccredit 4 2 4 3 4 2 4 Cpno 5 1 6 7 6 表三:学生选课信息表(SC) Sno Cno Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 3.根据上面的三种表,写出完成如下查询功能的SQL语句: (1)查询全体学生的详细记录 (2)查询选修了课程的学生学号 (3)查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别 (4)查询所有姓刘的学生的姓名、学号和性别

(5)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按

年龄降序排列

(6)查询选修1号课程的学生最高分数

(7)查询每一门课的间接先修课(即先修课的先修课) (8)查询没有选修1号课程的学生姓名

(9)查询与‘刘晨’在同一个系学习的学生

(10)查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄

(11)将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:

2

IS;年龄:18岁)插入到Student表中

(12) 将学生200215121的年龄改为22岁 (13) 删除学号为200215128的学生记录 (14) 建立信息系学生的视图

(15) 在信息系学生的视图中找出年龄小于20岁的学生

(16) 将信息系学生视图is_Student中学号为200215122的学生姓名改为“刘

辰”

(17)删除信息系学生视图is_Student中学号为200215125的记录

四 实验报告 4.1 实验环境:

Windows XP

Microsoft SQL server 2005

4.2 实验内容与完成情况:

(1) 查询全体学生的详细记录

SELECT * From Student;

(2)查询选修了课程的学生学号

SELECT DISTINCT Sno FROM SC;

(3)查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别

SELECT Sname,Ssex FROM Student WHERE Sdept IN('CS','MA','IS');

(4)查询所有姓刘的学生的姓名、学号和性别

SELECT * Sname,Sno,Ssex FROM Course WHERE Sname LIKE '刘%';

3

(5)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

SELECT * FROM Student ORDER BY Sdept,Sage DESC;

(6)查询选修1号课程的学生最高分数

SELECT MAX(Grade) FROM SC WHERE Cno='1';

(7)

①查询每一门课的间接先修课(即先修课的先修课)

SELECT first.Cno,second.Cpno FROM Course first,Course second WHERE first.Cpno=second.Cno;

②查询每一门课的间接先修课(即先修课的先修课)(消除有空的行)

SELECT first.Cno,second.Cpno FROM Course first,Course second WHERE first.Cpno=second.Cno and second.Cpno is not null;

(8) 查询没有选修1号课程的学生姓名

select Sname from Student where not exists(select * from SC where Sno=Student.Sno and Cno=’1’)

(9) 查询与‘刘晨’在同一个系学习的学生

select Sno,Sname,Sdept from Student where Sdept in (select Sdept from Student where Sname='刘晨');

(10)查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄

select Sname ,Sage from Student

where Sage 'CS';

4

(11)将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中

insert into Student(Sno,Sname,Ssex,Sdept,Sage) values ('200215128','陈冬','男','IS','18'); select * from Student;

(12)将学生200215121的年龄改为22岁

update Student set Sage ='22' where Sno='200215121'; select * from Student;

(13)删除学号为200215128的学生记录

delete from Student where Sno='200215128'; select * from Student;

(14)建立信息系学生的视图

create view is_Student as select Sno,Sname,Sage from Student where Sdept='IS';

(15)在信息系学生的视图中找出年龄小于20岁的学生

select Sno,Sage from is_Student where Sage<20 ;

(16)将信息系学生视图is_Student中学号为200215122的学生姓名改为“刘辰”

update is_Student set Sname='刘辰' where Sno='200215122';

5

select * from is_Student;

(17)删除信息系学生视图is_Student中学号为200215125的记录

delete from is_Student where Sno='200215125'; select * from is_Student;

4.3 出现的问题:

1.建表时要将三个表建在一个数据库中,否则不可以链接查询

2. 三个表中相同的属性的数据类型要一致,否则涉及到表连接时就会出错

五 实验感想

通过这次实验课,我对自己的动手能力有了一个清楚地认识,只顾学习理论知识那是远远不够的,学习计算机这个专业勤动手操作才行。现在感觉,理论加实践这种学习方法真的很好,对于巩固知识很有效。同时让我对数据查询,数据更新,视图的创建、删除、查询、更新有了进一步的了解,对它们的认识不再是那么抽象。

6

本文来源:https://www.bwwdw.com/article/bogh.html

Top