数据库管理系统 练习与作业
第三章 练习一 列出所有在部门20工作的雇员姓名,且列名为name 列出名字不以‘N’开头的工作类型 职工档案表(emp) 职工号 empno Number(4) 姓名 ename Varchar2(10) 工作类型 job Varchar2(9) 受雇日期 hiredate Date 工资 sal Number(7,2) 奖金 comm 部门号 deptno Number(2) 第三章 练习一 列出所有在部门20工作的雇员姓名,且列名为name 列出名字不以‘N’开头的工作类型 找出工资比奖金高的雇员,按工资降序排列,姓名升序排列 列出有关雇员姓名、奖金收入百分比的信息,按雇员姓名排序,不包括奖金未知的雇员
练习二 student (学生信息表) 显示student表中班级为“95031”班或性别为“女”的同学记录 sno sname sex birthday class 108 曾华 男 09/01/77 95033 105 匡明 10/02/75 95031 107 王丽 女 01/23/76 101 李军 02/20/76 109 王芳 02/10/75 103 陆军 06/03/74 显示student表中班级为“95031”班或性别为“女”的同学记录 以class为降序、sno为升序显示student表的所有记录 显示各班的学生人数
列出教师表中所有的不重复的单位(depart列) teacher(老师信息表) tno tname sex birthday prof depart 804 李诚 男 12/02/58 副教授 计算机系 856 李旭 03/12/69 讲师 电子工程系 825 王萍 女 05/05/72 助教 831 刘冰 08/14/77 列出教师表中所有的不重复的单位(depart列)
course(课程表) score(成绩表) cno cname tno 3-105 计算机导论 825 3-245 操作系统 804 6-166 数字电路 856 9-888 高等数学 score(成绩表) sno cno degree 103 3-245 86 109 68 105 75 3-105 92 88 76 101 64 107 91 108 78 6-166 85 79 81 显示score表中成绩在60到80之间的所有记录 显示score表中成绩为85,86或88的记录 以cno升序、degree降序显示score表的所有记录 显示score表中的最高分的学生学号和课程号 显示每一门课程的课程名和平均分 用嵌套查询从score表中选出选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录
练习三 写出emp的定义语句,其中职工号为主键,姓名、工作类型属性不可空,且工资要求不可低于800元。 职工档案表(emp) 职工号 empno Number(4) 姓名 ename Varchar2(10) 工作类型 job Varchar2(9) 受雇日期 hiredate Date 工资 sal Number(7,2) 奖金 comm 部门号 deptno Number(2) 练习三 写出emp的定义语句,其中职工号为主键,姓名、工作类型属性不可空,且工资要求不可低于800元。
上机练习一 目标:熟练掌握SQL语句及SQL PLUS命令。 练习内容: 把练习二中的后两张表,用SQL PLUS在数据库中创建,并把创建表的语法保存到文件create_xxx(xxx用你的姓名拼音缩写代替)中;表结构根据数据自行定义。 往表中插入数据,数据在练习二中已给出。 试验练习二中的各习题的语句及结果,保存到文件select_xxx中。
实验报告要求 以表格形式给出两张表的结构定义说明; 写出创建表的语法; 写出插入数据的语句,要求每个表写一句即可; 写出经上机验证后的练习题的语句和执行结果。
第四章 练习一 游标 1、假设已存在表bonuss(empno,bonus),要求从emp表中取出sal及comm的值,按下列公式计算红利,并写入bonus表中: 红利(bonus)=sal*50%+comm*50%。 要求:使用游标。 1)、用直到型循环实现; 2)、用FOR循环实现。
第四章 练习一 游标 2、找出工资最高的员工所在部门,并给该部门所有员工的工资中增加工龄补贴,每年增加$15。要求显示部门名称以及每位员工的姓名、工龄、工龄补贴的金额。 提示:工龄是当前日期减去参加工作日期后,折算成年数,可四舍五入。 (请复习相关函数) 要求:使用带参数的游标进行处理。
练习二 例外处理 遍历emp表,并显示员工的姓名信息。自定义一个例外事件,当ename=‘KING’时,显示一个例外信息“He is a president.”
练习三 存储过程与函数 建立存储过程,它带有一个参数:学号。该过程可以将指定的学生的所有课程的成绩改为90(可能不止一门课),并显示该学生的学号、原成绩、新成绩。如果学号不存在,请定义例外处理,给出必要的提示。 score(成绩表) sno cno degree 103 3-245 86 109 6-166 68 …
练习四 触发器 给teacher表编写一个(before-delete)触发器,当要在teacher表中删除一个老师,将触发该触发器。在触发器中将判断老师是否已经授课(course表中是否有其记录)。如果已经安排授课,则不删除,并激发一个例外,把不允许删除的信息返回用户;否则,提示可以删除。
上机练习二 目标:熟练掌握PL/SQL部分的各种语法。 练习内容: 编写并调试练习三、四所要求的程序。 练习三调试: 练习四: 输入一个存在的学号(课程不止一门且成绩不都等于90); 输入一个不存在的学号,看例外处理结果。 练习四: 以此类推。