Each JOIN adds one more table, matched to something already in the query. To show an order line with the customer's name and the product's name, start from order_items and join outward:
SELECT o.order_id, c.first_name, p.name, oi.quantity
FROM order_items AS oi
JOIN orders AS o ON oi.order_id = o.order_id
JOIN customers AS c ON o.customer_id = c.customer_id
JOIN products AS p ON oi.product_id = p.product_id;
Every ON links the new table to one that's already joined. For inner joins the order you write them in doesn't change the result.
Watch the grain, meaning what one row stands for. After this join, one row is one order line, so COUNT(*) counts lines, not orders. An order with three lines appears three times. To count orders, use COUNT(DISTINCT o.order_id). The same fan-out happens whenever one row matches several rows in the next table.