Sample Data
I will use two tables for the examples.SampTab1 - data is as follow:
NAME | ROLE |
John | Mascot |
Alley | Guard |
SampTab2 - data is as follow:
NAME | GRADE |
John | 90 |
Tish | 60 |
Inner Join, also known as equi join
The following are the two versions of the query:Old Oracle Query
select *
from samptab1 tabA, samptab2 tabB
where tabA.name = tabB.name;
Ansi Join Query
select *
from samptab1
inner join samptab2 on samptab2.name = samptab1.name;
The data output is as follow:
NAME | ROLE | NAME_1 | GRADE |
John | Mascot | John | 90 |
Left Outer Join
Old Oracle SQL Queryselect *
from samptab1 tabA, samptab2 tabB
where tabA.name = tabB.name (+);
Ansi join Query
select *
from samptab1 left outer join samptab2
on samptab1.name = samptab2.name;
Output:
NAME | ROLE | NAME_1 | GRADE |
John | Mascot | John | 90 |
Alley | Guard |
Right Outer Join
Old Oracle Query:
select *
from samptab1 tabA, samptab2 tabB
where tabA.name (+) = tabB.name;
from samptab1 tabA, samptab2 tabB
where tabA.name (+) = tabB.name;
Ansi join Query:
select *
from samptab1 right outer join samptab2
on samptab1.name = samptab2.name;
from samptab1 right outer join samptab2
on samptab1.name = samptab2.name;
Output:
NAME | ROLE | NAME_1 | GRADE |
John | Mascot | John | 90 |
Tish | 60 |
Full Outer Join
Note that the order of output for the two queries below is a bit different.Old Oracle Query:
select *
from samptab1 tabA, samptab2 tabB
where tabA.name (+) = tabB.name
union
select *
from samptab1 tabA, samptab2 tabB
where tabA.name = tabB.name (+);
Ansi Join Query:
select *
from samptab1 full outer join samptab2
on samptab1.name = samptab2.name;
Output:
This is the output from the Old Oracle Query:
NAME | ROLE | NAME_1 | GRADE |
Alley | Guard | ||
John | Mascot | John | 90 |
Tish | 60 |
This is the output for the Ansi Join Query:
NAME | ROLE | NAME_1 | GRADE |
John | Mascot | John | 90 |
Tish | 60 | ||
Alley | Guard |
Cross Join
Old Oracle Query:select *
from samptab1 tabA, samptab2 tabB;
Ansi Join Query:
select *
from samptab1 cross join samptab2;
from samptab1 cross join samptab2;
Output:
NAME | ROLE | NAME_1 | GRADE |
John | Mascot | John | 90 |
John | Mascot | Tish | 60 |
Alley | Guard | John | 90 |
Alley | Guard | Tish | 60 |
All the above statements are mad in Oracle. One reference that might be useful in comparing the different SQL implementation is found in the following url.