实验一:数据定义/数据操纵语言
[ 实验日期 ] 年 月 日
[ 实验目的 ]
通过实验熟悉ORACLE上机环境;熟练掌握和使用DDL语言,建立、修改和删除数据库表;熟练掌握和使用DML语言,对数据进行增加、修改和删除操作。
[ 实验内容 ]
(1)(建立数据库表) 建立教学数据库的四个数据库表,并按要求创建完整性约束。
–1.学生情况表
CREATE TABLE Student
(SNO CHAR(5) PRIMARY KEY,
SNAME VARCHAR2(12) NOT NULL,
SDEPT CHAR(2) NOT NULL,
SCLASS CHAR(2) NOT NULL,
SSEX CHAR(3),
SAGE NUMBER(2)
);
INSERT INTO STUDENT VALUES('96001','马小燕','CS','01','女',21);
INSERT INTO STUDENT VALUES('96002','黎明','CS','01','男',18);
INSERT INTO STUDENT VALUES('96003','刘东明','MA','01','男',18);
INSERT INTO STUDENT VALUES('96004','赵志勇','IS','02','男',20);
INSERT INTO STUDENT VALUES('97001','马蓉','MA','02','女',19);
INSERT INTO STUDENT VALUES('97002','李成功','CS','01','男',20);
INSERT INTO STUDENT VALUES('97003','黎明','IS','03','女',19);
INSERT INTO STUDENT VALUES('97004','李丽','CS','02','女',19);
INSERT INTO STUDENT VALUES('97005','司马志明','CS','02','男',18);
–2.课程名称表
CREATE TABLE Course (
CNO CHAR(3)PRIMARY KEY,
CNAME VARCHAR2(20),
CTIME NUMBER(3)
);
INSERT INTO Course VALUES ('001','数学分析',144);
INSERT INTO Course VALUES ('002','普通物理',144);
INSERT INTO Course VALUES ('003','微机原理',80);
INSERT INTO Course VALUES ('004','数据结构',72);
INSERT INTO Course VALUES ('005','操作系统',80);
INSERT INTO Course VALUES ('006','数据库原理',80);
INSERT INTO Course VALUES ('007','编译原理',60);
INSERT INTO Course VALUES ('008','程序设计',40);
–3.教师授课表
CREATE TABLE Teach
(TNAME VARCHAR2(12),
TSEX CHAR(3),
CNO CHAR(3),
TDATE DATE,
TDEPT CHAR(2),
PRIMARY KEY(TNAME,CNO,TDEPT),
CONSTRAINT FK_CNO FOREIGN KEY(CNO) REFERENCES Course(CNO)
);
INSERT INTO Teach VALUES('王成刚','男','004','1999.9.5','CS');
INSERT INTO Teach VALUES('李正科','男','003','1999.9.5','CS');
INSERT INTO Teach VALUES('严敏','女','001','1999.6.8','MA');
INSERT INTO Teach VALUES('赵高','男','004','1999.3.12','IS');
INSERT INTO Teach VALUES('李正科','男','003','2000.2.23','MA');
INSERT INTO Teach VALUES('刘玉兰','女','006','2000.2.23','CS');
INSERT INTO Teach VALUES('王成刚','男','004','2000.3.3.','IS');
INSERT INTO Teach VALUES('马跃','女','008','2000.6.9','CS');
–4.成绩表
CREATE TABLE Score(
SNO CHAR(5),
CNO CHAR(3),
SCORE NUMBER(4,1),
PRIMARY KEY(SNO,CNO),
CONSTRAINT FK_SNO FOREIGN KEY(SNO) REFERENCES Student(SNO),
CONSTRAINT FK_CNO2 FOREIGN KEY(CNO) REFERENCES Course(CNO)
);
INSERT INTO Score VALUES('96001','001',77.5);
INSERT INTO Score VALUES('96001','003',89);
INSERT INTO Score VALUES('96001','004',86);
INSERT INTO Score VALUES('96001','005',82);
INSERT INTO Score VALUES('96002','001',88);
INSERT INTO Score VALUES('96002','003',92.5);
INSERT INTO Score VALUES('96002','006',90);
INSERT INTO Score VALUES('96005','004',92);
INSERT INTO Score VALUES('96005','005',90);
INSERT INTO Score VALUES('96005','006',87);
INSERT INTO Score VALUES('96005','007',76);
INSERT INTO Score VALUES('96003','001',69);
INSERT INTO Score VALUES('97001','001',96);
INSERT INTO Score VALUES('97001','008',95);
INSERT INTO Score VALUES('96004','001',87);
INSERT INTO Score VALUES('96003','003',91);
INSERT INTO Score VALUES('97002','003',91);
INSERT INTO Score(SNO,CNO) VALUES('97002','004');
INSERT INTO Score VALUES('97002','006',92);
INSERT INTO Score VALUES('97004','005',90);
INSERT INTO Score VALUES('97004','006',85);
(2)(修改数据库表) 在Student表中增加Birthday(date) 字段。
ALTER TABLE student ADD Birthday date;
(3) (修改数据库表) 在Student表中删除Birthday(date) 字段。
ALTER TABLE student DROP COLUMN Birthday;
(4) (修改数据库表) 将Student表中把Sname 字段修改为Sname(VCHAR2,20)且为
非空。
ALTER TABLE Student MODIFY SNAME varchar2(20);
(5) (修改数据库表) 将Student表中把Sname 字段修改为Sname(VCHAR2,20)且为非空。
ALTER TABLE Student MODIFY SNAME varchar2(20);
(6) (修改数据库表) 将Student表中的Sname 字段添加唯一性约束,根据返回信息解释其原因。
ALTER TABLE student ADD CONSTRAINT CONSTRAINT_name UNIQUE(SNAME);
错误:SQL 错误: ORA-02299: 无法验证 (JXGL.CONSTRAINT_NAME) - 找到重复关键字;
原因:因为该列取值SNAME提前定义取值非空,则不能喝UNIQUE联合使用
4. 完成SQL数据操纵语句:
(1) (建立数据库表) 复制Student(SNO,SNAME,SDEPT,SAGE)表中的表结构到S1表中(不复制数据)。
CREATE TABLE S1
(SNO CHAR(5) PRIMARY KEY,
SNAME VARCHAR2(12) NOT NULL,
SDEPT CHAR(2) NOT NULL,
SAGE NUMBER(2)
);
(2)(多行插入) 将表Student表中计算机系(‘CS’)的学生数据插入到表S1中。
INSERT INTO S1 SELECT SNO,SNAME,SDEPT,SAGE FROM STUDENT WHERE SDEPT='CS';
(3)(用create table+select创建表)将student表拷贝放到stu表中
CREATE TABLE STU AS SELECT * FROM STUDENT;
(4) (修改数据) 将S1表中所有学生的年龄加2。
UPDATE STU SET SAGE = SAGE+2;
(5) (修改数据) 将Course表中‘程序设计’课时数修改成100。
UPDATE COURSE
SET CTIME = 100;
(6) (插入数据) 向Score表中插入数据(‘98001’, ‘001’, 95),根据返回信息解释其原因。
INSERT INTO SCORE VALUES('98001','001',95);
SQL 错误: ORA-02291: 违反完整约束条件 (JXGL.FK_SNO) - 未找到父项关键字
原因:SNO参照了student里的主键
(7) (插入数据) 向Score表中插入数据(‘97001’, ‘010’, 80),根据返回信息解释其原因。
INSERT INTO SCORE VALUES('97001','010',80);
SQL 错误: ORA-02291: 违反完整约束条件 (JXGL.FK_CNO2) - 未找到父项关键字
原因:CNO参照了COURSE里的主键
(8) (删除数据) 删除Score表中学号为‘96001’的成绩信息,
DELETE FROM SCORE WHERE SNO='96001';
(9) (删除数据) 删除Score表中课程号为‘003’ 的成绩信息.
DELETE FROM SCORE WHERE CNO='003';
(10)(删除数据) 删除学生表stu中计算机系(‘CS’)的学生信息。
DELETE FROM STU WHERE SDEPT='CS';
(11)(删除数据) 删除数据库表S1中所有学生的数据。
DELETE FROM S1;
(12)(删除表) 删除数据库表S1和stu。
DROP TABLE S1;
DROP TABLE STU;
实验二:数据查询语言
[ 实验日期 ] 年 月 日
[ 实验目的 ]
通过实验掌握数据库系统SQL语言数据查询功能的使用方法。
[ 实验内容 ]
3. SQL数据查询语句:
–(1) (选择表中的若干列) 求全体学生的学号、姓名、性别和年龄。
SELECT SNO,SNAME,SSEX,SAGE FROM STUDENT;
–(2) (不选择重复行) 求选修了课程的学生学号。
SELECT DISTINCT SNO FROM STUDENT,COURSE;
–(3) (选择表中的所有列) 求全体学生的详细信息。
SELECT STUDENT.*,SCORE.* FROM STUDENT,SCORE WHERE STUDENT.SNO = SCORE.SNO;
–(4) (使用表达式) 求全体学生的学号、姓名和出生年份。
SELECT SNO,SNAME,2019-SAGE FROM STUDENT;
–(5) (使用列的别名) 求学生的学号和出生年份,显示时使用别名“学号”和“出生年份”。
SELECT SNO AS "学号",2019-SAGE AS "出生年份" FROM STUDENT;
–(6)(比较大小条件) 求年龄大于19岁的学生的姓名和年龄。
SELECT SNAME,SAGE FROM STUDENT WHERE SAGE>19;
–(7) (比较大小条件) 求计算机系或信息系年龄大于18岁的学生的姓名、系和年龄。cs:计算机系,MA:数学系,IS:信息系
SELECT SNAME,SDEPT,SAGE FROM STUDENT WHERE SDEPT IN ('IS','CS') AND SAGE>18;
–(8) (确定范围条件) 求年龄在19岁与22岁(含20岁和22岁)之间的学生的学号和年龄。
SELECT SNO,SAGE FROM STUDENT WHERE SAGE BETWEEN 20 AND 22;
–(9) (确定范围条件) 求年龄不在19岁与22岁之间的学生的学号和年龄。
SELECT SNO,SAGE FROM STUDENT WHERE SAGE NOT BETWEEN 20 AND 22;
–(10)(确定集合条件) 求在下列各系的学生信息:数学系、计算机系。
SELECT * FROM STUDENT WHERE SDEPT IN ('CS','MA');
–(11)(确定集合条件) 求不是数学系、计算机系的学生信息。
SELECT * FROM STUDENT WHERE SDEPT NOT IN('CS','MA');
–(12)(匹配查询) 求姓名是以“李”打头的学生。
SELECT DISTINCT SNAME FROM STUDENT WHERE SNAME LIKE '李%';
–(13)(匹配查询) 求姓名中含有“志”的学生。
SELECT DISTINCT SNAME FROM STUDENT WHERE SNAME LIKE '%志%';
–(14)(匹配查询) 求姓名长度至少是三个汉字且倒数第三个汉字必须是“马”的学生。
SELECT DISTINCT SNAME FROM STUDENT WHERE SNAME LIKE '%马_';
–(15)(匹配查询) 求选修课程001或003,成绩在80至90之间,学号为96xxx的学生的学号、课程号和成绩。
SELECT DISTINCT STUDENT.SNO,COURSE.CNO,SCORE.SCORE FROM STUDENT,COURSE,SCORE WHERE COURSE.CNO IN ('001','003') AND SCORE.SCORE BETWEEN 80 AND 90 AND STUDENT.SNO LIKE '96%';
–(16)(涉及空值查询) 求缺少学习成绩的学生的学号和课程号。
SELECT SNO,CNO FROM SCORE WHERE SCORE IS NULL;
–(17)(控制行的显示顺序) 求选修001课程的学生的学号、课程号和分数,结果按分数降序排序。
SELECT SNO,CNO,SCORE FROM SCORE WHERE CNO='001' ORDER BY SCORE DESC;
–(19)(组函数) 求选修了课程的学生人数。
SELECT COUNT(SNO) FROM SCORE;
–(20)(组函数) 求计算机系学生的平均年龄。
SELECT AVG(SAGE) FROM STUDENT WHERE SDEPT='CS';
–(21)(组函数) 求选修了课程001的最高、最低与平均成绩。
SELECT MAX(SCORE),MIN(SCORE),AVG(SCORE) FROM SCORE WHERE CNO='001';
–(22)(分组查询) 求各门课程的平均成绩与总成绩。
SELECT CNO,AVG(SCORE),SUM(SCORE) FROM SCORE GROUP BY CNO;
–(23)(分组查询) 求各门课程的平均成绩与总成绩,结果按总成绩排序。
SELECT CNO,AVG(SCORE),SUM(SCORE) FROM SCORE GROUP BY CNO ORDER BY SUM(SCORE) ASC;
–(24)(分组查询) 求各系、各班级的人数和平均年龄。
SELECT SDEPT,AVG(SAGE) FROM STUDENT GROUP BY SDEPT;
SELECT SCLASS,AVG(SAGE) FROM STUDENT GROUP BY SCLASS;
–(25)(分组查询) 输入以下查询语句并执行,观察出现的其结果并分析其原因。
SELECT SNAME,SDEPT,COUNT(*)FROM STUDENT WHERE SDEPT='CS' GROUP BY SDEPT;
SNAME属性无效,因为该列没有包含在聚合函数或GROUP BY的子句中
–(26)(分组查询) 分析以下语句为什么会出现错误。并给出正确的查询语句。
SELECT SAGE FROM STUDENT GROUP BY SNO;
SAGE属性无效,因为该列没有包含在聚合函数或GROUP BY的子句中
–(27)(分组查询) 求学生人数不足3人的系及其相应的学生数。
SELECT SDEPT,COUNT(SNO) FROM STUDENT GROUP BY SDEPT HAVING COUNT(SNO)<3;
–(28)(分组查询) 求各系中除01班之外的各班的学生人数。
SELECT SDEPT,COUNT(SNO) FROM STUDENT GROUP BY SDEPT HAVING SCLASS NOT IN('01');
实验三:索引、视图、授权控制与事务处理
[ 实验日期 ] 年 月 日
[ 实验目的 ]
通过实验进一步理解视图的建立和更新、数据库的权限管理和事务处理功能。
[ 实验内容 ]
4. 索引与视图
1) (建立索引) 为Score表按课程号升序、分数降序建立索引,索引名为SC_GRADE。
CREATE INDEX SC_GRADE ON SCORE(CNO ASC,SCORE DESC);
(2) (删除索引) 删除索引SC_GRADE。
DROP INDEX SC_GRADE;
(3) (建立视图) 建立计算机系的学生的视图STUDENT_CS。
CREATE VIEW STUDENT_CS
AS
SELECT * FROM STUDENT WHERE SDEPT='CS';
(4) (建立视图) 建立由学号和平均成绩两个字段的视图STUDENT_GR。
CREATE VIEW STUDENT_GR(SNO,AVG_SCORE)
AS
SELECT SNO,AVG(SCORE) FROM SCORE GROUP BY SNO;
(5) (视图查询) 利用视图STUDENT_CS,求年龄大于19岁的学生的全部信息。
SELECT * FROM STUDENT_CS WHERE SAGE>19;
(6) (视图查询) 利用视图STUDENT_GR,求平均成绩为88分以上的学生的学号和平均成绩。
SELECT SNO,AVG_SCORE FROM STUDENT_GR WHERE AVG_SCORE>88;
(7) (视图更新) 利用视图STUDENT_CS,增加学生( ‘97006’,‘张然’,‘CS’,‘02’,‘男’,19 )。
INSERT INTO STUDENT_CS VALUES('97006','张然','CS','02','男','19');
(8)(视图更新) 利用视图STUDENT_CS,将学生年龄增加1岁。观察其运行结果并分析原因。
UPDATE STUDENT_CS SET SAGE=SAGE+1;
(9) (视图更新) 利用视图STUDENT_GR,将平均成绩增加2分。观察其运行结果并分析原因。
UPDATE STUDENT_GR SET AVG_SCORE=AVG_SCORE+2;
原因分析:该视图中定义有GROUP BY子句,不允许更新
(10) (视图更新) 删除视图STUDENT_CS中学号为 ‘97006’ 的学生的全部数据。
DELETE FROM STUDENT_CS WHERE SNO='97006';
(11) (视图更新) 删除视图STUDENT_GR的全部数据。
DELETE FROM STUDENT_GR;
原因分析:因为它包含聚合或DISTINCT子句
(12) (删除视图) 删除视图STUDENT_CS和STUDENT_GR。
DROP VIEW STUDENT_CS;
DROP VIEW STUDENT_GR;
5. SQL数据控制语句:
5. SQL数据控制语句:
例5-1:创建具有CONNECT和RESOURCE系统权限的用户USER1和USER2,并连接数据库服务器;
create user USER1 identified by user1;
create user USER2 identified by user2;
grant connect,resource to user1;
grant connect,resource to user2;
例5-2:(授权) 给USER1授予在表Student上的SELECT权限,并使该用户具有给其他用户授予相同权限的权限。
grant select on student to USER1 with grant option;
例5-3:(授权) USER1授予表Student上的SELECT权限给USER2。
grant select on student to USER2;
例5-4: (授权) 给USER1和USER2授予Teach表上的所有权限。
grant all on Teach to USER1;
grant all on TEach to USER2;
例5-5: (授权) 给所有用户授予Score表上的SELECT权限。
grant select on Score to public;
例5-6: (授权) 给USER1授予Score表Score字段上的UPDATE权限。
grant update(score) on Score to USER1;
例5-7: (授权) 给USER2授予查询每门课程最高成绩、最低成绩和平均的权限。
grant select on Score to USER2;
例5-8: (收回授权) 收回上面例子中的所有授予的权限。
revoke all from USER1;
revoke all from USER2;
6. SQL事务处理:
例6-1:以银行转帐为例,用JAVA程序实现在客户端进行事务控制。
(1)数据表:Account(AccountID, CHARE(6),Balance number(10,2))
CREATE TABLE account(
id CHAR(8) PRIMARY key,
balance NUMERIC(10,5)
);
(2)在表中输入两条记录
INSERT INTO account VALUES('A',1000);
INSERT INTO account VALUES('B',2000);
(3)实现转帐功能。
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import dao.ConnectionSource;
public class Trans {
public static void main(String[] args) {
}
public void transfer(String from,String to,double amount){
Connection con=null;
Statement stmt=null;
try {
con=ConnectionSource.getConnection();
stmt=con.createStatement(); //更新数据的SQL语句 String
sql1="update account set amount=amount-"+amount+"where id="+"'"+from+"'";
String sql2="update account set amount=amount+"+amount+"where id="+"'"+to+"'"; //关闭自动提交
con.setAutoCommit(false); //执行SQL语句
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2); //提交
con.commit();
} catch (SQLException e) {
try {
con.rollback();
} catch (SQLException e1) {
System.out.println("回滚事务异常!");
throw new RuntimeException(e);
}
System.out.println("数据库访问异常!");
throw new RuntimeException(e);
}finally{
try {
If(stmt!=null){
stmt.close();
}
if(con!=null){
con.close();
}
} catch (SQLException e) {
System.out.println("释放资源时发生异常!");
}
}
}}
实验四:存储过程与触发器
[ 实验日期 ] 年 月 日
[ 实验目的 ]
通过实验进一步理解和掌握数据库的存储过程和触发器的使用方法。
[ 实验内容 ]
1. 存储过程:
–1. (存储过程) 创建一个显示学生总人数的存储过程STU_COUNT。
CREATE OR REPLACE PROCEDURE STU_CONUT()
AS
BEGIN
COUNT(*)
END;
/
–2. (存储过程) 创建显示学生信息的存储过程STUDENT_LIST。
CREATE OR REPLACE PROCEDURE STUDENT_LIST
as
–3. (存储过程) 创建一个显示学生平均成绩的存储过程。
CREATE OR REPLACE PROCEDURE STUDENT_AVG
AS
BEGIN
SELECT SNO,AVG(SCORE) FROM SCORE GROUP BY SNO;
END;
/
–4. (存储过程) 创建显示所有学生平均成绩的存储过程。
CREATE OR REPLACE PROCEDURE STUDENT_AVG
AS
BEGIN
SELECT SNO,AVG(SCORE) FROM SCORE;
END;
/
–5.(存储过程) 创建一个对学生姓名进行模糊查找的带参存储过程。
create procedure Student_Name
@name char(8)
as
select * from student where sname like @name;
execut Student_Name '%马%';
2.触发器:
–(1)当在score表中插入一条记录时,要检查其学号在student表中和课程号在course表中是否存在,若不存在则不允许插入。
create trigger Trig_student on score for insert
as
if exists(select * from inserted
where inserted.sno not in(select sno from student)
or
inserted.cno not in(select cno from course))
begin
raiserror('违背数据的一致性',16,1)
rollback tran
end
insert into score values('001104','206',100,10)
–(2)对student表进行删除操作,则删除score表中对应学号的所有记录;对student表的学号进行更新操作,则更新score表中对应学号的所有记录;
create trigger Trig_student on student
for delete
as
delete from score
where sno in(select sno from deleted)
–(3)对course表进行删除操作,则删除score表中对应课程号的所有记录;对course表的课程号进行更新操作,则更新score表中对应课程号的所有记录;
create trigger Trig_student on score
for update
as
update score
set cno =(select course.cno from course,score where course.cno=score.cno )
附录一. 教学管理数据库设计
各表的数据结构和数据如下:
1. 学生情况表 Student
SNO(C,5)
学号 SNAME(VC,12)
姓名 SDEPT(C,2)
系 SCLASS(C,2)
班级 SSEX(C,3)
性别 SAGE(number(3))
年龄
96001 马小燕 CS 01 女 21
96002 黎明 CS 01 男 18
96003 刘东明 MA 01 男 18
96004 赵志勇 IS 02 男 20
97001 马蓉 MA 02 女 19
97002 李成功 CS 01 男 20
97003 黎明 IS 03 女 19
97004 李丽 CS 02 女 19
96005 司马志明 CS 02 男 18
主关键字:SNO 非空字段:SNAME,SDEPT,SCLASS
2. 课程名称表 Course 3. 教师授课表 Teach
CNO(C,3)
课程号 CNAME(VC,50)
课程名称 CTIME(number(3))
学时数 TNAME(VC,12)
教师姓名 TSEX(C,3)
性别 CNO(C,3)
课程号 TDATE(Date)
授课日期 TDEPT(C,2)
系
001 数学分析 144 王成刚 男 004 1999.9.5 CS
002 普通物理 144 李正科 男 003 1999.9.5 CS
003 微机原理 80 严敏 女 001 1999.9.5 MA
004 数据结构 72 赵高 男 004 1999.9.5 IS
005 操作系统 80 李正科 男 003 2000.2.23 MA
006 数据库原理 80 刘玉兰 女 006 2000.2.23 CS
007 编译原理 60 王成刚 男 004 2000.2.23 IS
008 程序设计 40 马悦 女 008 2000.9.6 CS
主关键字:CNO 主关键字:TNAME,CNO,TDEPT 参照关系:Course(CNO)
4. 成绩表 Score
SNO(C,5)
学号 CNO(C,3)
课程号 SCORE(NUMBER(5,1))
分数 SNO(C,5)
学号 CNO(C,3)
课程号 SCORE(NUMBER(5,1))
分数 SNO(C,5)
学号 CNO(C,3)
课程号 SCORE(NUMBER(5,1))
分数
96001 001 77.5 96005 004 92 96004 001 87
96001 003 89 96005 005 90 96003 003 91
96001 004 86 96005 006 89 97002 003 91
96001 005 82 96005 007 76 97002 004
96002 001 88 96003 001 69 97002 006 92
96002 003 92.5 97001 001 96 97004 005 90
96002 006 90 97001 008 95 97004 006 85
主关键字:SNO,CNO 参照关系:Student(SNO),Course(CNO)
附录二: 《数据库概论》实验操作指导
一. 建立基本数据表
1、建立学生表。
CREATE TABLE Student(
SNO char(5) PRIMARY KEY,
SNAME varchar(12) NOT NULL,
SDEPT char(2) NOT NULL,
SCLASS char(2) NOT NULL,
SSEX char(3),
SAGE number(2));
insert into Student values('96001','马小燕','CS','01','女',21);
insert into Student values('96002','黎明','CS','01','男',18);
insert into Student values('96003','刘东明','MA','01','男',18);
insert into Student values('96004','赵志勇','IS','02','男',20);
insert into Student values('97001','马蓉','MA','02','女',19);
insert into Student values('97002','李成功','CS','01','男',20);
insert into Student values('97003','黎明','IS','03','女',19);
insert into Student values('97004','李丽','CS','02','女',19);
insert into Student values('96005','司马志明','CS','02','男',18);
2.建立课程表
CREATE TABLE Course(
CNO char(3) PRIMARY KEY,
CNAME varchar2(50),
CTIME number(3)
);
insert into COURSE values('001','数学分析',144);
insert into COURSE values('002','普通物理',144);
insert into COURSE values('003','微机原理',80);
insert into COURSE values('004','数据结构',72);
insert into COURSE values('005','操作系统',80);
insert into COURSE values('006','数据库原理',80);
insert into COURSE values('007','编译原理',60);
insert into COURSE values('008','程序设计',40);
3.建立教师表
CREATE TABLE Teach(
TNAME varchar2(12),
TSEX CHAR(3),
CNO CHAR(3),
TDATE date,
TDEPT CHAR(2),
CONSTRAINT Teach_pk PRIMARY KEY(TNAME,CNO,TDEPT),
CONSTRAINT Teach_fk FOREIGN KEY(CNO) REFERENCES COURSE(CNO)
);
insert into TEACH values('王成刚','男','004','1999.9.5','CS');
insert into TEACH values('李正科','男','003','1999-9-5','CS');
insert into TEACH values('严敏','女','001','1999-6-8','MA');
insert into TEACH values('赵高','男','004','1999-3-12','MA');
insert into TEACH values('刘玉兰','女','006','2000-2-23','CS');
insert into TEACH values('王成刚','男','004','2000-3-30','IS');
insert into TEACH values('马悦','女','008','2000-6-9','CS');
insert into TEACH values('李正科','男','003','2000-2-23','MA');
4.建立成绩表
CREATE TABLE Score (
sno char(5),
cno char(3),
Score number(5,1),
CONSTRAINT Score_pk PRIMARY KEY(SNO,CNO),
CONSTRAINT Score_fk_cno FOREIGN KEY(CNO) REFERENCES COURSE(CNO),
CONSTRAINT Score_fk_sno FOREIGN KEY(SNO) REFERENCES STUDENT(SNO)
);
insert into Score values('96001','001',77.5);
insert into Score values('96001','003',89);
insert into Score values('96001','004',86);
insert into Score values('96001','005',82);
insert into Score values('96002','001',88);
insert into Score values('96002','003',92.5);
insert into Score values('96002','006',90);
insert into Score values('96005','004',92);
insert into Score values('96005','005',90);
insert into Score values('96005','006',89);
insert into Score values('96005','007',78);
insert into Score values('96003','001',69);
insert into Score values('97001','001',96);
insert into Score values('97001','008',95);
insert into Score values('96004','001',87);
insert into Score values('96003','003',91);
insert into Score values('97002','003',91);
insert into Score values('97002','004', null);
insert into Score values('97002','006',92);
insert into Score values('97004','005',90);
insert into Score values('97004','006',85);