How to efficiently find if in-address in transaction is valid and has required amount of data? A transaction has in-bitcoin address. Transaction tells to transfer that address (in fraction or whole) to another address. Since the source of truth is block-chain, how does miner know that in-bitcoin address has said amount of data ? And how does miner check it efficiently ?

I have read about Merkel trees. My understanding is that they help to find whether a transaction is present in specific order in a block. But a block chain will have many blocks. So, how is it done efficiently by miners ?

Will not creating a hashmap from bitcoin-address to amount will be easier ?
There are no such things as "in-addresses" or "from addresses", and this has nothing to do with merkle trees, or even blocks.

Bitcoin works by transactions creating outputs and other transactions spending from previous transaction outputs. Each output has an associated value. When you spend Bitcoin, you are spending from previous transaction outputs. Your transaction will include a reference to the output that it is spending: the txid and the index of the output. Since all transactions (except coinbase transactions - the coin generation transaction, not the company) spend from a previous transaction output, the transactions are all chained together. You can walk backwards through this chain of transactions to check that the values of all the transactions are correct.

So when a node receives your transaction, it looks up the outputs that your transaction is spending from and makes sure that no other transaction has spent those outputs already. Then it sums the values of the outputs being spent and makes sure that that sum is greater than or equal to the sum of the values of the outputs being created.