数据库原理第一次实验报告
数据库原理第一次实验报告
任务一:(数据库CAP)
1
创建数据库CAP,包含4张表Customers、Products、Agents和Orders。
复制Use Master; CREATE Database CAP; Use CAP; CREATE TABLE CUSTOMERS ( Cid char(8) PRIMARY KEY NOT NULL, Cname varchar(8) NOT NULL, City varchar(8), Discnt numeric(10,2) ); CREATE TABLE AGENTS ( Aid char(8) PRIMARY KEY NOT NULL, Aname varchar(8) NOT NULL, City varchar(8), AgentsPercent int ); CREATE TABLE PRODUCTS ( Pid char(8) PRIMARY KEY NOT NULL, Pname varchar(8) NOT NULL, City varchar(8), Quantity int, Price numeric(10,2) ); CREATE TABLE ORDERS ( Ordno char(8) PRIMARY KEY NOT NULL, OrdersMonth varchar(8), cid varchar(8) NOT NULL, aid varchar(8) NOT NULL, pid varchar(8) NOT NULL, Qty int, Dollars numeric(10, 2) );
运行结果:
2
利用SQL语句向4张表中增加一些示例数据。
Use master; Use CAP; INSERT INTO CUSTOMERS VALUES('C001',' TipTip','Duluth', 10.00); INSERT INTO AGENTS VALUES('A01',' smith','New York', 6); INSERT INTO PRODUCTS VALUES('P01',' comb','Dallas', 111400, 0.50); INSERT INTO ORDERS VALUES('1011','jan','C001', 'A01', 'P01', 1000, 450.00);
3
创建一张表Orders_Jan,表的结构与Orders相同,将Orders表中month为‘Jan’的订单记录复制到表Orders_Jan中。
Use master; Use CAP; CREATE TABLE ORDERS_JAN ( Ordno char(8) PRIMARY KEY NOT NULL, OrdersMonth varchar(8), cid varchar(8) NOT NULL, aid varchar(8) NOT NULL, pid varchar(8) NOT NULL, Qty int, Dollars numeric(10, 2) ); INSERT INTO ORDERS_JAN SELECT * FROM ORDERS WHERE OrdersMonth = 'jan'
运行结果:
4
将Orders表中month为‘Jan’的订单记录全部删掉。
USE master; USE CAP; DELETE FROM ORDERS WHERE OrdersMonth = 'jan'
运行结果:
5
对曾经下过金额(dollars)大于500的订单的客户,将其discnt值增加2个百分点(+2)。
use master; use CAP; update CUSTOMERS set Discnt = Discnt + 2.0 WHERE Cid in( select distinct Cid from ORDERS where Dollars > 500 )
运行结果:
任务二:(数据库GlobalToyz)
1
对GlobalToyz,创建数据库关系图。
运行结果:
2
查找属于California州并且使用MasterCard支付的购物者的名、姓和邮件地址。
use master; use GlobalToyz; select vFirstName, vLastName, vEmailId from Shopper where cState = 'California' and vCreditCardType = 'Master Card'
运行结果:
3
查找2021年,每个购物者的ID和定单总额,并以定单总额的升序排列。
use master; use GlobalToyz; select Shopper.cShopperId, sum(Orders.mTotalCost) as TotalCost from Shopper left outer join Orders on (Shopper.cShopperId = Orders.cShopperId) and (YEAR(Orders.dOrderDate) = 2021) group by Shopper.cShopperId order by TotalCost
运行结果:
4
查找在orderDetail表中vMessage为空值的行。
use master; use GlobalToyz; select * from OrderDetail WHERE OrderDetail.vMessage IS NULL
运行结果:
5
查找密码(password)长度不足6个字符的购买者的ID和姓名。
use master; use GlobalToyz; select cShopperId, vFirstName, vLastName from Shopper where len(cPassword) < 6
运行结果:
6
查找电话号码以“123”开头的收货人(Recipient)的姓名和所在的国家。
use master; use GlobalToyz; select DISTINCT vFirstName, vLastName, cCity from Recipient where cPhone like '123%'
运行结果:
7
根据pickofmonth表,查找2020年销售总量排在前三名的玩具的ID。
use master; use GlobalToyz; select top 3 cToyId, sum(iTotalSold) from PickOfMonth where iYear = 2020 group by cToyId order by -sum(iTotalSold)
运行结果:
8
根据OrderDetail表,查找玩具总价值大于¥50的定单的号码和玩具总价值。
use master; use GlobalToyz; select cOrderNo, mToyCost from OrderDetail where mToyCost > 50
运行结果:
9
查找一份包含所有装运信息的报表,包括:Order Number, Shipment Date, Actual Delivery Date, Days in Transit. (提示:Days in Transit = Actual Delivery Date – Shipment Date)
use master; use GlobalToyz; select cOrderNo as Order_Number, dShipmentDate as Shipment_Date, dActualDeliveryDate as Actual_Delivery_Date, DATEDIFF(day, dShipmentDate, dActualDeliveryDate) as Days_in_Transit from Shipment
运行结果:
10
查找所有玩具的名称、品牌和类别(Toy Name, Brand, Category)。
use master; use GlobalToyz; select Toys.vToyName as Toy_Name, ToyBrand.cBrandName as Brand, Category.cCategory as Category from Toys left join ToyBrand on Toys.cBrandId = ToyBrand.cBrandId left join Category on Toys.cCategoryId = Category.cCategoryId
运行结果:
11
查找“Activity”这个类别的玩具的最高价格、最低价格和平均价格。
use master; use GlobalToyz; select MAX(Toys.mToyRate) as MaxToyRate, MIN(Toys.mToyRate) as MinToyRate, AVG(Toys.mToyRate) as AvgToyRate from Toys left join Category on Toys.cCategoryId = Category.cCategoryId where Category.cCategory = 'Activity'
运行结果:
12
查找玩具的名称和所有玩具的购物车ID。如果玩具不在购物车中,也需在结果中出现。
use master; use GlobalToyz; select Toys.vToyName, ShoppingCart.cCartId from Toys left outer join ShoppingCart on Toys.cToyId = ShoppingCart.cToyId
运行结果:
13
以下列格式查找所有购物者的名字和他们的简称:(Initials, vFirstName, vLastName),例如Angela Smith的Initials为A.S。
use master; use GlobalToyz; select (substring(vFirstName, 1, 1) + '.' + substring(vLastName, 1, 1)) as Initials, vFirstName, vLastName from Shopper
运行结果:
14
查找“Standard Shipping”这种快递模式的单价最低的国家的名称。
use master; use GlobalToyz; select * from Country inner join ShippingRate on Country.cCountryId = ShippingRate.cCountryID inner join ShippingMode on ShippingRate.cModeId = ShippingMode.cModeId where (cMode = 'Standard Shipping' and mRatePerPound <= ALL ( select mRatePerPound from ShippingRate ))
运行结果:
15
查找买过名称为“Kitchen Set”的玩具的购物者的ID、姓名、邮件地址及所在的城市。
use master; use GlobalToyz; select cShopperId, vFirstName, vLastName, vEmailId, cCity from Shopper where Shopper.cShopperId in ( select Orders.cShopperId from Orders inner join ShoppingCart on Orders.cCartId = ShoppingCart.cCartId inner join Toys on ShoppingCart.cToyId = Toys.cToyId where vToyName = 'Kitchen Set' )
运行结果:
16
查找所有购物者和收货人的名、姓、地址和所在城市,要求保留结果中的重复记录。
use master; use GlobalToyz; select distinct vFirstName, vLastName, vAddress, cCity from Shopper union all select distinct vFirstName, vLastName, vAddress, cCity from Recipient
运行结果:
17
查找没有包装的所有玩具的名称。(要求用子查询实现)
use master; use GlobalToyz; select distinct vToyName from Toys where cToyId not in ( select cToyId from OrderDetail where cGiftWrap = 'Y' )
运行结果:
18
查找已收货定单的定单号码以及下定单的时间。(要求用子查询实现)
use master; use GlobalToyz; select cOrderNo, dOrderDate from Orders where cOrderNo in ( select cOrderNo from Shipment where cDeliveryStatus = 'd' )
运行结果:
19
查找从来没有下过订单的购物者。
use master; use GlobalToyz; select * from Shopper where Shopper.cShopperId not in ( select cShopperId from Orders )
运行结果:
20
删除“Largo”牌的所有玩具。
use master; use GlobalToyz; select cToyId into T from Toys where Toys.cBrandId in ( select ToyBrand.cBrandId from ToyBrand where cBrandName = 'Largo') delete PickOfMonth from PickOfMonth, Toys where (Toys.cToyId in ( select cToyId from T)) and (Toys.cToyId = PickOfMonth.cToyId) delete ShoppingCart from ShoppingCart, Toys where (Toys.cToyId in ( select cToyId from T)) and (Toys.cToyId = ShoppingCart.cToyId) delete OrderDetail from OrderDetail, Toys where (Toys.cToyId in ( select cToyId from T)) and (Toys.cToyId = OrderDetail.cToyId) delete Toys from Toys where Toys.cToyId in ( select cToyId from T) drop table T
运行结果:
写在最后
参考:
- 主要参考:数据库原理及应用教程 第4版︱微课版 (陈志泊 许福 韩慧 崔晓晖 路贺俊 阮豫红编著)
- mysql查某一年的数据_mob64ca12d80f3a的技术博客_51CTO博客
- sql 给列添加缺省 - CSDN文库.html
- SQL Sum()函数 - SQL教程
- mysql之查询前几条或者中间某几行数据_mysql 前几行-CSDN博客
- SQL – 仅选择前10行_极客教程
- SQL中的日期差函数_sql 日期差-CSDN博客
- MySQL字符串的拼接、截取、替换、查找位置-腾讯云开发者社区-腾讯云
- MySQL子查询——再难一看就懂 - 知乎
- 【MySQL】多表查询全解-【多表关系_内外自连接_子查询_多表查询案例链接】(可cv代码&案例演示)-腾讯云开发者社区-腾讯云
- union的特性,去重与不去重 - 1156740846 - 博客园
- MySQL多表删除数据操作_极客教程
- SQL中多表连接delete删除表数据 - 温故余学 - 博客园
- SQL高级知识——临时表 - 知乎
- Sql Server 在计数(COUNT)的时候去重_sqlserver count前去重-CSDN博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现