GDOU-B-11-112
广东海洋大学学生实验报告书
实验名称
实验6:使用函数和compute子句
课程名称
数据库原理及应用
成绩
学院(系)
软件学院
专业
软件工程
班级
学生姓名
学号
实验地点
实验日期
实验目的:
1. 掌握字符串函数的使用
2. 掌握日期函数的使用
3. 掌握数学函数的使用
4. 掌握数据类型转换函数的使用
实验内容
完成在GlobalToyz数据库基础上的查询,按要求完成给出的下列题目,要求写出相应数据库的查询语句。
1. 显示玩具的适用年龄在4岁到8岁之间的所有玩具的名称和描述,要求只显示玩具描述的前25个字符。(两种函数实现)
SELECT vToyName, SUBSTRING(vToyDescription, 0, 25) AS 'vToyDescription' FROM Toys
WHERE siLowerAge >= 4 AND siUpperAge <= 8;
datediff是字符型函数SELECT vToyName, LEFT(vToyDescription, 25) AS 'vToyDescription' FROM Toys
WHERE siLowerAge >= 4 AND siUpperAge <= 8;
2. 对于Toys表的所有玩具,将名称和价格结合在一起按要求的格式输出,例如对ID000001的玩具,打印输出的是‘The price of Robby the Whale is 8.99$’。请按该格式输出所有玩具的名称和价格。
SELECT ('The price of ' + vToyName + ' is ' + CONVERT(varchar, mToyRate) + '$') FROM Toys;
3.将Shopper表的订购者姓和名结合在一起显示,在姓和名显示的时候在中间加上一个空格。如‘Angela Smith’。
SELECT (vFirstName + ' ' + vLastName) AS 'Name' FROM Shopper;
4. 显示价格最高的五种玩具的名称和价格(vToyNamemToyRate)。
SELECT vToyName, mToyRate FROM Toys
WHERE mToyRate IN (
    SELECT DISTINCT TOP 5 mToyRate
    FROM Toys ORDER BY mToyRate DESC
) ORDER BY mToyRate DESC;
5. 现需要查看Shopper表的订购者所使用的服务商列表。对于每个订购者,只需要显示服务商地址,不需要显示用户名。例如‘angelas@qmail’,只需要显示‘@qmail’。对于查询结果中重复出现的服务商地址,只需要显示一次。
SELECT DISTINCT SUBSTRING(vEmailId, CHARINDEX('@', vEmailId),
LEN(vEmailId) - CHARINDEX('@', vEmailId) + 1)
FROM Shopper;
6. 对于每份订单,请输出下列信息,包括订单号,订单日期,星期几。
SELECT cOrderNo, dOrderDate, DATENAME(dw, dOrderDate) AS 'Weekday' FROM Orders;
7. 对于每份订单要求输出的是订单号,订单日期的月份和日子。例如,订单号为‘000001’的订单的输出结果为‘000001号订单的日期是520日’。
SELECT (cOrderNo + '号订单的日期是' + CONVERT(nvarchar, DATEPART(mm, dOrderDate)) +
    '' + CONVERT(nvarchar, DATEPART(dd, dOrderDate)) + '')
FROM Orders;
8. 对于装运表Shipment,请根据每份订单输出实际投递时间(dActualDeliveryDate)和装运时间(dShipmentDate)之间相隔的天数。
SELECT cOrderNo, DATEDIFF(dd, dShipmentDate, dActualDeliveryDate) FROM Shipment;
9. 假设规则为订单的过期时间为下订单后的一个月,请输出每份订单的订单号,下订单的日期,以及理论的订单过期时间。
SELECT cOrderNo, dOrderDate, DATEADD(mm, 1, dOrderDate) FROM Orders;
10. 对于装运表Shipment,按该格式输出每份订单的装运日期。如订单号为‘000001’的输出结果为‘The Shipment date of Order No. 000001 is 2001.05.23’。
SELECT 'The Simpment date of Order No. ' + cOrderNo + ' is ' +
    DATENAME(yyyy, dShipmentDate) + '.' +
    DATENAME(mm, dShipmentDate) + '.' +
    DATENAME(dd, dShipmentDate)
FROM Shipment;
11. 输出Shopper表的‘Texas’州的前10%的订购者的详细信息。
SELECT TOP 10 PERCENT * FROM Shopper WHERE cState = 'Texas'
12. 对于OrderDetail表,请输出订单号,cWrapperIdvMessagemToyCost,并根据cWrapperId小计玩具花销的平均值和总值,在底部总计玩具花销的平均值和总值。(ComputeCompute by
SELECT cOrderNo, cWrapperId, vMessage, mToyCost FROM OrderDetail ORDER BY cWrapperId
COMPUTE AVG(mToyCost), SUM(mToyCost) BY cWrapperId;
13.对于PickofMonth表,打印出该表的详细信息,并在底部汇总出‘2000’年销售数量的总和。
SELECT * FROM PickOfMonth WHERE iYear = 2000 ORDER BY iYear
COMPUTE SUM(iTotalSold) BY iYear;
14. 打印出玩具花费最高的三份订单的详情。
SELECT * FROM OrderDetail WHERE cOrderNo IN (
    SELECT cOrderNo FROM Orders
WHERE mTotalCost - mGiftWrapCharges - mShippingCharges IN (
        SELECT DISTINCT TOP 3
'ToyCost' = mTotalCost - mGiftWrapCharges – mShippingCharges FROM Orders
ORDER BY 'ToyCost' DESC)
);
15. 查询输出Shopper表中姓和名的长度加起来最长的订购者的姓名。
SELECT (vFirstName + ' ' + vLastName) FROM Shopper
WHERE (LEN(vFirstName) + LEN(vLastName)) >= ALL (
    SELECT (LEN(vFirstName) + LEN(vLastName)) FROM Shopper
)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。