consulta do sistema de reservas SQL: identifique quando um quarto específico está disponível

Tenho uma consulta para um sistema de reservas de hotéis e preciso encontrar datas em que um quarto específico esteja disponível. (É um hotel boutique em que as pessoas reservam quartos específicos, para que saibam exatamente o quarto que desejam antes de chegarem a esse código. O resultado que eu procuro é o detalhe de UMA sala, a que eu especifico na consulta - não estou procurando informações sobre várias sala)

O esquema da tabela 'disponibilidade' é simples, cada linha é:

room_id
date_occupied - a single day that is occupied (like '2011-01-01')

Portanto, se, por exemplo, uma sala estiver ocupada de 1 a 5 de janeiro, cinco linhas serão adicionadas à tabela de disponibilidade, uma para cada dia em que a sala estiver ocupad

Aqui está o que estou tentando descobrir:

a consulta para descobrir quando uma sala específica está disponível entre as datas de início e término, como:
SELECT rooms.* FROM rooms, availability
 WHERE rooms.id = 123
   AND availability.room_id = rooms.id
   AND nothing between start_date and end_date is in availability.date_occupied
Também estou procurando uma consulta semelhante, onde só quero ver se uma sala específica está disponível para a data de início e os dois dias seguintes, algo como:
SELECT rooms.* FROM rooms, availability
 WHERE rooms.id = 123
   AND availability.room_id = rooms.id
   AND start_date, start_date+1day and start_date+2days is not in availability.date_occupied

Estou um pouco preso tentando descobrir as junções exatas. Alguma sugestão? Observe que, se ajudar, estou totalmente aberto a um esquema diferente para a tabela de disponibilidade. O que quer que faça com que as consultas funcionem com mais eficiênci

questionAnswers(7)

yourAnswerToTheQuestion