Is it possible to have multiple wallets which send money and/or multiple wallets which receive money in a SINGLE transaction? Or every transaction consists of only one sending wallet and one receiving wallet.
A transaction is composed of inputs and outputs.
The inputs are the funds that go into the transaction, they can be from multiple wallets as long as every input (an input is an output from some previous transaction) is signed for by its owner.
On the output side we can send funds to any number of addresses (we are limited only by transaction size in KB)
So yes, it is possible to do just that.
As a practical example look at CoinJoin which is a way to combine inputs from different wallets together.
Hope this helps.