我需要有关 SQL 查询的帮助

I need help on SQL Queries

我需要知道我的查询是否正确 这是数据库模式:

Hotel (hotelNo, hotelName, city)
Room (roomNo, hotelNo, type, price)
Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo)
Guest (guestNo, guestName, guestAddress)

列出酒店编号'H004' 10 月未入住的房间详情。 这是我写的:

 SELECT*
FROM Room r,Hotel h 
WHERE r.hotelNo=h.hotelNo AND hotelNo='H004'
      AND roomNo NOT IN 
      (SELECT roomNo
       FROM Booking b,Hotel h
       WHERE dateFrom='1-Oct'
              AND dateTo='31-Oct'
       AND b.hotelNo=h.hotelNo
        AND hotelNo='H004');

我会用not exists来表达这个:

select r.*
from rooms r
where r.hotelno = 'H004' and not exists (
    select 1
    from booking b
    where 
        b.hotelno = r.hotelno 
        and b.roomno = r.roomno
        and b.datefrom <  '2020-11-01'
        and b.dateto   >= '2020-10-01'
)

内容如下:查找给定酒店中没有与 2020 年 10 月重叠的预订的所有房间。

备注:

  • 您无需携带hotel table即可获得您想要的结果;如果您需要:使用标准连接!隐式连接(from 子句中的逗号是遗留语法,不应在新代码中使用)

  • MySQL 将日期文字理解为 YYYY-MM-DD

    格式的字符串