数据库图书select语句

数据库题:
现有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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验四视图、数据控制与嵌入式SQL语言实验 基于实验一建立的“图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。具体实验内容如下: 1、视图定义与查询实验 ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还日期、实际还书日期和过期天数等属性,其条件是所有借书已过期的读者和借书情况(假定借阅期为60天); ② 根据上述定义的视图,在查询分析器中用语句完成如下查询: A:通过视图View1查询书库中藏书的情况; B:通过视图View2查询借书过期的读者和借书情况及罚款金额(假定超期罚款标准为1元/天); ③ 在查询分析器中用SQL语句来创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。 2、数据控制实验 ① 假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,试将查询图书表的权限由管理员授权给U1, 以U1用户的身份重新登录系统后,再把权限授予给U2; ② 系统管理员把插入数据给借阅表的权限授予给U3; ③ 系统管理员把添加图书数据的权限授予给U4; ④ 系统管理员把修改读者数据信息的权限授予给U5; ⑤ 将U1访问图书表的权限收回; 3、嵌入式SQL语言实验 ① 用VB建立一个工程,在对话框Form1上添加一些访问数据库和显示数据的控件,并通过ODBC建立与数据库Book_Reader_DB的连接; ② 在Form1上添加一个按钮Button1,对Button1添加一个点击事件(双击按钮Button1即可进入源代码输入界面),在事件上添加一些访问数据库中表对象或视图对象的SQL语句,运行工程,即可将满足要求的记录显示在界面的显示数据的控件上。换用不同的SQL语句,检查其执行结果。 上述每项实验内容相应的实验步骤必须进行详细的记录,并将其整理后写在实验报告中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值