Oracle习题答案课后题.docx

上传人:b****3 文档编号:968480 上传时间:2022-10-14 格式:DOCX 页数:12 大小:39.15KB
下载 相关 举报
Oracle习题答案课后题.docx_第1页
第1页 / 共12页
Oracle习题答案课后题.docx_第2页
第2页 / 共12页
Oracle习题答案课后题.docx_第3页
第3页 / 共12页
Oracle习题答案课后题.docx_第4页
第4页 / 共12页
Oracle习题答案课后题.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Oracle习题答案课后题.docx

《Oracle习题答案课后题.docx》由会员分享,可在线阅读,更多相关《Oracle习题答案课后题.docx(12页珍藏版)》请在冰豆网上搜索。

Oracle习题答案课后题.docx

Oracle习题答案课后题

/articles/330494.html第一章

第二章

5、已知一个关系数据库的模式如下:

S(SNO,SNAME,SCITY)

P(PNO,PNAME,COLOR,WEIGHT)

J(JNO,JNAME,JCITY)

SPJ(SNO,PNO,JNO,QTY)

供应商S由供应商代码SNO、供应商姓名SNAME、供应商所在城市SCITY组成;零件P由零件代码PNO、零件名PNAME、颜色COLOR、重量WEIGHT组成;工程项目J由工程项目代码JNO、工程项目名JNAME、和所在城市JCITY组成;供应情况SPJ由供应商代码SNO、零件代码PNO、工程项目代码JNO、供应数量QTY组成。

用关系代数表达式表示下面的查询要求:

(1)求供应工程J1零件的供应商代码SNO

(2)求供应工程J1零件P1的供应上代码SNO

(3)求供应工程J1零件为红色的供应商代码SNO

(4)求没有使用天津供应商生产的红色零件的工程项目代码

JNO

(5)求至少用了供应商S1所供应的全部零件的工程项目代码

JNO

答:

(4)

JNO(J)—JNO(「CITY-天津'(S)SPJ「COLOR-红色'(P))

(5)PNO,JNO(SPJ)71PNOeSN0='S1'(SPJ))

第三章

22.建立一个关于系、学生、班级、学会等诸信息的关系数据库。

学生:

学号、姓名、出生年月、系名、班号、宿舍区。

班级:

班号、专业名、系名、人数、入校年份。

系:

系名、系号、系办公地点、人数。

学会:

学会名、成立年份、办公地点、人数。

语义如下:

一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。

一个系的学生住在同一宿舍区。

每个学生可参加若干学会,每个学会有若干学生。

学生参加某学会有一个入会年份。

请给出关系模式,写出每个关系模式的极小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况讨

论函数依赖是完全函数依赖,还是部分函数依赖。

指出各关系模式的候选码、外部码,有没有全码存在?

解:

(1)关系模式如下:

学生:

S(Sno,Sname,Sbirth,Dept,Class,Sloe)

班级:

C(Class,Major,Dept,Cnum,Cyear)

系:

D(Dept,Dno,Office,Dnum)

学会:

P(Pname,Pyear,Paddr,Pnum)

学生--学会SP(Sno,Pname,SPyear)

(2)每个关系模式的最小函数依赖集如下:

(a)、学生S(Sno,Sname,Sbirth,Dept,Class,Sloc)的最小函数依赖集如下:

SnoSname,SnoSbirth,SnoClass,ClassDept,DeptSloc

传递依赖如下:

由于SnoClass,Class\Sno,ClassDept

所以Sno与Dept之间存在着传递函数依赖。

由于SnoDept,Dept\Sno,DeptSloc

所以Sno与Sloc之间存在着传递函数依赖。

由于ClassDept,Dept\Class,DeptSloc

所以Class与Sloc之间存在着传递函数依赖。

(b)、班级C(Class,Major,Dept,Cnum,Cyear)的最小函数依赖集如下:

ClassMajor,ClassCnum,ClassCyear,Major

Dept,

(Major,Cyear)fClass

由于ClassMajor,Major\Class,MajorDept

所以Class与Dept之间存在着传递函数依赖。

(c)、系D(Dept,Dno,Office,Dnum)的最小函数依赖集如下:

DeptDno,DnoDept,DnoOffice,DnoDnum

根据上述函数依赖可知,Dept与Office,Dept与Dnum之

间不存在传递依赖。

(d)、学会P(Pname,Pyear,Paddr,Pnum)的最小函数依赖集如下:

PnamePyear,PnamePaddr,PnamePnum

该模式不存在传递依赖。

(e)、学生--学会SP的最小函数依赖集如下:

(Sno,Pname)fSPyear

⑶各关系模式的候选码、外部码,全码如下:

A、学生S候选码:

Sno;外部码:

Dept、Class;无全码

B、班级C候选码:

Class和(Major,Cyear);外部码:

Dept;无全码

C、系D候选码:

Dept或Dno;无外部码;无全码

D、学会P候选码:

Pname;无外部码;无全码

学生--学会SP候选码:

(Sno,Pname)夕卜部码:

Sno,Pname;无全码

23.试由amstrong公理系统推导出下面三条推理规则:

(1)合并规则:

若XfZ,XfY,则有XfYZ

(2)伪传递规则:

由XfY,WYfZ有XWfZ

(3)分解规则:

XfY,Z包含于Y,有XfZ

证明:

(1)已知XfZ,由增广律知XYfYZ,又因为XfY,可得XXfXYfYZ,最后根据传递律得XfYZo

(2)已知XfY,据增广律得XWfWY,因为WYf乙所以

XWfWYf乙通过传递律可知XWf乙

(3)已知Z包含于Y,根据自反律知Yf乙又因为XfY,所以由传递律可得XfZo

第四章

5.请从表EMP中查找工资低于2000的雇员的姓名、工作、工

资,并按工资降序排列。

selectename,job,salfromempwheresal<2000orderbysal

desc;

6.请从表中查询工作是CLERK的所有人的姓名、工资、部门

号、部门名称以及部门地址的信息。

selectename,sal,emp.deptno,dname,locfromemp,deptwhereemp.deptno=dept.deptnoandjob='CLERK';

7.查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。

selecta.ename,b.enamefromempa,empbwherea.mgr=b.empnoanda.sal>=2000;

8.在表EMP中查询所有工资高于JONES的所有雇员姓名、作和工资。

selectename,job,salfromempwheresal>(selectsalfromempwhereename='JONES');

9.列出没有对应部门表信息的所有雇员的姓名、工作以及部门号。

selectename,job,deptnofromempwheredeptnonotin(selectdeptnofromdept);

10.查找工资在1000〜3000之间的雇员所在部门的所有人员信息

select*fromempwheredeptnoin(selectdistinctdeptnofromempwheresalbetween1000and3000);

11.查询列出来公司就职时间超过24年的员工名单selectenamefromempwherehiredate<=add_months(sysdate,-288);

日时分秒显示。

selectename,to_char(hiredate,'yyyy-mm-ddhh24:

mi:

ss')fromemp;

13.查询所有81年7月1日以前来的员工姓名、工资、所属部门的名字

selectename,sal,dnamefromemp,deptwhereemp.deptno=dept.deptnoandhiredate<=to_date(‘1-90871-01','y-ymymy-dd');

14.查询公司中按年份月份统计各地的录用职工数量selectto_char(hiredate,'yyyy-mm'),loc,count(*)fromemp,deptwhereemp.deptno=dept.deptnogroupbyto_char(hiredate,'yyyy-mm'),loc;

15.查询部门平均工资最高的部门名称和最低的部门名称selectdnamefromdeptwheredeptno=(selectdeptnofrom(selectdeptnofromempgroupbydeptnoorderbyavg(sal))whererownum<=1)unionallselectdnamefromdeptwheredeptno=(selectdeptnofrom(selectdeptnofromempgroupbydeptnoorderbyavg(sal)desc)whererownum<=1);

第五章

5.对每一个雇员,显示employee_id、last_namesalary和salary增加15%,并且表示成整数,列标签显示为New_Salary

SELECTemployee_id,last_name,salary,

ROUND(salary*1.15,0)"NewSalary"

FROMemployees;

6.写一个查询用首字母大写,其它字母小写显示雇员的

last_names,显示名字的长度,对所有名字开始字母是J、A或M的雇员,给每列一个适当的标签。

用雇员的last_names排序结

果。

SELECTINITCAP(last_name)"Name",

LENGTH(last_name)"Length"

FROMemployees

WHERElast_nameLIKE'J%'

ORlast_nameLIKE'M%'

ORlast_nameLIKE'A%'

ORDERBYlast_name;

7.对每一个雇员,显示其last_name,并计算从雇员受雇日期到今天的月数,列标签MONTHS_WORKED。

按受雇月数排序结果,四舍五入月数到最靠近的整数月。

SELECTlast_name,ROUND(MONTHS_BETWEEN

(SYSDATE,hire_date))"MONTHS_WORKED

FROMemployees

ORDERBYMONTHS_BETWEEN(SYSDATE,hire_date);

8.显示last_name>hire_date和雇员开始工作的周日,列标签为

DAY,以星期一作为周的起始日排序结果。

SELECTlast_name,hire_date,

TO_CHAR(hire_date,'DAY')"DAY"

FROMemployees

ORDERBYTO_CHAR(hire_date-1,'d');

第八章

5.

CREATEVIEWVW_DEPT_SUM(DEPT_NAME,EMP_COUNT,

MINSAL,MAXSAL,AVGSAL)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1