Please help me arriving at an algorithm for the below scenario.
Scenario:
A database has coins, ID and value. There are 1500 coins. Each coin is having a unique ID which start from 1 till 1500. The value will change based on the market.
Lets us say I have around 30 coins which are picked out of the 1500 coins. All are scattered widely in the 1500 available coins.
Problem
In every call to the database it returns only 100 coins from the starting position we provide. This result will have only some of the 30 coins that we have
Goal
I have to fetch all the 30 coins with minimum number of calls to the database.
Example.. Please see the coin name and the ID. In the below example I am making 9 calls to get the details of all the coins. Surely there will be a better way to reduce the number of calls by following a algorithm which can be used commonly in all cases.

If the set of possible IDs is reasonably small then the following approach could allow all 30 coins to be retrieved with one database call.
I am assuming that a database call is "Give me entries $X$" where $X$ is a set of pointers (or whatever indexing scheme is used by the database). From your problem description, $X$ is allowed to have at most 100 entries at a time.
I also assume that you know the IDs of your 30 coins.
Proposed solution:
Let $n$ be the number of possible IDs. Let $\mathcal{L}$ be a list of size $n$ such that $\mathcal{L}(i)$ is points to the coin with ID $i$. So for example $\mathcal{L}(1160934)$ points to the coin with ID "1160934". In your situation, you will have $n \geq 1500$ and most likely $n \gg 1500$.
When you want to get your 30 coins, you look up $\mathcal{L}(i)$ for each ID $i$ of those coins. This will construct a set of pointers $X$.
Call the database with $X$. As 30 < 100, this can be done in one call.
Basically, this solution trades 'calls to database' for storage (a variant on having smaller runtime complexity at the expense of larger storage complexity).