Aqui está uma consulta que mostrará as salas NÃO LIVRES para um período:
select room from bookings where
(arrival<'2011-03-12' and departure>='2011-03-12') -- overlap at the end
OR (arrival<='2011-03-10' and departure>'2011-03-10') -- overlap at the start
OR (arrival>='2011-03-10' and departure<='2011-03-12') -- complete overlap
Você pode usar isso com
select roomnumber from rooms where roomnumber not in (... as above ...)
para encontrar os quartos GRATUITOS