为某公司开发一个用于管理产品发运的数据库。经调查分析,并经简化处理后,得到的数据项列表如下: 发运单号 ydh CHAR(6),发运方式fs CHAR(4),发货日期fhrq DATEs 运杂项目xm CHAR(4),运杂费用fy NUMBER,货品名hp

admin2009-07-15  45

问题 为某公司开发一个用于管理产品发运的数据库。经调查分析,并经简化处理后,得到的数据项列表如下:
发运单号 ydh CHAR(6),发运方式fs CHAR(4),发货日期fhrq DATEs
运杂项目xm CHAR(4),运杂费用fy NUMBER,货品名hpm CHAR(10),
单价di NUMBER,重量zl NUMBER,客户号khh CHAR(8);
客户名称khm CHAR(20),客户地址addr CHAR(20)。
确定以发货单(fhD)、客户(kh)、货品明细(hpms)、运杂费(yzf)为信息实体,且它们的对应关系如下:
一个发货单可对应多个货品明细,它们之间通过发运单号(ydh)关联。
一个发货单可对应多个运杂费,它们之间通过发运单号(ydh)关联。
一个客户可对应多个发货单,它们之间通过客户号(khh)关联。
要求:
(1)设计产品发运数据库的逻辑结构,给出相应的表名、表的属性名(数据类型可省)、主键、外键。
(2)给出下列查询的SQL语句:
①查询2001年2月28日本公司曾给哪些客户发运货物,输出这些客户的名称(khm)和地址 (addr)。
②查询2001年2月28日通过铁路(即fhd.fs=’铁路’)发运货物的运杂费明细,输出发运单号 (ydh)、运杂项目(xm)、运杂费用(fy)。
③查询2001年2月28日发运的货物明细,输出货品名(hpm)、单价(dj)、重量(zl)、货物金额 (dj*zl)。
④查询在2001年2月1日和2001年2月28日之间,发运各种产品的总重量(按货品名(hpm)分类汇总,输出货品名(hpm)、总重量)。

选项

答案(1)产品发运数据库的逻辑结构 fdh (ydh,khh,fs,fhrq)主键:ydh,外键:khh kh (khh,khm,addr)主键:khh hpms (hpm,ydh,dj,zl)主键:hpm+ydh,外键:ydh yzf(xm,ydh,fy)主键:xm+ydh,外键:ydh (2)查询的SQL语句: ①SELECT kh. khm, kh.addr FROM kh, fhd WHERE kh. khh=fhd.khh AND fhd.fhrq=’2001年2月28日’ 或 SELECT khm, addr FROM kh WHERE kh. khh IN (SELECT fhd. khh FROM fhd WHERE fhd. fhrq=’2001年2月28日’) ②SELECT yzf. ydh, yzf. xm, yzf. fy FROM yzf, fhd WHERE yzf. ydh=fhd. ydh AND fhd. fhrq=’2001年2月28日’AND fhd.fs=’铁路’ 或 SELECT ydh,xm,fy FROM yzf WHERE yzf. ydh IN (SELECT fhd. ydh FROM fhd WHERE fhd. fhrq=’2001年2月28日’AND fhd. fs=’铁路’) ③SELECT hpms. hpm, hpms. dj, hpms. zl, hpms. dj* hpms. zl FROM hpms, fhd WHERE hpms. ydh=fhd.ydh AND fhd. fhrq=’2001年2月28日’ 或 SELECT hpm, dj, zl, dj*zl FROM hpms WHERE hpms. ydh IN (SELECT fhd. ydh FROM fhd WHERE fhd. fhrq=’2001年2月28日’) ④SElECT hpm, sum(zl)FROM hpms, fhd WHERE hpms. ydh=fhd. ydh AND fhd. fhrq>=’2001年2月28日’AND fhd. fhrq<=’2001年2月28日’GROUP BY hpm 或 SELECT hpm, sum(zl) FROM hpms WHERE hpms. ydh IN (SELECT fhd. ydh FROM fhd WHERE fhd. fhrq>=’2001年2月28日’ AND fhd. fhrq<= ’2001年2月28日’) GROUPBY hpm

解析
转载请注明原文地址:https://jikaoti.com/ti/oDE7FFFM
0

最新回复(0)