Podríamos probar algo así:
Código:
SELECT H.Nombre HA.NumeroHabitacion, HA.TipoHabitación
FROM HOTELES H INNER JOIN HABITACIONES HA USING (IDHOTEL)
INNER JOIN HABITACIONESRESERVADAS HR USING(NUMEROHABITACION, IDHOTEL)
INNER JOIN RESERVAS R USING (NUMERODERESERVA)
WHERE (@FechaEntrada NOT BETWEEN R.FechaEntrada AND R.FechaSalida)
AND (@FechaSalida NOT BETWEEN R.FechaEntrada AND R.FechaSalida);
Entendiendo que los valores @FechaEntrada y @FechaSalida son valores ingresados dentro de variables, y por lo tanto se deben incorporar en la llamada a la sentencia, según sea el lenguaje que estés usando.
Existiría otro método a mi juicio, bastante eficiente, pero que requiere el uso de Store Procedures.