前篇回顾
从租车信息系统数据库设计(1)至租车信息系统数据库设计(4)我们完成了一个简单的租车信息系统的数据库设计。
从功能上来讲还有很多可以扩展的方面,如权限管理、发票管理等等,本文不将展开。大家可以对这些需求进行设想,设计相应的表、字段和关联,并融合到整体设计中。
本篇是本系列的最后一篇,我们将利用先前设计的数据库结构来写一些查询,完成一些业务需求,同时也反过来审视先前的设计。
获取需要催促还车的订单
我们的业务人员每天都要获取超出预订期限未还车的订单。对于这些订单,业务人员需要一一电话客户。
那就让我们来帮助业务人员写这个查询吧!
select RentalOrder.Order_ID from Table_Order RentalOrder where RentalOrder.Order_BookEndDate < GETDATE() and OrderStatus_ID = (select OrderStatus.OrderStatus_ID from Table_OrderStatus OrderStatus where OrderStatus.OrderStatus_Name = 'Inuse') |
这个查询把订单预订终止日期比当前时间早,但订单状态还是‘Inuse’的订单好找了出来(订单状态种类请参见租车信息系统数据库设计(2))。
注:1. 此查询中有一个子查询,大家可以直接使用查出来的OrderStatus_ID代替之,这样对性能有好处。此处是为了增加可读性。
2. 此查询仅输出了Order_ID,大家可根据需要连接相应的表,输出需要的字段。
顾客预订用车
当某顾客决定要租车时,他会在租车网站上选定某型号的车、哪个门店、某个时间段,并点击预订。
此时系统要查找指定门店的该车型车辆在相应时间是否有档期,我们分步骤来写这个查询。
查询的输入为:
1. 车型ID:@CarCategory_ID |
查询的输出为:
符合条件的车辆ID:Car_ID
--1 选出指定车型(Category),指定门店(Store),且车辆状态为Ready和Inuse的车辆 select Car_ID into #CandidateCars1 from Table_Car where CarCategory_ID = @CarCategory_ID and Store_ID = @Store_ID and CarStatus_ID in (select CarStatus_ID from Table_CarStatus where CarStatus_Name in ('Ready', 'Inuse')); |