数据库原理实验一

 课程名称 数据库原理 实验 成绩

 实验名称 交互式 SQL 语言 学号

 姓名

 班级

 日期

 实验目的:

 1. 熟悉数据库的交互式 SQL 工具; 2. 熟悉通过 SQL 语言对数据库进行操作;

 实验平台:

 利用 RDBMS(SQL Server 2005)及其交互查询工具来操作 SQL 语言;

 实验内容与步骤:

 一、 数据定义 (一)基本表操作 1. 建立基本表 在数据库 TEST 中建立 3 张基本表:Student、Course 和 SC。

 (1)

 创建学生表 Student,由以下属性组成:学号 SNO(char 型,长度为 4, 主码),姓名 SNAME(char 型,长度为 8,其值唯一),性别 SEX(char 型,长度为 2),所在系 DEPTNO(char 型,长度为 2)。

 --CREATE TABLE Student

 --( --

 SNO CHAR(4)PRIMARY KEY, --

 SNAME CHAR(8)UNIQUE, --

 SEX

 CHAR(2), --

 DEPTNO CHAR(2),

 --)

 (2)创建课程表 Course,由以下属性组成:课程号 CNO(char 型,长度为 2,主码),课程名称 CNAME(char 型,长度为 20,非空),授课教师编号 TNO(char型,长度为 3,主码),学分 CREDIT(int 型)。

  --CREATE TABLE Course --( --

 CNO CHAR(2), --

 CNAME CHAR(20), --

 TNO CHAR(3)PRIMARY KEY, --

 CREAIT INT,

 --);

 (3)创建学生选课表 SC,由以下属性组成:学号 SNO( char 型,长度为 4,主码),课程号 CNO( char 型,长度为 2,主码),成绩 GRADE(int 型)。

  --

 CREATE TABLE SC --

 ( --

 SNO CHAR(4), --

 CNO CHAR(2), --

 GRADE INT, --

 PRIMARY KEY (SNO,CNO), --

  );

 (4)创建教师表 Teacher,由以下属性组成:教师编号 TNO(char 型,长度为3,主码),教师姓名 TNAME(char 型,长度为 8,非空),所在系 DEPTNO(char型,长度为 2)

 --

  CREATE TABLE Teacher --

  ( --

  TNO CHAR(3)PRIMARY KEY, --

  TNAME CHAR(8)NOT NULL, --

  DEPTNO CHAR(2) --

 )

  (5)创建系表 Dept,由以下属性组成:系号 DEPTNO(char 型,长度为 2,主码),系名 DNAME(char 型,长度为 20,非空)。

 CREATE TABLE Dept

 (

  DEPTNO CHAR(2)PRIMARY KEY,

  DNAME

 CHAR(20) NOT NULL,

 )

 2. 修改基本表 在 student 表中加入属性 AGE(int 型); ALTER TABLE Student

  ADD AGE INT;

 3. 删除基本表 后边所有操作结束后,删除所创建的基本表;

 DROP TABLE Student;

 DROP TABLE Course;

 DROP TABLE SC;

 DROP TABLE DEPT;

 DROP TABLE TEACHER;

 (二)索引操作 1. 建立索引 (1)

 在 Student 表上建立关于属性 SNO 的唯一索引;

 CREATE UNIQUE INDEX Stusno ON Student(Sno);

 (2)

 在 Course 表上建立关于 CNO 的唯一索引;

  create unique index Coucno ON Course(Cno);

 2. 删除索引 删除上面所建立的两个索引; -drop index Student.stusno

 --drop index Course.Coucno;

 (三)视图操作 1. 建立视图 在插入数据的 Student 基本表上为计算机系学生的记录建立一个视图CS_STUDENT。

 CREATE VIEW CS_STUDENT AS SELECT SNO,SNAME,SEX,DEPTNO,AGE FROM Student WHERE DEPTNO="CS";

  2. 删除视图 在操作结束后,删除视图 CS_STUDENT。

 DROP VIEW CS_STUDENT;

  二、 数据操作

 (一)更新操作 1.插入操作 (1)向 Student 表中插入下列数据:

 1001,张天,男,20,10

 1002,李兰,女,21,10

 1003,陈铭,男,21,10

 1004,刘茜,女,21,20

 1005,马朝阳,男,22,20

 (2)向 Course 表中插入下列数据:

 1,数据结构,101,4

 2,数据库,102,4

 3,离散数学,103,4

 4,C 语言程序设计,101,2

 (3)向 SC 表中插入下列数据:

 1001,1,80 1001,2,85 1001,3,78

 1002,1,78 1002,2,82 1002,3,86 1003,1,92 1003,3,90 1004,1,87 1004,4,90 1005,1,85 1005,4,92

  (4)向 Teacher 表中插入下列数据:

 101,张星,10

 102,李珊,10

 103,赵天应,10

 104,刘田,20

 (5)向 Dept 表中插入下列数据:

 10,计算机科学与技术

 20,信息

  2.修改数据 将张星老师数据结构课程的学生成绩全部加 2 分;

 --UPDATE SC SET GRADE = GRADE +2 --WHERE SC.CNO IN (SELECT CNO FROM Course,Teacher --WHERE Course.TNO=Teacher.TNO AND TNAME="张星" AND Course.cname="数据结构");

 3. 删除数据 删除马朝阳同学的所有选课记录。

 (二)查询操作

 1. 单表查询

 (1)查询所有学生的信息; SELECT * FROM Student

  (2)查询所有女生的姓名; SELECT SNAME

 FROM Student where (SEX="女")

 (3)

 查询成绩在 80~89 分之间的所有学生的选课记录,查询结果按照成绩降序排列; SELECT SNO,CNO FROM SC WHERE GRADE BETWEEN 80 AND 90 ORDER BY GRADE DESC;

  (4)

 查询各个系的学生人数; SELECT COUNT (SNO) AS COUNT FROM Student GROUP BY DEPTNO;

 2. 连接查询 查询信息系年龄在 21 岁以下的女生的姓名及其年龄; SELECT SNAME,AGE FROM Student,Dept WHERE AGE <21 AND Student.DEPTNO=Dept.DEPTNO

 3. 嵌套查询 (1)

 查询选修课总学分在 10 学分以下的学生的姓名;

 SELECT Sname FROM Student WHERE Student.sno in (

 SELECT Student.SNO FROM Student,SC,Course

 WHERE Student.sno = SC.SNO AND SC.CNO = Course.CNO

 GROUP BY Student.SNO

 HAVING SUM (CREAIT)<10 )

  (2)

 查询各门课程最高成绩的学生的姓名及其成绩; SELECT SNAME,GRADE FROM Student,SC S1 WHERE Student.SNO=S1.SNO AND GRADE = (

 SELECT MAX(GRADE)

 FROM SC S2

 WHERE S2.CNO = S1.CNO

 GROUP BY S2.CNO )

  (3)

 查询选修了 1001 号学生所选修的全部课程的学生的学号; SELECT DISTINCT SNO FROM SC SCX

  注意:红色字体的实验内容待讲完相应知识点后在做。

 WHERE NOT EXISTS (

  SELECT * FROM SC SCY

  WHERE SCY.SNO ="1001"

 AND NOT EXISTS (

 SELECT * FROM SC SCZ

 WHERE SCZ.SNO = SCX.SNO

 AND SCZ.CNO = SCY.CNO ) )

  (4)查询选修了张星老师所开设的全部课程的学生的姓名; SELECT SNAME FROM Student

 WHERE EXISTS (

 SELECT SC.CNO FROM SC,Course,Teacher,Student

 WHERE SC.CNO = Course.CNO

 AND Course.TNO = Teacher.TNO AND TNAME ="张星"

 AND SC.SNO = Student.SNO )