数据库题:
现有a表 图书资料: 图书内码 , 书名, 书号, 定价
1001 文本1 1234 10.00
1002 文本2 1235 12.00
1003 文本3 1236 12.80
b表 进货单 : 进货单号,进货时间,进货商名称,进货实洋
2001 2/16/2012 北京新华书店 2540.00
2002 2/15/2012 上海新华书店 3560.00
2003 2/14/2012 郑州新华书店 1002.00
c表 进货记录: 进货单号,进货记录,进货折扣,进货数量,图书内码
2001 3001 0.74 60 1001
2001 3002 0.74 120 1001
2001 3003 0.61 120 1002
2001 3004 0.62 120 1003
2002 3005 0.65 50 1002
2002 3006 0.85 40 1001
d表 库存记录: 图书内码, 仓号,库存,库位
1001 1 50 2-4
1002 1 60 2-6
1001 2 30 2-7
1002 2 80 5-4
表的基本情况就是,表A.内码 = 表C.内码 = 表D.内码;表C.进货单号 = 表B.进货单号
我想得到的就是:
1,求一条SQL语句,统计2001单号中每个图书进货的总数,应返回
图书内码,书名,定价,进货数量,折扣,库存,库位,进货记录,进货单号
2. 求一条SQL语句,统计1仓库存大于零的书目,并且带上最低折扣的供应商,应返回结果: 图书内码,书名,定价,库存,库位,折扣,供应商
3,. 求一条SQL语句,统计1仓库存大于零的书目,并且带上最后一次进货的供应商,应返回结果: 图书内码,书名,定价,库存,库位,进货日期,供应商
create table tb_a (
isn int auto_increment primary key, -- 图书内码
bookname varchar(20), -- 书名
price double, -- 定价
bookno int -- 书号
);
create table tb_b(
stocknum int auto_increment primary key, -- 进货单号
time Date, -- 进货时间
stockname varchar(20), -- 进货商品名称
sumprice double -- 进货实洋
);
create table tb_c(
note int auto_increment primary key, -- 进货记录
rebate double, -- 进货折扣
amount int, -- 进货数量
stocknum int, -- 进货单号
isn int -- 图书内码
);
create table tb_d(
depotloc int auto_increment primary key, -- 库位
isn int, -- 图书内码
depotnum int, -- 库存
depotno int -- 仓号
);
-- 添加外键约束
alter table tb_c
add constraint tb_c_FK foreign key (isn) references tb_a(isn);
alter table tb_d
add constraint tb_d_FK foreign key (isn) references tb_a(isn);
alter table tb_c
add constraint tb_c_stocknum_FK foreign key (stocknum) references tb_b(stocknum);
-- 插入tb_a 表的数据
insert into tb_a(isn,bookname,price,bookno) values(1001,'文本1','10.00',1234);
insert into tb_a(isn,bookname,price,bookno) values(1002,'文本2','12.00',1235);
insert into tb_a(isn,bookname,price,bookno) values(1003,'文本3','12.80',1236);
-- 插入tb_b 表的数据
insert into tb_b(stocknum,time,stockname,sumprice) values(2001,'2012-02-16','北京新华书店',2540.00);
insert into tb_b(stocknum,time,stockname,sumprice) values(2002,'2012-02-15','上海新华书店',540.00);
insert into tb_b(stocknum,time,stockname,sumprice) values(2003,'2012-02-14','郑州新华书店',1540.00);
-- 插入tb_c 表的数据
insert into tb_c(note,rebate,amount,stocknum,isn) values(3001,0.74,60,2001,1001);
insert into tb_c(note,rebate,amount,stocknum,isn) values(3002,0.74,100,2001,1001);
insert into tb_c(note,rebate,amount,stocknum,isn) values(3003,0.61,120,2001,1002);
insert into tb_c(note,rebate,amount,stocknum,isn) values(3004,0.62,120,2001,1003);
insert into tb_c(note,rebate,amount,stocknum,isn) values(3005,0.65,50,2002,1002);
insert into tb_c(note,rebate,amount,stocknum,isn) values(3006,0.85,40,2002,1001);
-- 插入tb_d 表的数据
insert into tb_d(depotloc,isn,depotnum,depotno) values(24,1001,50,1);
insert into tb_d(depotloc,isn,depotnum,depotno) values(26,1002,60,1);
insert into tb_d(depotloc,isn,depotnum,depotno) values(27,1001,30,2);
insert into tb_d(depotloc,isn,depotnum,depotno) values(54,1002,80,2);
__________________________
表的基本情况就是,表A.内码 = 表C.内码 = 表D.内码;表C.进货单号 = 表B.进货单号
1,求一条SQL语句,统计2001单号中每个图书进货的总数,应返回
图书内码,书名,定价,进货数量,折扣,库存,库位,进货记录,进货单号
select tb_c.stocknum,tb_a.isn,tb_a.bookname,tb_a.price,tb_c.amount,tb_c.rebate,tb_d.depotnum,tb_d.depotloc,tb_c.note
from tb_c left join tb_a on (tb_c.isn=tb_a.isn)
left join tb_d on (tb_c.isn=tb_d.isn)
where tb_c.stocknum=2001;
select tb_c.stocknum '单号',tb_a.isn '图书内码',tb_a.bookname '书名',tb_a.price '定价',tb_c.amount '数量',tb_c.rebate '折扣',
tb_d.depotnum '库存',tb_d.depotloc '库位',tb_c.note '库存记录'
from tb_c left join tb_a on (tb_c.isn=tb_a.isn)
left join tb_d on (tb_c.isn=tb_d.isn)
where tb_c.stocknum=2001;
____________________________________
2. 求一条SQL语句,统计1仓库存大于零的书目,并且带上最低折扣的供应商,应返回结果:
图书内码,书名,定价,库存,库位,折扣,供应商
___________________
select tb_d.depotno,tb_a.isn,tb_a.bookname,tb_a.price,
tb_d.depotnum,tb_d.depotloc,
tb_c.rebate,
tb_b.stockname
from tb_d left join tb_a on (tb_a.isn=tb_d.isn)
left join tb_c on (tb_c.isn=tb_d.isn)
left join tb_b on (tb_c.stocknum = tb_b.stocknum )
where tb_d.depotno=1 and tb_d.depotnum>1;
3, 求一条SQL语句,统计1号仓库存大于零的书目,并且带上最后一次进货的供应商,应返回结果:
图书内码,书名,定价,库存,库位,进货日期,供应商
select tb_d.depotno,tb_d.depotnum,tb_d.depotloc,
tb_a.isn,tb_a.bookname,tb_a.price,
tb_b.time,tb_b.stockname
from tb_d left join tb_a on (tb_a.isn=tb_d.isn)
left join tb_b on tb_b.stocknum
where tb_d.depotno=1 and tb_d.depotnum>1;
下面是一个高手的回答:flyingFish211 | 十五级
Try this
1,求一条SQL语句,统计2001单号中每个图书进货的总数,应返回
图书内码,书名,定价,进货数量,折扣,库存,库位,进货记录,进货单号
SELECT c.图书内码, a.书名, a.定价, c.进货数量, c.进货折扣, d. 库存, d.库位,c.进货记录, c.进货单号
FROM c LEFT JOIN a on c.图书内码 = a.图书内码
LEFT JOIN d on c.图书内码 = d.图书内码
WHERE 进货单号 = '2001'
2. 求一条SQL语句,统计1仓库存大于零的书目,并且带上最低折扣的供应商,应返回结果: 图书内码,书名,定价,库存,库位,折扣,供应商
SELECT d.图书内码, a.书名,a.定价, d.库存,d.库位,c.进货折扣, b.进货商名称
FROM d LEFT JOIN a ON a.图书内码 = d.图书内码
LEFT JOIN c ON c.图书内码 = d.图书内码
LEFT JOIN b ON c.进货单号 = b.进货单号
WHERE 仓号 = 1 AND 库存 > 1
3,. 求一条SQL语句,统计1仓库存大于零的书目,并且带上最后一次进货的供应商,应返回结果: 图书内码,书名,定价,库存,库位,进货日期,供应商
SELECT d.图书内码, a.书名,a.定价, d.库存,d.库位,b.进货时间, (SELECT 进货商名称 from b where 进货时间 in(select max(进货时间) from b)
FROM d LEFT JOIN a ON a.图书内码 = d.图书内码
LEFT JOIN b ON c.进货单号 = b.进货单号
WHERE 仓号 = 1 AND 库存 > 1