版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
blogs.eom/zhenyulu/articles/3
30494.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
答:
(1)^SNO9jNO='Jl'(SPJ))
(2)ANO(bjNO二、ji、八PNO='PI、(SPJ))
兀SNO9JNO=,J1,八COLOR。!^(P><SPJ))
(3)
(4)
兀JNO(')一兀JNO(。5丫=天津'(S)><SPJ><分。乙。7?=‘红色’(0))
(5)兀PNO,JNO(SPJ)+兀PNO9SNO='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,Sloe)的
最小函数依赖集如下:Sno—Sname,Sno^Sbirth,Sno^Class,
Class—Dept,Dept—Sloe
传递依赖如下:
由于Sno-Class,ClassVSno,Class^Dept
所以Sno与Dept之间存在着传递函数依赖。
由于Sno-Dept,Dept,Sno,Dept—Sloc
所以Sno与Sloe之间存在着传递函数依赖。
由于Class^Dept,Dept,Class,Dept-Sloe
所以Class与Sloe之间存在着传递函数依赖。
(b)、班级C(Class,Major,Dept,Cnum,Cyear)的最小函
数依赖集如下:
Class—Major,Class^Cnum,ClassfCyear,Major
—Dept,
(Major,Cyear)—Class
由于Class-Major,Major'Class,Major^Dept
所以Class与Dept之间存在着传递函数依赖。
(c)、系D(Dept,Dno,Office,Dnum)的最小函数依赖集如下:
Dept—Dno,DnolDept,Dno^Office,Dno^Dnum
根据上述函数依赖可知,Dept与Office,Dept与Dnum之
间不存在传递依赖。
(d)、学会P(Pname,Pyear,Paddr,Pnum)的最小函数依赖
集如下:
Pname^Pyear,Pname^Paddr,Pname^Pnum
该模式不存在传递依赖。
(e)、学生-学会SP的最小函数依赖集如下:
(Sno,Pname)fSPyear
(3)各关系模式的候选码、外部码,全码如下:
A、学生S候选码:Sno;外部码:Dept、Class;无全码
B、班级C候选码:Class和(Major,Cyear);外部码:Dept;
无全码
C、系D候选码:Dept或Dn。;无外部码;无全码
D、学会P候选码:Pname;无外部码;无全码
学生一学会SP候选码:(Sno,Pname)外部码:Sno,Pname;
无全码
23.试由amstrong公理系统推导出下面三条推理规则:
(1)合并规则:若X-乙X-Y,则有X-YZ
(2)伪传递规则:由X-Y,WY-Z有XW-Z
(3)分解规则:X-Y,Z包含于Y,有X-Z
证明:
(1)已知X-乙由增广律知XY-Y乙又因为X-Y,可得XX
一XY-YZ,最后根据传递律得X-YZ。
(2)已知X-Y,据增广律得XW-WY,因为WY-乙所以
XW-WY-乙通过传递律可知XW-Z。
(3)已知Z包含于丫,根据自反律知Y-Z,又因为X-Y,
所以由传递律可得X-Z。
第四章
5.请从表EMP中查找工资低于2000的雇员的姓名、工作、工
资,并按工资降序排列。
selectename,job,salfromempwheresal<2000orderbysal
desc;
6.请从表中查询工作是CLERK的所有人的姓名、工资、部门
号、部门名称以及部门地址的信息。
selectename,sal,emp.deptno,dname,locfromemp.deptwhere
emp.deptno=dept.deptnoandjob='CLERK';
7.查询表EMP中所有的工资大于等于2000的雇员姓名和他的
经理的名字。
selecta.ename,b.enamefromempa,empbwhere
a.mgr=b.empnoanda.sal>=2000;
8.在表EMP中查询所有工资高于JONES的所有雇员姓名、工
作和工资。
selectename,job,salfromempwheresal>(selectsalfromemp
whereename=,JONES,);
9.列出没有对应部门表信息的所有雇员的姓名、工作以及部门
号。
selectename,job,deptnofromempwheredeptnonotin(select
deptnofromdept);
10.查找工资在1000〜3000之间的雇员所在部门的所有人员信
息
select*fromempwheredeptnoin(selectdistinctdeptnofrom
empwheresalbetween1000and3000);
11.查询列出来公司就职时间超过24年的员工名单
selectenamefromempwhere
hiredate<=add_months(sysdate,-288);
12.查询显示每个雇员加入公司的准确时间,按XXXX年XX月XX
日时分秒显示。
selectename,to_char(hiredate,'yyyy-mm-ddhh24:mi:ss')from
emp;
13.查询所有81年7月1日以前来的员工姓名、工资、所属部
口的名字
selectename,sal,dnamefromemp,deptwhere
emp.deptno=dept.deptnoand
hiredate<=to_date(l1981-07-01'/yvyy-mm-dd');
14.查询公司中按年份月份统计各地的录用职工数量
selectto_char(hiredate,'yyyy-mm'),loc,count(*)fromemp,dept
whereemp.deptno=dept.deptno
groupbyto_char(hiredate,'yyyy-mm'),loc;
15.查询部门平均工资最高的部门名称和最低的部门名称
selectdnamefromdeptwheredeptno=(selectdeptnofrom
(selectdeptnofromempgroupbydeptnoorderbyavg(sal))
whererownum<=1)
unionallselectdnamefromdeptwheredeptno=(selectdeptno
from(selectdeptnofromempgroupbydeptnoorderby
avg(sal)desc)whererownum<=1);
第五章
5.对每一个雇员,显示employee_id、last_name、salary利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
WHERElastnameLIKE'J%'
ORlastnameLIKE'M%'
ORlast_nameLIKE'A%'
ORDERBYlast_name;
7.对每一个雇员,显示其last_name,并计算从雇员受雇日期到今
天的月数,列标签M0NTHS_W0RKEDo按受雇月数排序结果,
四舍五入月数到最靠近的整数月。
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-
LAST_NAMEHIRE_DATEDAY
Grant24-MAY-99MONDAY
Ernst21-MAY-91TUESDAY
Mourgos16-NOV-99TUESDAY
Taylor24-MAR-98TUESDAY
Rajs17-OCT-95TUESDAY
Gietz07-JUN-94TUESDAY
Higgins07-JUN-94TUESDAY
King17-JUN-87WEDNESDAY
DeHaan13-JAN-93WEDNESDAY
Davies29-JAN-97WEDNESDAY
Hunold03-JAN-90WEDNESDAY
Kochhar21-SEP-89THURSDAY
Whalen17-SEP-87THURSDAY
Vargas09-JUL-98THURSDAY
Matos15-MAR-98SUNDAY
第八章
5.
CREATEVIEWVW_DEPT_SUM(DEPT_NAME,EMP_COUNT,
MINSAL,MAXSAL,AVGSAL)
AS
SELECTdname,count(empno),min(sal),max(sal),avg(sal)
FROMdeptdleftjoinempeone.deptno=d.deptno
GROUPBYdname
6.
CREATEVIEWVW_EMP_AVG
AS
SELECTe.ename,e.sal,d-dname,s.avgsal
FROMempe,(selectdeptno,AVG(sal)avgsalfromempGROUP
BYdeptno)s,deptd
WHEREe.deptno=s.deptnoANDs.deptno=d.deptnoAND
e.sal>s.avgsal
第九章
10、
declare
typeemp_table_typeistableofemp%rowtype;
emp_tableemp_tab1e_type;
begin
selecte.*bulkcollectintoemp_table
fromempe,deptd
wheree.deptno=d.deptnoandd.dname='&dname';
foriin1..emp_table.countloop
dbms_output.put_line(emp_table(i).empno|I'II
emp_table(i).ename|I'IIemp_table(i).hiredate
Ill'llemp_table(i).deptno);
ENDLOOP;
end;
11、
declare
v_salaryemp.sal%type;
v_addsalnumber;
begin
selectsalintov_salaryfromemp
whereempno=&empno;
dbms_output.put_line(,原工资:*||v_salary);
ifv_salary>10000then
v_addsal:=0.1;
elsifv_salary>5000then
v_addsal:=0.2;
else
v_addsal:=0.3;
endif;
updateemp
setsal=sal*(l+v_addsal)
whereempno=&empno;
selectsalintov_salaryfromemp
whereempno=&empno;
dbms_output.put_line「增长后工资:*||v_salary);
end;
12、创建表:
createtabletest(
columnlnumber(2),
column2char(2),
columnsdate
);
简单循环:
declare
inumber:=0;
begin
loop
insertintotest
values(1+iAchr(97+i),sysdate+i);
i:=i+l;
exitwheni=10;
endloop;
commit;
end;
WHILE循环:
declare
inumber:=0;
begin
whilei<10loop
insertintotest
values(1+izchr(97+i),sysdate+i);
i:=i+l;
endloop;
commit;
end;
FOR循环:
declare
inumber:=0;
begin
foriin0..9loop
insertintotest
values(1+i,chr(97+i),sysdate+i);
endloop;
commit;
end;
第十一章
9、编写一个数据包,它有两个函数和两个过程以操作"emp"表。
该数据包要执行的任务为:
a)插入一个新雇员;删除一个现有雇员;显示指定雇员的整体
薪水(薪水+佣金);显示指定雇员所在部门名称。
createorreplacepackageemppackas
procedureinsrec(pempnoemp.empno%type,pename
emp.ename%type,
pjobemp.job%type,pmgremp.mgr%type,
phiredateemp.hiredate%type,psalemp.sal%type,
pcommm%type,pdeptnoemp.deptno%type);
proceduredelrec(pempnoinnumber);
functionselsal(pempnonumber)returnnumber;
functionseldname(pempnonumber)returnvarchar2;
end;
/
createorreplacepackagebodyemppackas
procedureinsrec(pempnoemp.empno%type,pename
emp.ename%type,
pjobemp.job%type,pmgremp.mgr%type,
phiredateemp.hiredate%type,psalemp.sal%type,
pcommm%type,pdeptnoemp.deptno%type)
is
begin
insertintoempvalues(pempno,pename,pjob,pmgr,phiredate,
psal,pcomm,pdeptno);
dbms_output.put_line(1recordiscreated.);
endinsrec;
proceduredelrec(pempnoinnumber)
is
begin
deletefromempwhereempno=pempno;
dbms_output.put_line(1recordisdeleted.);
enddelrec;
functionselsal(pempnonumber)returnnumber
is
vtotalsalnumber;
begin
selectnvl(sal,0)+nvl(comm,0)intovtotalsal
fromemp
whereempno=pempno;
returnvtotalsal;
endselsal;
functionseldname(pempnonumber)returnvarchar2
is
vdnamedept.dname%type;
begin
selectdnameintovdname
fromemp.dept
whereempno=pempnoandemp.deptno=dept.deptno;
returnvdname;
endseldname;
end;
/
--执行包中的过程和函数
execute
emppack.insrec(1111,goldens,manager,7698,2003-01-18,2000
,400,30);
executeemppack.delrec(1111);
declare
salarynumber;
begin
salary:=emppack.selsal(7369);
dbms_output.put_line(totalsalaryis||salary);
end;
declare
departmentvarchar2(30);
begin
department:=emppack.seldname(7369);
dbms_output.put_line(departmentnameis||department);
end;
/
b)编写一个函数以检查所指定雇员的薪水是否有效范围内。不
同职位的薪水范围为:
designationraise
clerk1500-2500
salesma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化转型对传统行业的影响
- 二零二五年度劈开砖售后服务保障合同
- 2025年度钢构预制构件生产与供货合同协议范本
- 第5单元 走向近代【知识清单】-2023-2024学年九年级历史上学期期中考点大串讲(部编版)
- 2025年度个人技术服务合同(保密协议)2篇
- 黑龙江省哈尔滨市高三第二次模拟考试语文试卷(含答案)
- 2025年度个人抵押贷款担保合同
- 2025年度个人房产交易风险评估与管理合同4篇
- 高中化学知识点
- 2025年度个人房产抵押投资合作合同协议
- 道德经全文及注释
- 2024中考考前地理冲刺卷及答案(含答题卡)
- 多子女赡养老人协议书范文
- 安踏运动品牌营销策略研究
- 彩票市场销售计划书
- 骨科抗菌药物应用分析报告
- 支付行业反洗钱与反恐怖融资
- 百词斩托福词汇excel版本
- 基础设施绿色施工技术研究
- 宝钢BQB 481-2023全工艺冷轧中频无取向电工钢带文件
- 车辆定损情况确认书范本
评论
0/150
提交评论