Creo que primero debes chequear que la nueva reserva no esté entre los días ocupados por la que ya hay, o sea:
Campos en la tabla reservas: codigohabitacion, fechaentrada, fechasalida
Primero, que la fechaIN no esté comrprendida entre esas fechas ya que está ocupada.
Además la fecha de salida no debe coincidir tampoco con ninguna fecha que esté ocupada la habitación, por lo tanto, en principio, se me ocurre algo como esto;
Código SQL
[-]
select *
from tbReservas
where (fechaIN < fechaentrada or fechaIN > fechasalida)
and (fechaOUT < fechaentrada or fechaOUT > fechasalida)
Evidentemente, habrá que comprobar que fechaIN es menor que fechaOUT.
También hay que comprobar que por ejemplo la fechaIN puede ser menor que fechaentrada, pero entonces la fechaOUT no puede ser mayor que fechasalida, tendrá que ser también menor que fechaIN, "salga usted de la habitación que este fin de semana está reservada a otra persona y el lunes ya puede usted volver a ella". Como eso no se puede permitir, entonces hay que añadir al select:
Código SQL
[-]
and ((fechaIN < fechaentrada) or (fechaIN > fechasalida))
Seguro que hay otra forma más fácil
