数据库学习初步
一、数据定义
(一)、基本表操作
先建立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 INTNOT NULL PRIMARY KEY,
SNAME CHAR(8)NOT NULL,
SEX CHAR(2)NOT NULL,
DEPTNO INT NOT NULL)
2) 建立Course表
命令行操作:
CREATE TABLE Course
(
CNO INT NOT NULL,
CNAME CHAR(20)NOT NULL,
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 INTNOT NULL,
TNAME CHAR(8)NOT NULL PRIMARY KEY,
DEPTNO INT NOT NULL
)
5) 建立Depth表
命令行操作:
CREATETABLE Dept
(
DEPTNO INT NOT NULL PRIMARYKEY,
DNAME CHAR(20)NOT NULL
)
2.修改基本表
1)在Student表中加入属性SAGE(INT 型)。
命令行操作:
ALTER TABLE Student ADD SAGEINT;
2)将Student表中的属性SAGE 类型改为SMALLINT型。
命令行操作:
ALTERTABLE Student alter 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 UNIQUEINDEX stusno ON 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。
2.删除视图
在操作结束后删除视图CS_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分
3.删除数据
删除马朝阳同学的所有选课记录
(二)、查询操作
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 = '信息'AND SAGE <= 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.SNOAND GRAGE IN
(SELECTMAX(GRAGE)
FROM SC
GROUP BYCNO);
3)查询选修了1001学生选修的全部课程的学生学号。
4)查询选修了张星老师开设的全部课程的学生姓名。
出现的问题及解决方案:
1.在创建基本表时是否可以缺省主码?
解:可以
2.对基本表进行修改,执行ALTER TABLE Student MODIFY Sage SMALLINT显示执行失败。
解:将MODIFY更改为alter column就可以解决。