实验5 SQL语句应用1 实验目的(1)掌握数据的插入、修改和删除操作。
(2)掌握不同类型的数据查询操作。
2 实验要求(1)利用SQL语句对图书销售系统表进行插入、修改、删除和查询操作。
3 实验步骤(1)以bs用户登录BOOKSALES数据库,将表1至表6中的数据插入到数据库的相应表中。
表1CUSTOMERS表2PUBLISHERS表3BOOKS表4ORDERSORDERITEM表5表6PROMOTION(2)将ISBN为978-7-121-18619-8的图书的零售价格(retail)修改为30。
Update books set retail=30 where isbn=’978-7-121-18619-8’;(3)将订单号为1000的订单的发货日期修改为“2013-2-2”。
Update orders set shipdate=to_date('2013-02-02','yyyy-mm-dd') where order_id=1000;(4)已知当前有一个图书表OLDPUBLISHERS,其表中数据如下:publisher_id name contact phone1 电子工业出版社李明02 机械工业出版社孙浩3 人民邮电出版社张春4 传智播客吴瑞997990请将表中的数据与PUBLISHERS中的数据进行合并。
创建表:CREATE TABLE OLDPUBLISHERS (2 publisher_id CHAR(10) PRIMARY KEY,3 name VARCHAR2(25),4 contact V ARCHAR2(25),5 phone CHAR(25))6 TABLESPACE USERS;插入数据:INSERT INTO OLDPUBLISHERS V ALUES (2,'机械工业出版社','孙浩',);INSERT INTO OLDPUBLISHERS V ALUES (3,'人民邮电出版社','张春',3449876);INSERT INTO OLDPUBLISHERS V ALUES (4,'传智播客','吴瑞',997990);合并:MERGE INTO PUBLISHERS P USING OLDPUBLISHERS O ON (P.publisher_id=O.publisher_id)WHEN MATCHED THEN UPDA TE SET=,P.contact=O.contact,P.phone=O.phoneWHEN NOT MATCHED THEN INSERTVALUES(O.publisher_id,,O.contact,O.phone);(6)列出BOOKS表中每本书的书名和出版日期,对pubdate字段使用Publication Date 列标题。
(7)列出CUSTOMERS表中每一个客户的客户号及他们所在的地址。
(8)创建一个包含各个出版社的名称、联系人及出版社电话号码的列表。
其中,联系人的列在显示的结果中重命名为Contact PersonCREATE table qwer as select name,contact "Contact Person",phone from publisher;或CREATE table qwer as select name,contact as Contact Person,phone from publisher;(9)查询下达了订单的每一个客户的客户号。
(10)查询2013年3月1日之后发货的订单。
(11)查询居住在北京或大连的客户,将结果按姓名的升序排列。
(12)列出姓“王”的作者编写的所有图书信息,并将结果按姓名降序排序。
Select * from BOOKS WHERE author LIKE ‘王%’order by title desc;(13)查询“儿童”类和“烹饪”类的所有图书。
(14)查询书名的第二个字母是“A”、第四个字母是“N”的图书SELECT * FROM BOOKS WHERE TITLE LIKE '_A%'AND TITLE LIKE '___N%';(15)查询电子工业出版社在2012年出版的所有“计算机”类图书的名称。
方法1:错误:SELECT * FROM BOOKS,PUBLISHERS WHERE PUBLISHERS.publisher_id=BOOKS.publisher_id and ='电子工业出版社'and BOOKS.pubdate=to_date(like '2012-__-__','yyyy-mm-dd') and books.category='计算机';正确:SELECT * FROM BOOKS,PUBLISHERS WHERE PUBLISHERS.publisher_id=BOOKS.publisher_id and ='电子工业出版社'and to_char(books.pubdate,'yyyy-mm-dd') like '2012%' and books.category='计算机';方法2:(16)查询图书名称、出版社名称、出版社联系人的名称和电话号码。
(17)查询当前还没有发货的订单信息及下达订单的用户名,查询结果按下达订单日期排序。
select ORDERS.order_id,,ORDERS.orderdate from ORDERS,CUSTOMERS WHERE ORDERS.customer_id=CUSTOMERS.customer_id and ORDERS.shipdate<=select to_char(sysdate,'yyyy-mm-dd')from dual order by orderdate;(18)查询已经购买了“计算机”类图书的所有人的客户号和姓名。
select CUSTOMERS.customer_id, from BOOKS,CUSTOMERS,ORDERS,ORDERITEM WHERE BOOKS.ISBN=ORDERITEM.ISBN AND ORDERITEM.ORDER_ID=ORDERS.ORDER_ID AND ORDERS.CUSTOMER_ID=CUSTOMERS.CUSTOMER_ID AND BOOKS.CATEGORY='计算机';(19)查询“王牧”购买的图书的ISBN以及书名。
SQL> SELECT BOOKS.ISBN,BOOKS.TITLE FROM BOOKS,CUSTOMERS,ORDERS,ORDERITEM WHERE CUSTOMERS.CUSTOMER_ID=ORDERS.CUSTOMER_ID AND ORDERS.ORDER_ID=ORDERITEM.ORDER_ID AND ORDERITEM.ISBN=BOOKS.ISBN AND ='王牧';(20)查询订购图书“Oracle数据库基础”的客户将收到什么样的礼品。
Select customer_id,name fromPromotion join(select customer_id,sum(quantity*retail) totalFrom order join orderitem on order.order_id=orderitem.order_idJoin book on orderitem.isbn=book.isbnWhere customer_id in(select customer_id from orders where order_id in(select order_id from orderitem where isbn=’Oracle数据库基础’))Group by customer_id)detailOn total between minretail and maxretail;(21)确定客户“张扬”订购的图书的作者。
(22)查询CUSTOMERS表中的每一个客户所下达的订单数量。
selectCUSTOMERS.customer_id,,BOOKS.TITLE,ORDERITEM.QUANTITY FROM CUSTOMERS,ORDERS,BOOKS,ORDERITEM WHERE CUSTOMERS.CUSTOMER_ID=ORDERS.CUSTOMER_ID AND ORDERS.ORDER_ID=ORDERITEM.ORDER_ID AND ORDERITEM.ISBN=BOOKS.ISBN;(23)查询价格低于同一种类图书平均价格的图书的信息。
(24)查询每个出版社出版图书的平均价格、最高价格、最低价格。
(25)统计每个客户购买图书的数量及总价钱。
(26)查询比1号订单中图书数量多的其他订单信息。
(27)查询所有客户及其订购图书的信息。
(28)查询没有订购任何图书的客户信息。
(29)查询订购金额最高的客户信息。
(30)查询名为“赵敏”的客户订购图书的订单信息、订单明细。
五、总结本次实验与大二学习的数据库知识相关,因此比较轻松,但还是遇到了不少问题,比如时间格式的“to_date”和“to_char”混淆不清,还有穿插聚集运算的夺标查询比较吃力,至今未能有效解决。