标题:求助—关于解决Oracle多表关联查询问题
只看楼主
IT悟道
Rank: 1
来 自:中国
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-21
结帖率:100%
已结贴  问题点数:20 回复次数:3 
求助—关于解决Oracle多表关联查询问题
----------------------------------------------------以下是提供的资料,数据如果不满足查询需要可更改数据---------------------------------------------
--创建供应商信息表
create table provider_info
(
  provider_id integer primary key,
  provider_name varchar2(20),
  provider_address varchar2(20)
);


--创建货物信息表
create table bale_info
(
  bale_id integer primary key,
  bale_name varchar2(20),
  bale_bewrite varchar2(20),
  type_id integer
);


--创建供应货物信息表
create table provide_bale_info
(
  pro_id integer primary key,
  bale_amount integer,
  pro_date date,
  bale_id integer,
  provider_id integer
);



--创建货物类型表
create table bale_type_info
(
  type_id integer primary key,
  type_name varchar2(20),
  type_bewrite varchar2(20)
);



--------------------添加外键----------------------------
--FK_provider_id
alter table provide_bale_info
  add constraint FK_provider_id foreign key(provider_id)
     references provider_info(provider_id);

--FK_bale_id
alter table provide_bale_info
  add constraint FK_bale_id foreign key(bale_id)
     references bale_info(bale_id);
     
--FK_type_id
alter table bale_info
  add constraint FK_type_id foreign key(type_id)
     references bale_type_info(type_id);
 
 

---------------------------------插入数据------------------------------------
--为货物信息表插入数据
insert into bale_info values(1,'毛衣','保暖',3);
insert into bale_info values(2,'衬衣','穿着好看',3);
insert into bale_info values(3,'牙刷','能够保护牙齿',2);
insert into bale_info values(4,'口杯','大且好看',2);
insert into bale_info values(5,'毛巾','耐用',2);
insert into bale_info values(6,'mp4','音质好',4);
insert into bale_info values(7,'黄瓜','营养价值高',1);
insert into bale_info values(8,'萝卜','营养价值高',1);
insert into bale_info values(9,'白菜','营养价值高',1);

insert into bale_info values(10,'拖把','耐用好用吸水',2);
insert into bale_info values(11,'手机','功能多上网版',4);
insert into bale_info values(12,'西瓜','解渴消暑',1);
insert into bale_info values(13,'苹果','富含维生素',1);
insert into bale_info values(14,'黄瓜','可以减肥',1);


--为供应商信息表插入数据
insert into provider_info values(1,'春天百货公司','法国');
insert into provider_info values(2,'家乐福公司','美国');
insert into provider_info values(3,'北京科技电脑公司','中国北京');
insert into provider_info values(4,'高桥大市场','中国长沙');


--为供应货物信息表插入数据
insert into provide_bale_info values(1,12,to_date('2010-8-01','yyyy-mm-dd'),1,1);
insert into provide_bale_info values(2,50,to_date('2010-8-02','yyyy-mm-dd'),2,1);
insert into provide_bale_info values(3,20,to_date('2010-8-03','yyyy-mm-dd'),3,2);
insert into provide_bale_info values(4,33,to_date('2010-8-04','yyyy-mm-dd'),4,2);
insert into provide_bale_info values(5,21,to_date('2010-8-05','yyyy-mm-dd'),5,2);
insert into provide_bale_info values(6,40,to_date('2010-8-06','yyyy-mm-dd'),6,3);
insert into provide_bale_info values(7,22,to_date('2010-8-07','yyyy-mm-dd'),7,4);
insert into provide_bale_info values(8,21,to_date('2010-8-08','yyyy-mm-dd'),8,4);
insert into provide_bale_info values(9,21,to_date('2010-8-09','yyyy-mm-dd'),9,4);

insert into provide_bale_info values(10,12,to_date('2010-6-13','yyyy-mm-dd'),10,2);
insert into provide_bale_info values(11,31,to_date('2010-07-28','yyyy-mm-dd'),11,3);
insert into provide_bale_info values(12,16,to_date('2010-08-29','yyyy-mm-dd'),12,4);
insert into provide_bale_info values(13,11,to_date('2010-09-08','yyyy-mm-dd'),13,4);
insert into provide_bale_info values(14,25,to_date('2010-12-15','yyyy-mm-dd'),14,4);


--为货物类型表插入数据
insert into bale_type_info values(1,'蔬菜水果','日常消费食品');
insert into bale_type_info values(2,'日常用品','日常所需');
insert into bale_type_info values(3,'衣服裤子','衣物');
insert into bale_type_info values(4,'电子产品','电子产品,mp3,mp4');
---------------------------------------------------------------------------------------



---------------------------------------------求助的问题---------------------------------------------
1.获得至今为止交易量最小的供应商名称以及交易数量


2.获取合作最久的供应商名称,所在地址,以及首次合作时间


3.获取一次进货数量超过200的货物名称


4.获取合作最久的供应商名称,所在地址,以及首次合作时间


5. 创建一个视图显示所有供应商最后一次提供货物距离现在的间隔月数


6.    创建一个视图来显示至今为止供应数量最多的供应商名和地址


7. 创建一个视图来显示按货物类型统计各种类型产品的进货数量


8.获取一次进货数量超过200的货物名称


9.获取这一年来没有任何业务往来的供应商名称


10.获取2002年间到2006年所有进货信息,包括供应商名和货物名


11.查询地址在'南门口'的供应商的供货记录


12.获取2006年没有引进的货物名称


13.获取2006年没有引进的货物类型信息


求助各位好友帮忙解决上述问题,本人在此感谢!



搜索更多相关主题的帖子: Oracle 查询 
2010-08-24 07:50
乖乖猫
Rank: 2
等 级:论坛游民
帖 子:4
专家分:20
注 册:2010-8-24
得分:20 
1.获得至今为止交易量最小的供应商名称以及交易数量

select provider_name,bale_amount
from provide_bale_info,provider_info
where provide_bale_info.provider_id=provider_info.provider_id
and bale_amount=
(select min(bale_amount) from provide_bale_info)
/


2.获取合作最久的供应商名称,所在地址,以及首次合作时间

select provider_name,provider_address,pro_date
from provide_bale_info,provider_info
where provide_bale_info.provider_id=provider_info.provider_id
and pro_date=
(select min(pro_date) from provide_bale_info
)
/


3.获取一次进货数量超过200的货物名称

select bale_name
from bale_info
where bale_id=
(select bale_id from provide_bale_info
 where bale_amount>200)
/


4.获取合作最久的供应商名称,所在地址,以及首次合作时间

select provider_name,provider_address,pro_date
from provide_bale_info,provider_info
where provide_bale_info.provider_id=provider_info.provider_id
and pro_date=
(select min(pro_date) from provide_bale_info
)
/


5. 创建一个视图显示所有供应商最后一次提供货物距离现在的间隔月数

create view MONTH(provider_id,NUM )
as
select provider_id,months_between(sysdate,num)
from
(select provider_id,max(pro_date) num
 from provide_bale_info
 group by provider_id
)


/


6.    创建一个视图来显示至今为止供应数量最多的供应商名和地址

create view SHOW(NAME,ADDRESS)
as
select provider_name,provider_address
from provider_info
where provider_id=
(select provider_id from
    (select provider_id,sum(bale_amount) num from provide_bale_info group by provider_id)
    where num=(select max(num) from (select provider_id,sum(bale_amount) num from provide_bale_info group by provider_id)))
/


7. 创建一个视图来显示按货物类型统计各种类型产品的进货数量

create view AMOUNT(type_id,bale_amount)
as
select type_id,num
from
(select type_id,sum(bale_amount) num
 from
  (select * from provide_bale_info,bale_info
   where provide_bale_info.bale_id=bale_info.bale_id)
 group by type_id)

/


8.获取一次进货数量超过200的货物名称

select bale_name
from bale_info
where bale_id=
(select bale_id from provide_bale_info
 where bale_amount>200)
/


9.获取这一年来没有任何业务往来的供应商名称

select provider_name
from provider_info
where provider_id=
(select distinct provider_id
 from provide_bale_info
 where months_between(to_date('2010-12-31','yyyy-mm-dd'),pro_date)/12>1)
/


10.获取2002年间到2006年所有进货信息,包括供应商名和货物名

select pro_id,bale_amount,pro_date,provider_name,bale_name
 from provide_bale_info,provider_info,bale_info
where provide_bale_info.provider_id=provider_info.provider_id
 and  provide_bale_info.bale_id=bale_info.bale_id
 and  pro_date>to_date('2002-01-01','yyyy-mm-dd') and  pro_date<to_date('2006-12-31','yyyy-mm-dd')
/


11.查询地址在'南门口'的供应商的供货记录

select * from provide_bale_info
where provider_id=
(select provider_id from provider_info
 where provider_name like '南门口')
/


12.获取2006年没有引进的货物名称

select bale_name from bale_info
where bale_id not in
  (select distinct bale_id from provide_bale_info
    where pro_date between to_date('2006-01-01','yyyy-mm-dd') and to_date('2006-12-31','yyyy-mm-dd'))
/


13.获取2006年没有引进的货物类型信息

select * from bale_type_info
where type_id in
(select type_id from bale_info
where bale_id not in
  (select distinct bale_id from provide_bale_info
    where pro_date between to_date('2006-01-01','yyyy-mm-dd') and to_date('2006-12-31','yyyy-mm-dd')))
/

奋斗一晚上了,终于搞定了,希望对楼主有所帮助!本人新手,有错误或改进的希望大家多指点,谢谢!
2010-08-26 21:41
IT悟道
Rank: 1
来 自:中国
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-21
得分:0 
呵呵,写得很好! 奋斗了一晚上,你辛苦了,非常感谢!

2010-08-28 17:49
俊杰4585
Rank: 2
等 级:论坛游民
威 望:2
帖 子:45
专家分:27
注 册:2011-12-31
得分:0 
路过
2012-01-14 17:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-316638-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.693683 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved