1. Why doesn't any public key contain "zero" ?
As far as I know, the Base58 encoding removes all the characters 0, O, I, l
2. As far as I know there is no difference between uppercase and lowercase letters when we make a transaction. So, why are there both uppercase and lowercase letters in the public key when they are shown on different block explorers?
only bech32 type addresses (starting with bc1) are case-INsensitive, the others are case sensitive.