很抱歉此查询的基本内容,但我需要一些帮助来学习:)
这是酒店的数据库。
以下是我的表格:
粗体是主键的位置。我意识到为预订提供连锁主键并不是最好的设计,但这就是它在这里的方式。
我需要查询以下内容:
有多少不同的客人预订了8月份?
答案 0 :(得分:1)
计算7月份的客人人数。
然后在8月份做同样的事情。
区分这两个值,并列出8月份预订的新客人数量。
形状不是很好,但是你可以选择开始。
答案 1 :(得分:1)
试试这个
select guestName, guestAddress from Booking b
inner join Guest g on b.guestNo=g.guestNo
inner join Hotel h on b.hotelNo=h.hotelID
inner join Room r on b.roomNo=r.roomID
where b.hotelID=h.hotelID and
MONTHNAME(dateFrom) = 'August'
and MONTHNAME(dateTo)='August'
答案 2 :(得分:1)
SELECT COUNT (DISTINCT guestno)
FROM booking
WHERE MONTH(datefrom) = 8
答案 3 :(得分:1)
您实际上不需要加入:
SELECT COUNT(DISTINCT guestNo)
FROM booking
WHERE dateTo >= CONCAT(YEAR(CURDATE()),'-08');
AND dateFrom < CONCAT(YEAR(CURDATE()),'-09');
这将包括完全涵盖八月,或八月开始或结束的预订..我认为其他答案不包括在内。
我还假设你今年只想要这个。
答案 4 :(得分:0)
以下查询应该适合您,
SELECT
Booking.*,
Guest.*
FROM Guest
JOIN Booking
ON Guest.guestNo = Booking
LEFT JOIN Room
ON Booking.roomNo = Room.roomID
LEFT JOIN Hotel
ON Room.hotelID = Hotel.hotelID
WHERE
MONTH(datefrom) = '8'
还有一个关于预订表复合键的建议。 Booking表的复合键应为 guestNo,roomNo,hotelNo,dateFrom