- Join is a query that is used to combine rows from two or more tables
Types of Join :
- Inner Join (Normal Join)
- Default join is inner join. (Inner keyword is not madatory)
- Only common matching data in both the table will be displayed
- Left Join aka Left Outer Join
- All the values from the left table will always be displayed
- Right Join aka Right Outer Join
- All the values from the right table will always be displayed
- Outer Join
- All the contents of both the table will be displayed
- At least 1 entry of all the rows of both the tables are displayed for both the tables
- Self Join
- Joining the same table with itself
- Cross Join
- If two tables in a join query have no join condition, then Oracle Database returns their Cartesian product.
- All the rows of one table is mapped with all the rows of another table
- For example, the Cartesian product of two tables, each with 100 rows, has 10,000 rows.
- Anit Join (not exist)
- Semi Join (exist)
Example :
reate table temp1_202103071158(
name varchar2(10)
);
create table temp2_202103071158(
name varchar2(10)
);
insert into temp1_202103071158 values('Tyson');
insert into temp1_202103071158 values('Justin');
insert into temp1_202103071158 values('Martin');
insert into temp2_202103071158 values('Jake');
insert into temp2_202103071158 values('Blake');
insert into temp2_202103071158 values('Duke');
insert into temp2_202103071158 values('Tyson');
--truncate table temp1_202103071158;
--truncate table temp2_202103071158;
select * from temp1_202103071158 t1 inner join temp2_202103071158 t2 on (t1.name=t2.name);
select * from temp1_202103071158 t1 left join temp2_202103071158 t2 on (t1.name=t2.name);
select * from temp1_202103071158 t1 right join temp2_202103071158 t2 on (t1.name=t2.name);
select * from temp1_202103071158 t1 full outer join temp2_202103071158 t2 on (t1.name=t2.name);
select * from temp1_202103071158,temp2_202103071158; --cross join
select * from temp1_202103071158 t1 where exists (select 1 from temp2_202103071158 t2 where t1.name=t2.name);--Semi join
select * from temp2_202103071158 t2 where not exists (select 1 from temp1_202103071158 t1 where t1.name=t2.name);--Anit Join