数据库学习初步 一、数据定义 (一)、基本表操作 先建立school数据库,在school数据库里做以下的操作。 1.建立基本表 1)创建学生表Student,由以下属性组成: 学号SNO(INT型,主码),姓名SNAME(CHAR型,长度为8,非空唯一),性别SEX(CHAR型,长度为2),所在系DEPTNO(INT型)。
2)创建课程表Course,由以下属性组成:课程号CNO(INT型),课程名CNAME(CHAR型,长度为20,非空),授课教师编号TNO(INT型),学分CREDIT(INT型)。其中(CNO,TNO)为主码。
3)创建学生选课表SC,由以下属性组成:学号SNO,课程CNO,成绩GRADE。所有属性均为INT型,其中(SNO,CNO)为主码。
4)创建教师表Teacher,由以下属性组成:教师编号TNO(INT型,主码),教师姓名TNAME(CHAR型,长度为8,非空),所在系DEPTNO(INT型)。
5)创建系表Dept,由以下属性:系号DEPTNO(INT型,主码),系名DNAME(CHAR型,长度为20,非空)。
2.修改基本表 1)在Student表中加入属性SAGE(INT型)。
2)将Student表中的属性SAGE类型改为SMALLINT型。
3.删除基本表 1)在所有操作结束后删除STUDENT表。
2)在所有操作结束后删除COURSE表。
3)在所有操作结束后删除SC表。
4)在所有操作结束后删除TEACHER表。
5)在所有操作结束后删除DEPT表。
(二)、索引操作 1.建立索引 1)在Student表上建立关于SNO的唯一索引stusno。
2)在Course表上建立关于CNO升序的唯一索引coucno。
2.删除索引 1)删除Student表上的索引stusno。
2)删除Course表上的索引coucno。
(三)、视图操作 1.建立视图 在插入数据的Student基本表上为计算机科学与技术系的学生记录建立一个视图CS_STUDENT。
2.删除视图 在操作结束后删除视图CS_STUDENT。
二、数据操作 (一)、更新操作 1.插入数据 1)向STUDENT表插入下列数据: 1001,张天,男,10,20 1002,李兰,女,10,21 1003,陈铭,男,10,21 1004,刘茜,女,20,21 1005,马朝阳,男,20,22
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分 3.删除数据 删除马朝阳同学的所有选课记录
(二)、查询操作 1.单表查询 1)查询所有学生的信息。 2)查询所有女生的姓名。 3)查询成绩在80到89之间的所有学生选课记录,查询结果按成绩的降序排列。 4)查询各个系的学生人数。
2.连接查询 查询信息系年龄在21岁以下(含21岁)的女生姓名及其年龄。
3.嵌套查询 1)查询修课总学分在10学分以下的学生姓名。 2)查询各门课程取得最高成绩的学生姓名及其成绩。 3)查询选修了1001学生选修的全部课程的学生学号。 4)查询选修了张星老师开设的全部课程的学生姓名。
出现的问题及解决方案: 1.在创建基本表时是否可以缺省主码? 2.对基本表进行修改,执行ALTER TABLE Student MODIFY Sage SMALLINT显示执行失败。
自己做的答案: (一) 基本表操作 建立基本表 1) 建立Student表 命令行操作: CREATE TABLE Student ( SNO INTNOTNULLPRIMARY KEY, SNAME CHAR(8)NOTNULL, SEX CHAR(2)NOTNULL, DEPTNO INT NOT NULL)
2) 建立Course表 命令行操作: CREATE TABLE Course ( CNO INT NOT NULL, CNAME CHAR(20)NOTNULL, TNO INT NOT NULL, CREDIT INT NOT NULL, PRIMARY KEY(CNO, TNO) ) 3) 建立SC表 命令行操作: CREATE TABLE SC ( SNO INT NOT NULL, CNO INT NOT NULL, GRAGE INT NOT NULL, PRIMARY KEY(SNO, CNO) ) 4) 建立Teacher表 命令行操作: CREATE TABLE Teacher ( TNO INTNOTNULL, TNAME CHAR(8)NOTNULLPRIMARY KEY, DEPTNO INT NOT NULL ) 5) 建立Depth表 命令行操作: CREATETABLE Dept ( DEPTNO INT NOT NULL PRIMARYKEY, DNAME CHAR(20)NOTNULL ) 2.修改基本表 1)在Student表中加入属性SAGE(INT型)。 命令行操作: ALTER TABLE Student ADD SAGEINT; 2)将Student表中的属性SAGE类型改为SMALLINT型。 命令行操作: ALTERTABLEStudentalter column SAGESMALLINT;
3.删除基本表 1)在所有操作结束后删除STUDENT表。 命令行操作: DROP TABLE Student; 2)在所有操作结束后删除COURSE表。 DROP TABLE Course; 3)在所有操作结束后删除SC表。 DROP TABLE SC; 4)在所有操作结束后删除TEACHER表。 DROP TABLETeacher; 5)在所有操作结束后删除DEPT表。 DROP TABLE Dept;
(二)、索引操作 1.建立索引 1)在Student表上建立关于SNO的唯一索引stusno。 CREATE UNIQUEINDEXstusnoON Student(SNO); 2)在Course表上建立关于CNO升序的唯一索引coucno。 CREATE UNIQUE INDEX coucno ONCourse(CNO);
2.删除索引 1)删除Student表上的索引stusno。 DROP INDEXStudent.stusno; 2)删除Course表上的索引coucno。 DROP INDEX Course.coucno;
(三)、视图操作 1.建立视图 在插入数据的Student基本表上为计算机科学与技术系的学生记录建立一个视图CS_STUDENT。
CREATE VIEWCS_STUDENT AS SELECT SNO,SNAME,SEX,DEPTNO,SAGE FROM Student WHERE DEPTNO=10 WITH CHECK OPTION 2.删除视图 在操作结束后删除视图CS_STUDENT。 DROPVIEWCS_STUDENT;
二、数据操作 (一)、更新操作 1.插入数据 1)向STUDENT表插入下列数据: 1001,张天,男,10,20 1002,李兰,女,10,21 1003,陈铭,男,10,21 1004,刘茜,女,20,21 1005,马朝阳,男,20,22 命令行操作: INSERT INTOStudent VALUES(1001,'张天','男',10,20); INSERT INTOStudent VALUES(1002,'李兰','女',10,21); INSERT INTOStudent VALUES(1003,'陈铭','男',10,21); INSERT INTOStudent VALUES(1004,'刘茜','女',20,21); INSERT INTOStudent VALUES(1005,'马朝阳','男',20,22); 2)向COURSE表插入下列数据: 1,数据结构,101,4 2,数据库,102,4 3,离散数学,103,4 4,C 语言程序设计,101,2 命令行操作: INSERT INTOCourse VALUES(1,'数据结构',101,4); INSERT INTOCourse VALUES(2,'数据库',102,4); INSERT INTOCourse VALUES(3,'离散数学',103,4); INSERT INTOCourse VALUES(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 命令行操作: INSERT INTOSC(SNO,CNO,GRAGE) SELECT 1001,1,80union SELECT 1001,2,85union SELECT 1001,3,78union SELECT 1002,1,78union SELECT 1002,2,82union SELECT 1002,3,86union SELECT 1003,1,92union SELECT 1003,3,90union SELECT 1004,1,87union SELECT 1004,4,90union SELECT 1005,1,85union SELECT 1005,4,92 4)向TEACHER表插入下列数据: 101,张星,10 102,李珊,10 103,赵天应,10 104,刘田, 20 命令行操作: INSERT INTOTeacher(TNO,TNAME,DEPTNO) SELECT 101,'张星',10union SELECT 102,'李珊',10union SELECT 103,'赵天应',10union SELECT 104,'刘田', 20
5)向DEPT表插入下列数据: 10,计算机科学与技术 20,信息 命令行操作: INSERT INTODept(DEPTNO,DNAME) SELECT 10,'计算机科学与技术'union SELECT 20,'信息'
2.修改数据 将张星老师数据结构课的学生成绩全部加2分 UPDATE SC SET GRAGE=GRAGE + 2 WHERE CNOIN (SELECTCNO FROMCourse WHERECNAME='数据结构'andcnoin (SELECTcno FROM Teacher WHERE TNAME='张星') ) 3.删除数据 删除马朝阳同学的所有选课记录 DELETE FROM SC WHERE SNO =1005 (二)、查询操作 1.单表查询 1)查询所有学生的信息。 SELECT SNO,SNAME,SEX,DEPTNO,SAGE FROM Student;
2)查询所有女生的姓名。 SELECT SNAME FROM Student WHERE SEXIN('女');
3)查询成绩在80到89之间的所有学生选课记录,查询结果按成绩的降序排列。 SELECT CNO FROM SC WHERE GRAGE BETWEEN 80 AND 89; 4)查询各个系的学生人数。 SELECT DISTINCTDEPTNO FROM Dept; 2.连接查询 查询信息系年龄在21岁以下(含21岁)的女生姓名及其年龄。 SELECT SNAME,SAGE FROM Student,Dept WHERE DNAME = '信息'ANDSAGE<> 21 AND SEX= '女'; 3.嵌套查询 1)查询修课总学分在10学分以下的学生姓名。 SELECT SNAME FROM Student,Course WHERE CREDIT 10; 2)查询各门课程取得最高成绩的学生姓名及其成绩。 SELECT SNAME,GRAGE, FROM Student,SC WHERE Student.SNO=SC.SNOANDGRAGEIN (SELECTMAX(GRAGE) FROM SC GROUP BYCNO); 3)查询选修了1001学生选修的全部课程的学生学号。
SELECT DISTINCTSNO FROM SCSCX WHERE SNO!= 1001 AND NOT EXISTS (SELECT* FROM SCSCY WHERE SCY.SNO = 1001 AND NOT EXISTS (SELECT* FROM SCSCZ WHERE SCZ.SNO = SCX.SNOAND SCZ.CNO= SCY.CNO)) 4)查询选修了张星老师开设的全部课程的学生姓名。
SELECT SNAME FROM Student WHERE SNOIN (SELECTSNO FROMSC WHERECNOIN (SELECTCNO FROM Course WHERE TNO IN (SELECTTNO FROM Teacher WHERE TNAME='张星') ) )
出现的问题及解决方案: 1.在创建基本表时是否可以缺省主码? 解:可以 2.对基本表进行修改,执行ALTER TABLE Student MODIFY Sage SMALLINT显示执行失败。 解:将MODIFY更改为alter column就可以解决。
|
|