sql - 如何根据给定的问题以及到目前为止的内容完成我的代码
问题描述
在我继续之前,我想说这是我班级的家庭作业。我们在 Microsoft Access 中使用 SQL。由于 covid-19 和我的教授上个月开发了该病毒而过渡到在线课程,我们还没有时间真正深入研究 SQL 的工作原理。我还将提供我拥有的数据库 ER 图的图片,希望能清楚地了解我正在努力实现的目标。https://imgur.com/a/4QGRgRc
现在我要解决的问题是:
- 检索住在德克萨斯州泰勒的客户的电话号码,该客户于 2020 年 1 月 1 日预订了两个房间。
到目前为止我写的代码如下
SELECT CUSTOMER.Phone_No, CUSTOMER.Address, RESERVATION.Reservation_No, INCLUDES.Check_in, ROOM.Room_No
FROM CUSTOMER, RESERVATION, INCLUDES, ROOM
SELECT CUSTOMER.Phone_No, WHERE CUSTOMER.Address = 'Tyler, Tx' AND INCLUDES.Check_in < '12/31/2019' AND INCLUDES.Check_in > '01/01/2020'
我很困惑现在去哪里,或者即使我到目前为止所拥有的东西会起作用。有人能给我指出我现在应该去哪里的正确方向吗?
解决方案
如果您只需要客户信息,请使用聚合查询。提取的每个字段都必须包含在 GROUP BY 子句中:
SELECT Customer.ID, CustomerName, Phone_No FROM Customer INNER JOIN Reservation ON Customer.ID = Reservation.CustomerID WHERE Address = 'Tyler, Tx' AND Check_in BETWEEN #12/31/2019# AND #01/01/2020# GROUP BY Customer.ID, CustomerName, Phone_No HAVING Count(CustomerID) = 2;
或者利用嵌套查询和 IN() 函数的强大功能:
SELECT * FROM Customer WHERE Customer.Address = 'Tyler, Tx' AND Customer.ID IN (SELECT CustomerID FROM Reservation WHERE Check_in BETWEEN #12/31/2019# AND #01/01/2020# GROUP BY CustomerID HAVING Count(*) = 2);
或者使用 DCount()。但是,域聚合函数会降低查询性能。
SELECT * FROM Customer WHERE Customer.Address = 'Tyler, Tx' AND DCount("*", "Reservation", "Check_in BETWEEN #12/31/2019# AND #01/01/2020# AND CustomerID=" & Customer.ID) = 2;
推荐阅读
- python - 如何修复来自数据库的 Python 请求/BeautifulSoup 响应
- kotlin - Kotlin,将一个类映射到另一个类
- java - Java 类属性名与类名相同
- html - 保存 HTML 表格对象
- elasticsearch - ElasticSearch - 同时删除和索引(添加文档)。它会影响删除和/或索引性能吗?
- ms-access - 绘制简单图表时如何让 MS ACCESS 运行交互式查询
- keras - 如何创建没有内核的 tf.keras 层,即创建可以在 keras 模型定义中的任何位置使用的可训练变量?
- python-3.x - 使用子进程通过 cookie 获取文件的大小
- python - 我对不和谐机器人的 python 中的 message.content 有问题
- python - 任意选择使用带有即时客户端的 cx_Oracle 失败