Sql query for room availability
My best guess, in the absence of a table CREATE script, would be something like:

SELECT rt.id, rt.type, rt.total_no_of_rooms, 
    IFNULL(SUM(r.no_of_rooms), 0) as "reserved rooms", 
    rt.total_no_of_rooms - IFNULL(SUM(r.no_of_rooms),0) as "rooms available"  
FROM Roomtypes rt 
    LEFT OUTER JOIN Reservation r ON r.roomtype_id = rt.id 
        AND CURRENT_TIMESTAMP BETWEEN r.check_in AND r.check_out
GROUP BY rt.id, rt.type, rt.total_no_of_rooms


This query should get the number of rooms available for each room type now (CURRENT_TIMESTAMP), but you can replace that with any other time stamp, e.g. '2018-05-17 10:00:00'.

To see how many rooms are available within a data range - check-in at 2018-04-11 10:00:00 and latest check-out at 2018-04-12 09:59:59:

SELECT rt.id, rt.type, rt.total_no_of_rooms, 
  IFNULL(SUM(r.no_of_rooms), 0) as "reserved rooms", 
  rt.total_no_of_rooms - IFNULL(SUM(r.no_of_rooms),0) as "rooms available"  
FROM Roomtypes rt 
  LEFT OUTER JOIN Reservation r ON r.roomtype_id = rt.id 
      AND '2018-04-11 10:00:00' &gt;= r.check_in 
      AND '2018-04-12 09:59:59' &lt;= r.check_out
GROUP BY rt.id, rt.type, rt.total_no_of_rooms


Here's an sqlfiddle example (MySQL 5.6) with create script.