oracle 数据库基本操作二——数据操纵语言

  1.  (插入数据)  按前面各表中的数据分别插入到教学数据库的四个数据库表中。将自己的信息作为数据插入到学生表(学号的后5位作为学生表的学号),向Score表中插入相应的选课数据。
    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) 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');
    insert into Student(SNO,SNAME,SDEPT,SCLASS,SSEX,SAGE) values('74277','**','CS','01','','20');
    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');
    
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('王成刚','','004',to_date('1999-9-5','yyyy-mm-dd'),'CS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('李正科','','003',to_date('1999-9-5','yyyy-mm-dd'),'CS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('严敏','','001',to_date('1999-9-5','yyyy-mm-dd'),'MA');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('赵高','','004',to_date('1999-9-5','yyyy-mm-dd'),'IS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('李正科','','003',to_date('2000-2-23','yyyy-mm-dd'),'MA');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('刘玉兰','','006',to_date('2000-2-23','yyyy-mm-dd'),'CS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('王成刚','','004',to_date('2000-2-23','yyyy-mm-dd'),'IS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('马跃','','008',to_date('2000-9-6','yyyy-mm-dd'),'CS');
    insert into Teach(TNAME,TSEX,CNO,TDATE,TDEPT) values('王成刚','','007',to_date('1999-9-5','yyyy-mm-dd'),'CS');
    
    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');
    insert into Score(SNO,CNO,SCORE) values('97002','004','');
    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'); 
  2.  (多行插入)  将表Student中在计算机系(‘CS’)的学生数据插入到表Student_Temp中。(以上操作中,注意用COMMIT提交数据,将数据保存到数据库服务器)
    insert into student_temp(sno,sname,sd,sa) select sno,sname,sdept,sage from student where sdept='CS';
    
    commit;
  3.  (利用查询来实现表的定义与数据插入)  求每一个学生的平均成绩,把结果存入数据库表Student_Gr中。
    create table student_gr ( sno char(5) not null,sname char(16),avgs number(5,2));

    insert
    into student_gr(sno,sname,avgs) select score.sno,sname,avg(score) from student,score
    where student.sno=score.sno group by score.sno,sname;
  4.  (修改数据)  将Student_Temp表中所有学生的年龄加2。
    update student_temp set sa=sa+2;
  5.  (修改数据)  将Course表中‘程序设计’课时数修改成与‘数据结构’的课时数相同。
    update course set ctime = (select ctime from course where cname='数据结构') where cname = '程序设计';
  6.  (插入数据)  向Score表中插入数据(‘98001’, ‘001’, 95),根据返回信息解释其原因。
    SQL> insert into score(sno,cno,score) values('98001','001',95);
    insert into score(sno,cno,score) values('98001','001',95)
    *1 行出现错误:
    ORA-02291: 违反完整约束条件 (SUNC.S_SNO_FK) - 未找到父项关键字
    
    SQL> select * from student where sno = '98001';
    
    未选定行


    原因:Score表受sunc.s_sno_fk外键在Student表中的约束,因为Student表中没有学号为'98001'的同学,故在Score表中无法插入此条数据。
  7.  (插入数据)  向Score表中插入数据(‘97001’, ‘010’, 80),根据返回信息解释其原因。
    SQL> insert into score(sno,cno,score) values('97001','010',80);
    insert into score(sno,cno,score) values('97001','010',80)
    *1 行出现错误:
    ORA-02291: 违反完整约束条件 (SUNC.S_CNO_FK) - 未找到父项关键字
    
    
    SQL> select * from student where sno = '97001';
    
    SNO              SAGE SDEP SSEX   SCLA SNAME
    ---------- ---------- ---- ------ ---- --------------------------------
    97001              19 MA   女     02   马蓉
    
    SQL> select * from course where cno = '010';
    
    未选定行


    原因:Score表中有两个外键,必须同时满足Student和Course中对应的键,有一个不存在都不可以在Score表中插入数据
  8.  (删除数据)  删除Student表中学号为‘96001’的学生信息,根据返回信息解释其原因。
    SQL> delete from student where sno = '96001';
    delete from student where sno = '96001'
    *1 行出现错误:
    ORA-02292: 违反完整约束条件 (SUNC.S_SNO_FK) - 已找到子记录
    
    SQL> select * from score where sno = '96001';
    
    SNO        CNO         SCORE
    ---------- ------ ----------
    96001      001            78
    96001      003            89
    96001      004            86
    96001      005            82

    原因:受外键的约束,子表已经存在此外键信息,故不能删除;
    通过子查询查询子表,查到关于学号为96001的同学已存在的数据,如果要让Student表删除掉学号为96001的同学,必须先从子表开始删除数据;

  9.  (删除数据)  删除Course表中课程号为‘003’ 的课程信息,根据返回信息解释其原因。
    SQL> delete from course where cno = '003';
    delete from course where cno = '003'
    *1 行出现错误:
    ORA-02292: 违反完整约束条件 (SUNC.TEACH_CNO_FK) - 已找到子记录
    SQL> select * from course where cno = '003';
    
    CNO    CNAME                                    CTIME
    ------ ---------------------------------------- ----------------
    003    微机原理                                 72

    原因:受外键的约束,子表已经存在此外键信息,故不能删除;
    通过子查询查询子表,查到关于课程号为‘003’的同学已存在的数据,如果要让Course表删除掉课程号为‘003’的同学,必须先从子表开始删除数据;

  10.  (删除数据)  删除学生表Student_Temp中学号以96打头的学生信息。(此操作后,注意用ROLLBACK回退可能更新的数据)
     delete from student_temp where sno like '96%';
    
    //回退数据
     rollback;
  11. (删除数据)  删除数据库表Student_Temp中所有学生的数据。
    delete from student_temp;
  12. (删除表)    删除数据库表Student_Temp和Student_Gr。
    drop table student_temp;
    drop table student_gr;

  创建表时一定要细心,在插入数据是出现各种各样的错误,最后通过修改表的属性等操作终于完成了数据插入;

  用to_date('2000-2-23','yyyy-mm-dd')在插入数据时设置时间格式;

  alter session set nls_date_format='yyyy-mm-dd';将日期设置成年月日格式;

  因为同一个课程可以多位老师教学,所以不需要设置主键,否则数据插入会出现问题;

  在使用相似匹配时依然用等号,导致不知错在哪,最后查阅资料发现是like!

 

posted @ 2017-10-22 23:56  醉风晨  阅读(1091)  评论(0编辑  收藏  举报