图书销售系统
-
根据图书销售系统关系模式设计,创建表 A-1 至表 A-6
表A-1 CUSTOMERS 字段名 数据类型 长度 约束 说明 customer_id NUMBER 4 PRIMARY KEY 客户编号 name CHAR 20 NOT NULL 客户名称 phone VARCHAR2 50 NOT NULL 电话 email VARCHAR2 50 Email address VARCHAR2 200 地址 code VARCHAR2 10 邮政编码 表A-2 PUBLISHERS 字段名 数据类型 长度 约束 说明 publisher_id NUMBER 2 PRIMARY KEY 出版社号 name VARCHAR2 50 出版社名 contact CHAR 10 联系人 phone VARCHAR2 50 电话 表A-3 BOOKS 字段名 数据类型 长度 约束 说明 ISBN VARCHAR2 50 PRIMARY KEY 图书号 title VARCHAR2 50 图书名 author VARCHAR2 50 作者 pubdate DATE 出版日期 publisher_id NUMBER 2 FOREIGN KEY 出版社 ID cost NUMBER 6,2 批发(大于 10 本)价格 retail NUMBER 6,2 零售价格 category VARCHAR2 50 图书类型 表A-4 ORDERS 字段名 数据类型 长度 约束 说明 order_id NUMBER 4 PRIMARY KEY 订单号 customer_id NUMBER 4 FOREIGN KEY 顾客号 orderdate DATE NOT NULL 订货日期 shipdate DATE 发货日期 shipaddress VARCHAR2 200 发货地址 shipcode VARCHAR2 10 发货邮政编码 表A-5 ORDERITEM 字段名 数据类型 长度 约束 说明 order_id NUMBER 4 FOREIGN KEY 订单号 item_id NUMBER 4 订单明细号 ISBN VARCHAR2 50 NOT NULL 图书编号 quantity NUMBER 4 图书数量 表A-6 PROMOTION 字段名 数据类型 长度 约束 说明 gift_id NUMBER 2 礼品编号 name CHAR 20 PRIMARY KEY 礼品名称 minretail NUMBER 5,2 NOT NULL 图书最低价 maxretial NUMBER 5,2 图书最高价 create table customers ( customer_id number(4) primary key, name char(20) not null, phone varchar2(50) not null, email varchar2(50), address varchar2(200), code varchar2(10) ); create table publishers ( publisher_id number(2) primary key, name varchar2(50), contact char(10), phone varchar2(50) ); create table books ( isbn varchar2(50) primary key, title varchar2(50), author varchar2(50), pubdate date, publisher_id number(2), cost number(6, 2), retail number(6, 2), category varchar2(50) ); alter table books add constraint fk_books_publisher_id foreign key (publisher_id) references publishers (publisher_id); create table orders ( order_id number(4) primary key, customer_id number(4), orderdate date not null, shipdate date, shipaddress varchar2(200), shipcode varchar2(10) ); alter table orders add constraint fk_orders_customer_id foreign key (customer_id) references customers (customer_id); create table orderitem ( order_id number(4), item_id number(4), isbn varchar2(50) not null, quantity number(4) ); alter table orderitem add constraint fk_orderitem_order_id foreign key (order_id) references orders (order_id); create table promotion ( gift_id number(2), name char(20) primary key, minretail number(5, 2) not null, maxretial number(5, 2) );
-
将表 A-7 至表 A-12 中的数据插入数据库的相应表中。
表A-7 CUSTOMERS customer_id name phone email address code 1 王牧 83823422 Wangmu@sina.com 北京 110010 2 李青 83824566 Liqing@sina.com 大连 116023 表A-8 PUBLISHERS publisher_id name contact Phone 1 电子工业出版社 张芳 56231234 2 机械工业出版社 孙翔 89673456 表A-9 BOOKS ISBN title author pubdate publisher_id cost retail category 978-7-121-18619-8 文件化基础 王澜 2010-1-1 2 35 28 管理 978-7-122-18619-8 Oracle 孙风栋 2011-2-1 1 40 32 计算机 表A-10 ORDERS order_id customer_id orderdate shipdate shipaddress shipcode 1000 1 2013-2-1 2013-2-5 大连 116023 1001 2 2013-3-1 2013-3-10 大连 116023 表A-11 ORDERITEM order_id item_id ISBN quantity 1000 1 978-7-121-18619-8 5 1000 2 978-7-122-18619-8 20 1001 1 978-7-121-18619-8 15 表A-12 PROMOTION gift_id name minretail maxretial 1 签字笔 100 150 2 笔记本 150 300 3 保温杯 300 500 insert into customers values (1, '王牧', '83823422', 'Wangmu@sina.com', '北京', '110010'); insert into customers values (2, '李青', '83824566', 'Liqing@sina.com', '大连', '116023'); insert into publishers values (1, '电子工业出版社', '张芳', '56231234'); insert into publishers values (2, '机械工业出版社', '孙翔', '89673456'); insert into books values ('978-7-121-18619-8', '文件化基础', '王澜', to_date('2010-1-1', 'YYYY-MM-DD'), 2, 35, 28, '管理'); insert into books values ('978-7-122-18619-8', 'Oracle', '孙风栋', to_date('2011-2-1', 'YYYY-MM-DD'), 1, 40, 32, '计算机'); insert into orders values (1000, 1, to_date('2013-2-1', 'YYYY-MM-DD'), to_date('2013-2-5', 'YYYY-MM-DD'), '大连', '116023'); insert into orders values (1001, 2, to_date('2013-3-1', 'YYYY-MM-DD'), to_date('2013-3-10', 'YYYY-MM-DD'), '大连', '116023'); insert into orderitem values (1000, 1, '978-7-121-18619-8', 5); insert into orderitem values (1000, 2, '978-7-122-18619-8', 20); insert into orderitem values (1001, 1, '978-7-121-18619-8', 15); insert into promotion values (1, '签字笔', 100, 150); insert into promotion values (2, '笔记本', 150, 300); insert into promotion values (3, '保温杯', 300, 500);
-
将 ISBN 为 978-7-121-18619-8 的图书的零售价格(retail)修改为 30。
-
将订单号为 1000 的订单的发货日期修改为“2013-2-2”。
-
查询 BOOKS 表中包含的所有图书列表。
-
列出 BOOKS 表中有图书类型非空的图书书名。
-
列出 BOOKS 表中每本书的书名和出版日期,对 pubdate 字段使用 Publication Date 列标题。
-
列出 CUSTOMERS 表中每一个客户的客户号及他们所在的地址。
-
创建一个包含各个出版社的名称、联系人及出版社电话号码的列表。其中,联系人的列在显示的结果中重命名为 Contact Person。
-
查询下达了订单的每一个客户的客户号。
-
查询 2013 年 3 月 1 日之后发货的订单。
-
查询居住在北京或大连的客户,将结果按姓名的升序排列。
-
列出姓“王”的作者编写的所有图书信息,并将结果按姓名降序排序。
-
查询“儿童”类和“烹饪”类的所有图书。
-
查询书名的第二个字母是“A”、第四个字母是“N”的图书信息。
-
查询电子工业出版社在 2012 年出版的所有“计算机”类图书的名称。
-
查询图书名称、出版社名称、出版社联系人的名称和电话号码。
-
查询当前还没有发货的订单信息及下达订单的用户名,查询结果按下达订单日期排序。
-
查询已经购买了“计算机”类图书的所有人的客户号和姓名。
-
查询“王牧”购买的图书的 ISBN 以及书名。
-
查询订购图书“Oracle 数据库基础”的客户将收到什么样的礼品。
select c.name, p.name from ( select t1.order_id, sum(t1.总价) 订单总价 from ( select o1.order_id, sum(o1.quantity) * (case when sum(o1.quantity) > 10 then b.cost else b.retail end) 总价 from orderitem o1 join books b on o1.isbn = b.isbn group by o1.order_id, b.cost, b.retail ) t1 group by t1.order_id ) t2, promotion p, orders o1, customers c, orderitem o2, books b2 where t2.订单总价 between p.minretail and p.maxretial and t2.order_id = o1.order_id and o1.customer_id = c.customer_id and o1.order_id = o2.order_id and o2.isbn = b2.isbn and b2.title = 'Oracle';
-
确定客户“张扬”订购的图书的作者。
-
查询 CUSTOMERS 表中的每一个客户所下达的订单数量。
-
查询价格低于同一种类图书的平均价格的图书的信息。
-
查询每个出版社出版图书的平均价格、最高价格、最低价格。
-
统计每个客户购买图书的数量及总价钱。
select customer_id, name, sum(总数量), sum(订单总价) from ( select c2.customer_id, c2.name, t2.* from ( select t1.order_id, sum(t1.数量) 总数量, sum(t1.总价) 订单总价 from ( select o1.order_id, sum(o1.quantity) 数量, sum(o1.quantity) * (case when sum(o1.quantity) > 10 then b.cost else b.retail end) 总价 from orderitem o1 join books b on o1.isbn = b.isbn group by o1.order_id, b.cost, b.retail ) t1 group by t1.order_id ) t2, orders o, customers c2 where t2.order_id = o.order_id and o.customer_id = c2.customer_id ) group by customer_id, name;