《数据库系统概论》
实验报告书
专业班级 学 号 姓 名 指导教师
安徽工业大学计算机学院
网络工程103班 109074360 桂大有 周兵
Oracle9i上机操作指南 安徽工业大学计算机学院
实验一:数据定义语言
1. SQL数据定义语句:
例1-1: (建立数据库表) 建立教学数据库的四个数据库表,其中Student表中不包含SEX(C,2) 字段,Sname 字段为Sname(C,8)且可为空。 CREATE TABLE STudent (Sno CHAR(5),
Sname VARCHAR2(8) NULL, Sdept VARCHAR2(2), SClass CHAR(2) NOT NULL,
SAge NUMBER(2) CHECK(SAGE BETWEEN 12 AND 60), CONSTRAINT SNO_PK PRIMARY KEY(SNO));
CREATE TABLE Course (Cno CHAR(3) , Cname VARCHAR2(16), Ctime NUMBER(3),
CONSTRAINT CNO_PK PRIMARY KEY(CNO));
CREATE TABLE Teach (TNAME VARCHAR2(8),
TSEX CHAR(2) CHECK(TSex IN('男','女')), CNO CHAR(3), TDATE DATE, TDEPT CHAR(2),
constraint teach_pk PRIMARY KEY(tname,cno,tdept),
CONSTRAINT Cno_fk FOREIGN KEY(Cno) REFERENCES COURSE(Cno));
CREATE TABLE SCORE (Sno CHAR(5), Cno CHAR(3), SCORE NUMBER(5,2),
CONSTRAINT SC_pk PRIMARY KEY(Sno,Cno),
CONSTRAINT c_fk FOREIGN KEY(cno) REFERENCES course(cno), CONSTRAINT Sno_fk FOREIGN KEY(Sno) REFERENCES STUDENT(Sno),
1/10
Oracle9i上机操作指南 安徽工业大学计算机学院
CONSTRAINT Ck1 CHECK(SCORE>=0 AND SCORE<=100));
例1-2: (修改数据库表) 在Student表中增加SEX(C,2) 字段。 ALTER TABLE Student ADD Sex CHAR(2) CHECK(Sex IN('男','女')); 例1-3: (修改列名) 将Student表中列名SEX修改为SSEX。 ALTER TABLE STudent RENAME COLUMN Sex to SSex ;
例1-4: (修改数据库表) 将Student表中把Sname 字段修改为Sname(C,10)且为非空。 ALTER TABLE Student MODIFY (Sname VARCHAR2(10) NOT NULL);
例1-5: (建立索引) 为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。 CREATE UNIQUE INDEX SC_GRADE ON SCore(Cno ASC,SCORE DESC); 例1-6: (删除索引) 删除索引SC_GRADE。 DROP INDEX SC_GRADE;
例1-7: (建立数据库表) 建立数据库表S1(SNO,SNAME,SD,SA),其字段类型定义与Student表中的相应字段(SNO,SNAME,SDEPT,SAGE)的数据类型定义相同。
CREATE TABLE S1(Sno CHAR(5) PRIMARY KEY, Sname VARCHAR2(10) not NULL,Sd VARCHAR2(2), SA NUMBER(2) CHECK(SA BETWEEN 12 AND 60));
例1-8: (修改数据库表) 删除成绩表Score的参照完整性约束关系。 ALTER TABLE SCore DROP CONSTRAINT Ck1;
例1-9: (修改数据库表) 添加成绩表Score的参照完整性约束关系。 ALTER TABLE SCore ADD CONSTRAINT Ck1 CHECK(Grade>=0 AND Grade<=100); 例1-10: (修改数据库表名) 将数据库表S1改名为Student_Temp。 RENAME S1 TO Student_Temp;
实验二:数据操纵语言
2. SQL数据操纵语句:
例2-1: (插入数据) 按前面各表中的数据分别插入到教学数据库的四个数据库表中。 INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('96001','马小燕','CS','01','女',21);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('96002','黎明','CS','01','男',18);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('96003','刘东明','MA','01','男',18);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('96004','赵志勇','IS','02','男',20);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('97001','马蓉','MA','02','女',19);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage)
2/10
Oracle9i上机操作指南 安徽工业大学计算机学院
VALUES('97002','李成功','CS','01','男',20);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('97003','黎明','IS','03','女',19);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('97004','李丽','CS','02','女',19);
INSERT INTO Student(Sno,Sname,Sdept,Sclass,SSex,sage) VALUES('96005','司马志明','CS','02','男',18); COMMIT;
INSERT INTO Course(Cno,Cname,ctime) VALUES('001','数学分析',144); INSERT INTO Course(Cno,Cname,ctime) VALUES('002','普通物理',144); INSERT INTO Course(Cno,Cname,ctime) VALUES('003','微机原理',72); INSERT INTO Course(Cno,Cname,ctime) VALUES('004','数据结构',72); INSERT INTO Course(Cno,Cname,ctime) VALUES('005','操作系统',64); INSERT INTO Course(Cno,Cname,ctime) VALUES('006','数据库原理',64); INSERT INTO Course(Cno,Cname,ctime) VALUES('007','DB_Design',48); INSERT INTO Course(Cno,Cname,ctime) VALUES('008','程序设计',56); commit;
INSERT INTO score(sno,cno,score) VALUES('96001','001',77.5); INSERT INTO score(sno,cno,score) VALUES('96001','003',89); INSERT INTO score(sno,cno,score) VALUES('96001','004',86); INSERT INTO score(sno,cno,score) VALUES('96001','005',82); INSERT INTO score(sno,cno,score) VALUES('96002','001',88); INSERT INTO score(sno,cno,score) VALUES('96002','003',92.5); INSERT INTO score(sno,cno,score) VALUES('96002','006',90); INSERT INTO score(sno,cno,score) VALUES('96005','004',92); INSERT INTO score(sno,cno,score) VALUES('96005','005',90); INSERT INTO score(sno,cno,score) VALUES('96005','006',89); INSERT INTO score(sno,cno,score) VALUES('96005','007',76); INSERT INTO score(sno,cno,score) VALUES('96003','001',69); INSERT INTO score(sno,cno,score) VALUES('97001','001',96); INSERT INTO score(sno,cno,score) VALUES('97001','008',95); INSERT INTO score(sno,cno,score) VALUES('96004','001',87); INSERT INTO score(sno,cno,score) VALUES('96003','003',91); INSERT INTO score(sno,cno,score) VALUES('97002','003',91);
3/10
Oracle9i上机操作指南 安徽工业大学计算机学院
INSERT INTO score(sno,cno,score) VALUES('97002','004',00); INSERT INTO score(sno,cno,score) VALUES('97002','006',92); INSERT INTO score(sno,cno,score) VALUES('97004','005',90); INSERT INTO score(sno,cno,score) VALUES('97004','006',85); INSERT INTO score(sno,cno,score) VALUES('97004','008',75); INSERT INTO score(sno,cno,score) VALUES('97003','001',59); INSERT INTO score(sno,cno,score) VALUES('97003','003',58); Commit;
例2-2:(多行插入) 将表Student表中计算机系(‘CS’)的学生数据插入到表S1中。 insert into s1(sno,sname,sd,sa)select sno,sname,sdept,sage from student; commit;
(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器)
例2-3:(利用查询来实现表的定义与数据插入) 求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。
create table student_Gr(no char(5) primary key,sc_avg number(5,2));
insert into student_Gr(no,sc_avg) select sno,avg(score) from score group by sno; 例2-4: (修改数据) 将Student_Temp表中所有学生的年龄加2。 update student_temp set sa=sa+2;
例2-5: (修改数据) 将Course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。 update course set ctime=(select ctime from course where cname='数据结构') where cname='程序设计';
例2-6: (插入数据) 向Score表中插入数据(‘98001’, ‘001’, 95),根据返回信息解释其原因。 SQL> insert into score values('98001','001',95); insert into score values('98001','001',95) *
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (U09074331.SNO_FK) - 未找到父项关键字
例2-7: (插入数据) 向Score表中插入数据(‘97001’, ‘010’, 80),根据返回信息解释其原因。 SQL> insert into score values('97001','010',80); insert into score values('97001','010',80) *
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (U09074331.C_FK) - 未找到父项关键字例2-8: (删除数据) 删除Student表中学号为‘96001’的学生信息,根据返回信息解释其原因。 SQL> delete from student where sno='96001'; delete from student where sno='96001'
4/10