基本的SQL查询

时间:2014-08-07 10:18:47

标签: mysql sql

很抱歉此查询的基本内容,但我需要一些帮助来学习:)

这是酒店的数据库。

以下是我的表格:

  • 酒店( hotelNo ,hotelName,city)
  • 房间( roomNo hotelNo ,类型,价格)
  • 预订( hotelNo guestNo dateFrom ,dateTo,roomNo)
  • 访客( guestNo ,guestName,guestAddress)

粗体是主键的位置。我意识到为预订提供连锁主键并不是最好的设计,但这就是它在这里的方式。

我需要查询以下内容:

有多少不同的客人预订了8月份?

5 个答案:

答案 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