As already said an inner join returns rows from two joined tables that have a matching column (or columns). If I understood you correctly, you know the concept for joining two tables but you're struggling with the concept of joining three or more tables.
If that is true, then I believe it would help you to think the joins in smaller steps. Joining three tables can be though in two separate steps.
For example:
SELECT *
FROM a
INNER JOIN b ON a.a = b.a
INNER JOIN c ON b.b = c.b
The idea you can use is that you first think about the join between
a
and
b
. This is executed and you would have a new result set containing all the common rows from both tables.
This defines you a new 'table', an intermediate result set. Now this 'table' (or result set) is then again joined with table
c
. Now the result is common rows from the intermediate result set and table
c
.
If you would have more tables you could continue the logic as needed.
To put this in another way. The example in the beginning can be written so that you can actually 'see' the intermediate results. Consider the following
SELECT *
FROM (SELECT *
FROM a INNER JOIN b ON a.a = b.a) as intermediate_result
INNER JOIN c ON intermediate_result.b = c.b
Hope this helps.