I would recommend the use of INNER JOINS to pull the data together:
SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
This data can then be sorted by using an ORDER BY clause to allow for the rating to be sorted accordingly:
SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
ORDER BY r.rating DESC;
In order to only return the top number of results, use the LIMIT number clause.
A complete example of this can be seen below:
SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
ORDER BY r.rating DESC
LIMIT 5;
This example tailors to the first SQL Query requirement that you listed - the other two queries can be achieved by following the same structure.
EDIT :
After further understanding of the OP's original post, the complete example query above is adapted below. Since the requirement is to return the top 5 games based on their averaged ratings from users - the use of the clause AVG() must be used to obtain the averages of game ratings.
Whilst the use of the GROUP BY clause allows for each unique game_id to have it's average value calculated for it. Example of these clauses in use:
SELECT g.title, g.genre, AVG(r.rating), u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
GROUP BY g.game_id
ORDER BY AVG(r.rating) DESC
LIMIT 5;