Why do I have to always put the Scheme Name in front of the Table name in all sql queries?
So that Oracle can determine which table you are talking about. Any user in the database can create a table named DEPT or EMP.
See the 'Name Resolution in Schema Scope' section of the Advanced Application Developer's Guide.
Have you ever used valet parking at a nightclub or restaurant?
After dinner when you want the valet to go get your car you can't just say 'please get my black BMW'. There might be many black BMWs. You can only get the one that YOU own. Think about it. Do you really want the valet to give YOUR BMW to someone else? Your BMW might have important 'data' in it (e.g. your laptop and checkbook) and a different BMW might have 'junk' data; empty beer cans and cigarette butts.
Oracle is the valet. It is only going to give you YOUR table and you have to prove it is yours by being connected as YOU and providing YOUR schema name.
You ask for some other user's table by giving THEIR schema name but that only works if the valet (Oracle) has a signed permission slip from that user giving you permission to use their table.
Or you can use a public synonym which tells the valet (Oracle) that anyone is allowed to use your table. That isn't any wiser for tables that it would be for your car!