1、某网上书店后台数据库的部分关系模式如下:
会员(会员编号,用户名,密码,姓名,地址,邮编,电话,消费额,积分)
图书(图书编号,类型名称,图书名称,作者,出版社,出版日期,ISBN,价格)
订单(订单编号,用户名,销售额,订购日期,出货日期)
订单明细(订单明细编号,订单编号,图书编号,数量)
(1)查询所有会员的所有信息。
(2)查询名称中包含“数据库”的图书的图书名称、作者、出版社和出版日期。
(3)查询订单编号为1001的订单中的图书的名称及数量
(4)查询订购了“数据结构”这本书的订单编号及用户名。
(5)查询订购图书总数量大于50的订单编号及其订购总数量。
(6)查询每本图书的编号及其订购数量总和,并按订购数量总和从高到低排序。
(7)查询订购图书数量前3的用户名及其订购数量。
(8)查询提供销售(图书表中有)但没有销售过(没有在订单明细表中出现)的图书名称和出版社。
(9)查询订购图书数量最多的用户名及其订购数量。
(10)创建视图V_ddmx,在视图中反映出用户张三购买的图书的编号、图书类型、图书名称、出版社、数量及订购日期等信息;从视图V_ddmx上查询张三订购的图书类型为“计算机类”的图书的名称及数量。
(11)向图书表中插入一个图书元组,各字段值为:图书编号:100001,类型名称:计算机类,图书名称:算法导论,作者:test,价格:50,写出SQL语句。
(12)将用户名为“张三”的会员的消费额在原基础上加120,积分在原基础上加12。
(13)从图书表中删除作者是“王五”的所有元组,写出SQL语句。
解答:
(1)查询所有会员的所有信息。
SELECT * FROM 会员
(2)查询名称中包含“数据库”的图书的图书名称、作者、出版社和出版日期。
SELECT 图书名称,作者,出版社,出版日期
FROM 图书
WHERE 图书名称 LIKE ‘%数据库%’
(3)查询订单编号为1001的订单中的图书的名称及数量
SELECT 图书名称,数量
FROM 订单明细,图书
WHERE 订单明细.图书编号 = 图书.图书编号 AND
订单编号 = ‘1001’
π图书名称,数量(σ订单编号=’1001’(订单明细∞图书))
(4)查询订购了“数据结构”这本书的订单编号及用户名。
SELECT a.订单编号,a.用户名
FROM 订单 a,订单明细 b,图书 c
WHERE a.订单编号=b.订单编号 AND b.图书编号=c.图书编号
AND c.图书名称=’数据结构’
π订单编号,用户名(σ图书名称=’数据结构’(订单∞订单明细∞图书))
(5)查询订购图书总数量大于50的订单编号及其订购总数量。
SELECT 订单编号,SUM(数量)
FROM 订单明细
GROUP BY 订单编号
HAVING SUM(数量)>50
(6)查询每本图书的编号及其订购数量总和,并按订购数量总和从高到低排序。
SELECT 图书编号,SUM(数量)
FROM 订单明细
GROUP BY 图书编号
ORDER BY SUM(数量) DESC
(7)查询订购图书数量前3的用户名及其订购数量。
SELECT top 3 用户名,SUM(数量)
FROM 订单明细,订单
WHERE 订单明细.订单编号 = 订单.订单编号
GROUP BY 用户名
ORDER BY SUM(数量) DESC
(8)查询提供销售(图书表中有)但没有销售过(没有在订单明细表中出现)的图书名称和出版社。
SELECT 图书名称,出版社 FROM 图书
WHERE NOT EXISTS(
SELECT * FROM 订单明细
WHERE 图书.图书编号=订单明细.图书编号)
或:
SELECT 图书名称,出版社 FROM 图书
WHERE 图书编号 NOT IN
(SELECT DISTINCT 图书编号 FROM 订单明细)
π图书名称,出版社((π图书编号(图书)-π图书编号(订单明细))∞ 图书)
(9)查询订购图书数量最多的用户名及其订购数量。
SELECT 用户名,SUM(数量) FROM 订单,订单明细
WHERE 订单.订单编号 = 订单明细.订单编号
GROUP BY 用户名
HAVING SUM(数量) >= ALL
(SELECT SUM(数量) FROM 订单,订单明细 WHERE 订单.订单编号 = 订单明细.订单编号 GROUP BY 用户名)
(10)创建视图V_ddmx,在视图中反映出用户张三购买的图书的编号、图书类型、图书名称、出版社、数量及订购日期等信息;从视图V_ddmx上查询张三订购的图书类型为“计算机类”的图书的名称及数量。
CREATE VIEW V_ddmx (图书编号,图书类型,图书名称,出版社,数量,订购日期)AS
SELECT a.图书编号,a.类型名称,a.图书名称,a.出版社,b.数量,c.订购日期
FROM 图书 a,订单明细 b,订单 c
WHERE a.图书编号=b.图书编号 AND b.订单编号=c.订单编号 AND c.用户名=‘张三’
SELECT 图书名称,数量 FROM V_ddmx WHERE 图书类型=’计算机类’
(11)向图书表中插入一个图书元组,各字段值为:图书编号:100001,类型名称:计算机类,图书名称:算法导论,作者:test,价格:50,写出SQL语句。
INSERT INTO 图书(图书编号,类型名称,图书名称,作者,价格)
VALUES(‘100001’,‘计算机类’,‘算法导论’,‘test’,50)
(12)将用户名为“张三”的会员的消费额在原基础上加120,积分在原基础上加12。
UPDATE 会员 SET 消费额=消费额+120,积分=积分+12
WHERE 用户名=‘张三’
(13)从图书表中删除作者是“王五”的所有元组,写出SQL语句。
DELETE FROM 图书
WHERE 作者=‘王五’