Access Multiple Schemas in Single Query
About
In SQL, a schema is a logical namespace within a database that contains tables, views, procedures, etc. There are scenarios where we need to query across multiple schemas—either within the same database or across different databases.
How to check if 2 schema are in same database ?
To check if two schemas are in the same database, we need to understand how our RDBMS defines a "database" and a "schema", as this varies between systems.
If we can reference both schema1.table and schema2.table in a single query without using a database link, foreign wrapper, or database name prefix, they are most likely in the same database.
Oracle
Oracle treats a user = schema.
All schemas live under the same database (SID).
How to check:
Run this query to see available schemas:
If we can access both schemas with one user session, they are in the same database.
MySQL
MySQL uses the term schema = database.
So two “schemas” are actually two separate databases.
How to check:
Then:
If schema1 ≠ schema2, they are separate databases.
Case 1: Accessing Multiple Schemas in the Same Database
Scenario
We have two schemas:
hr_schema(containsemployeestable)finance_schema(containssalariestable)
We are logged in as user hr_schema and want to join hr_schema.employees with finance_schema.salaries.
Problem
By default, hr_schema cannot access tables in finance_schema.
Step-by-Step Setup
1. Connect as finance_schema and grant privileges:
This gives hr_schema permission to read from finance_schema.salaries.
2. Connect as hr_schema and run the query:
Notes
We can access the other schema's table directly using
schema_name.table_name.We only need
SELECTprivilege to read. For other operations likeINSERT,UPDATE, orDELETE, grant the respective permissions.
Case 2: Accessing a Schema in a Different Database (Using DB Link)
Scenario
hr_schemais in databaseHRDB.finance_schemais in databaseFINDB.We are logged in as
hr_schemaand want to accessfinance_schema.salarieswhich is in another Oracle database.
Problem
We cannot directly query across databases unless a database link is set up and permissions are granted.
Step-by-Step Setup
1. Ensure tnsnames.ora or Oracle Net connectivity is configured
Make sure FINDB is defined in our tnsnames.ora or our connection string points to the target database.
2. Create a database link in HRDB (as hr_schema)
finance_linkis the name of the DB link.'FINDB'is the Oracle Net service name pointing to the FINDB instance.
3. Grant required privileges in FINDB
Connect to finance_schema in FINDB and run:
Alternatively, to make it more generic:
4. Access the remote table via the link
Back in HRDB, run:
Notes
Always use
table_name@db_link_nameto reference a remote object.We can create public or private database links:
Private: Available only to the user who created it.
Public: Available to all users (requires DBA privilege).
Last updated