一、 实验目的
(1) 掌握数据的插入(INSERT)、 修改(UPDATE) 和删除(DELETE) 操作。
(2) 掌握不同类型的数据查询(SELECT) 操作。
二、 实验要求
(1) 利用 INSERT 语句向图书销售系统表中插入数据。
(2) 利用 UPDATE 语句修改图书销售系统表中的数据。
(3) 利用 DELETE 语句删除图书销售系统表中的数据。
(4) 利用 SELECT 语句实现对图书销售系统数据的有条件查询、 分组查询、 连接查询、 子查询等。
三、 实验内容
(1) 以 bs 用户登录 BOOKSALES 数据库, 将下列表中的数据插入到数据库的相应表中。
(2) 将 ISBN 为 978-7-121-18619-8 的图书的零售价格(retail) 修改为 30。
(3) 将订单号为 1000 的订单的发货日期修改为“2013-2-2”。
(4) 查询 BOOKS 表中包含的所有图书列表。
(5) 列出 BOOKS 表中有图书类型非空的图书书名。
(6) 列出 BOOKS 表中每本书的书名和出版日期。 对 pubdate 字段使用 Publication Date 列标题。
(7) 列出 CUSTOMERS 表中每一个客户的客户号以及他们所在的地址。
(8) 创建一个包含各个出版社的名称、 联系人以及出版社电话号码的列表。 其中, 联系人的列在显示的结果中重命名为 Contact Person。
(9) 查询下达了订单的每一个客户的客户号。
(10) 查询 2013 年 3 月 1 日之后发货的订单。
(11) 查询居住在北京或大连的客户, 将结果按姓名的升序排列。
(12) 列出姓“王” 的作者编写的所有图书信息, 并将结果按姓名降序排序。
(13) 查询“儿童” 类和“烹饪” 类的所有图书。
(14) 查询书名的第二个字母是“A”、 第四个字母是“N” 的图书信息。
(15) 查询电子工业出版社在 2012 年出版的所有“计算机” 类图书的名称。
(16) 查询图书名称、 出版社名称、 出版社联系人的名称、 EMAIL 和电话号码。
(17)查询当前还没有发货的订单信息及下达订单的用户名, 查询结果按下达订单日期排序。
(18) 查询已经购买了“计算机” 类图书的所有人的客户号和姓名。
(19) 查询“王牧” 购买的图书的 ISBN 以及书名。
(20) 查询订购图书“Oracle 数据库基础” 的客户将收到什么样的礼品。
(21) 确定客户“张扬” 订购的图书的作者。
(22) 查询 CUSTOMERS 表中的每一个客户所下达的订单数量。
(23) 查询价格低于同一种类中其它图书的平均价格的图书的信息。
(24) 查询每个出版社出版图书的平均价格、 最高价格、 最低价格。
(25) 统计每个客户购买图书的数量及总价钱。
(26) 查询比 1 号订单中图书数量多的其它订单信息。
(27) 查询所以客户及其订购图书的信息。
(28) 查询没有订购任何图书的客户信息。
(29) 查询订购金额最高的客户信息。
(30) 查询名为“赵敏” 的客户订购图书的订单信息、 订单明细。
四、问题解答及实验结果
(1) 以 bs 用户登录 BOOKSALES 数据库, 将下列表中的数据插入到数据库的相应表中。
SQL> create sequence customers_customer_id minvalue 1 nomaxvalue increment by 1 start with 1 nocache;
SQL> insert into customers values(customers_customer_id.nextval,‘王牧’,‘83823422’,‘Wangmu@sina.com’,‘北京’,‘110010’);
SQL> insert into customers values(customers_customer_id.nextval,‘李青’,‘83824566’,‘Liqing@sina.com’,‘大连’,‘116023’);
SQL> insert into publishers values(1,‘电子工业出版社’,‘张芳’,‘56231234’);
SQL> insert into publishers values(2,‘机械工业出版社’,‘孙翔’,‘89673456’);
SQL> insert into books values(‘978-7-121-18619-8’,‘文化基础’,‘王澜’,to_date(‘2010-1-1’,‘yyyy-mm-dd’),2,35,28,‘管理’);
SQL> insert into books values(‘978-7-122-18619-8’,‘Oracle’,‘孙风栋’,to_date(‘2011-2-1’,‘yyyy-mm-dd’),1,40,32,‘计算机’);
SQL> insert into orders values(orders_order_id.nextval,3,to_date(‘2013-2-1’,‘yyyy-mm-dd’),to_date(‘2013-2-5’,‘yyyy-mm-dd’),‘大连’,‘116023’);
SQL> insert into orders values(orders_order_id.nextval,2,to_date(‘2013-3-1’,‘yyyy-mm-dd’),to_date(‘2013-3-1’,‘yyyy-mm-dd’),‘大连’,‘116023’);
SQL> insert into orderitem values(1000,1,‘978-7-121-18619-8’,5);
SQL> insert into orderitem values(1000,2,‘978-7-122-18619-8’,20);
SQL> Insert Into orderitem values(1001,1,‘978-7-121-18619-8’,15);
SQL> insert into promotion values(1,‘签字笔’,100,150);
SQL> insert into promotion values(2,‘笔记本’,150,300);
SQL> insert into promotion values(3,‘保温杯’,300,500);
(2) 将 ISBN 为 978-7-121-18619-8 的图书的零售价格(retail) 修改为 30。
SQL> update books set retail=30 where isbn=‘978-7-121-18619-8’;
(3) 将订单号为 1000 的订单的发货日期修改为“2013-2-2”。
SQL> update orders set shipdate=to_date(‘2013-2-2’,‘yyyy-mm-dd’) where order_id=1000;
(4) 查询 BOOKS 表中包含的所有图书列表。
SQL> select * from books;
(5) 列出 BOOKS 表中有图书类型非空的图书书名。
SQL> select title from books where category is not null;
(6) 列出 BOOKS 表中每本书的书名和出版日期。 对 pubdate 字段使用 Publication Date 列标题。
SQL> select title,pubdate “Publication Date” from books;
(7) 列出 CUSTOMERS 表中每一个客户的客户号以及他们所在的地址。
SQL> select customer_id,address from customers;
(8) 创建一个包含各个出版社的名称、 联系人以及出版社电话号码的列表。 其中, 联系人的列在显示的结果中重命名为 Contact Person。
SQL> select name,contact “Contact Person”,phone from publishers;
(9) 查询下达了订单的每一个客户的客户号。
SQL> select customer_id from orders where order_id is not null;
(10) 查询 2013 年 3 月 1 日之后发货的订单。
SQL> select * from orders where shipdate > to_date(‘2013-3-1’,‘yyyy-mm-dd’);
(11) 查询居住在北京或大连的客户, 将结果按姓名的升序排列。
SQL> select * from customers where address=‘大连’ or address=‘北京’ order by name;
(12) 列出姓“王” 的作者编写的所有图书信息, 并将结果按姓名降序排序。
SQL> select * from books where author like ‘王%’ order by author;
(13) 查询“儿童” 类和“烹饪” 类的所有图书。
SQL> select * from books where category=‘儿童’ or category=‘烹饪’;
(14) 查询书名的第二个字母是“A”、 第四个字母是“N” 的图书信息。
SQL> select * from books where title like ‘_A_N%’;
(15) 查询电子工业出版社在 2012 年出版的所有“计算机” 类图书的名称。
SQL> select title from books,publishers where books.publisher_id=publishers.publisher_id and name=‘电子工业出版社’ and pubdate>=to_date(‘2012-1-1’,‘YYYY -mm-dd’) and pubdate<=to_date(‘2013-1-1’,‘YYYY-mm-dd’);
(16) 查询图书名称、 出版社名称、 出版社联系人的名称、 EMAIL 和电话号码。
SQL> select title,name,contact,phone from books,publishers where books.publisher_id=publishers.publisher_id;
(17)查询当前还没有发货的订单信息及下达订单的用户名, 查询结果按下达订单日期排序。
SQL> select order_id,customers.name,orderdate,shipdate,shipaddress,shipaddress,shipcode from customers,orders where customers.customer_id=orders.customer_id and shipdate<=to_date(‘2013-3-1’,‘yyyy-mm-dd’) order by orderdate;
(18) 查询已经购买了“计算机” 类图书的所有人的客户号和姓名。
SQL> select customers.customer_id,customers.name from customers,orders,orderitem,books where customers.customer_id=orders.customer_id and orders.order_id=orderitem.r_id and orderitem.isbn=books.isbn and books.category=‘计算机’;
(19) 查询“王牧” 购买的图书的 ISBN 以及书名。
SQL> select books.isbn,books.title from customers,books,orders,orderitem where customers.customer_id=orders.customer_id and orders.order_id=orderitem.r_id and orderitem.isbn=books.isbn and customers.name=‘王牧’;
(20) 查询订购图书“Oracle 数据库基础” 的客户将收到什么样的礼品。
SQL> select books.isbn,books.title from customers,books,orders,orderitem where customers.customer_id=orders.customer_id and orders.order_id=orderitem.r_id and orderitem.isbn=books.isbn and books.title=‘Oracle’;
(21) 确定客户“张扬” 订购的图书的作者。
SQL> select order_id,customers.name,orderdate,shipdate,shipaddress,shipcode from customers,orders where customers.customer_id=orders.customer_id and shipdate<=to_date(‘2013-3-1’,‘yyyy-mm-dd’) order by orderdate;
(22) 查询 CUSTOMERS 表中的每一个客户所下达的订单数量。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(23) 查询价格低于同一种类中其它图书的平均价格的图书的信息。
SQL> select category,min(retail),max(retail),avg(retail) from books group by category;
(24) 查询每个出版社出版图书的平均价格、 最高价格、 最低价格。
SQL> select category,min(retail),max(retail),avg(retail) from books group by category;
(25) 统计每个客户购买图书的数量及总价钱。
SQL> select orders.order_id,orders.customer_id,orderitem.quantity from orders,orderitem where quantity > (select quantity from orderitem where order_id=1001 and item=1);
(26) 查询比 1 号订单中图书数量多的其它订单信息。
SQL> select order_id,sum(quantity) from orderitem group by order_id
having sum(quantity) > (select sum(quantity) from orderitem group by order_id
having order_id=1000);
(27) 查询所以客户及其订购图书的信息。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(28) 查询没有订购任何图书的客户信息。
SQL> select * from customers where customer_id not in(select customer_id from orders);
(29) 查询订购金额最高的客户信息。
SQL> select customers.customer_id,customers.name,customers.phone,customers.email,customers.address,customers.code from customers,orders,orderitem where customers.customer_id=orders.customer_id and orders.order_id=orderitem.order_id and orderitem.quantity=(select max(quantity) from orderitem);
(30) 查询名为“赵敏” 的客户订购图书的订单信息、 订单明细。
SQL> select * from orders,orderitem,customers where orders.customer_id=customers.customer_id and customers.name=‘赵敏’;
五、实验体会与收获
通过这个实验,我深入理解和掌握SQL语句的使用,提高数据库操作的能力。并且能够熟练地使用SQL语句进行数据库操作。这个实验对于学习数据库管理和SQL语句的应用非常有帮助。能够帮助我更好地理解和掌握SQL语句的使用。