DBA

Left Join & Right Join 본문

[2] Database/MS-SQL

Left Join & Right Join

코볼 2022. 8. 8. 11:20
728x90
반응형
SMALL

Table : #A, #B (참고 : https://hampi2.tistory.com/88)

 

Inner Join

if object_id('tempdb..#A') is not null drop table #A if object_id('tempdb..#B') is not null drop table #B create table #A ( id int identity , aCol1 varchar(10) , aCol2 varchar(10) , deleteYN tinyint..

hampi2.tistory.com

Table : #A, #B

 

---- left join : 왼쪽(Table #A)이 기준이 되어 왼쪽 테이블의 모든 행이 출력 된다. 오른쪽(Table #B)에 왼쪽(Table #A)의 키(id)외래키(aID)로 들고있는 행이 없으면 그 행은 null로 반환 된다. - 부분집합

select * from #A as a

left join #B as b on b.aID = a.id

left join

 

---- right join : 오른쪽(Table #B)이 기준이 되어 오른쪽(Table #B)의 모든 행이 출력 된다. 오른쪽(Table #B)이 가지고 있는 외래키(aID)가 왼쪽(Table #A)에 없으면 그 행은 null로 반환 된다. - left join의 반대로 생각 하면 됨.

select * from #A as a

right join #B as b on b.aID = a.id

right join

 

---- left join & where:

---- 첫번째 : left join (왼쪽(Table #A)이 기준이 되어 왼쪽 테이블의 모든 행이 출력 된다. 오른쪽(Table #B)에 왼쪽(Table #A)의 키(id)외래키(aID)로 들고있는 행이 없으면 그 행은 null로 반환 된다.)

---- 두번째 : where (where a.deleteYN = 0) - left join 결과에서 where절의 조건에 맞는 행만 다시 걸러서 결과로 출력 된다.

select * from #A as a

left join #B as b on b.aID = a.id

where a.deleteYN = 0

left join & where절
left join 결과 중 #A.deleteYN = 0 : 제거
left join 결과 중 #A.deleteYN = 0 : 제거

 

---- left join & on절에 where절 조건 추가 :

---- 첫번째 : left join (왼쪽(Table #A)이 기준이 되어 왼쪽 테이블의 모든 행이 출력 된다. 오른쪽(Table #B)에 왼쪽(Table #A)의 키(id)외래키(aID)로 들고있는 행이 없으면 그 행은 null로 반환 된다.)

---- 두번째 : 왼쪽(Table #A)deleteYN = 0 인 행과 조인된 오른쪽(Table #B) 행은 null로 반환 된다.

---- 세번째 : null 변환 되면서 중복된 행은 Merge 된다.

select * from #A as a

left join #B as b on b.aID = a.id and a.deleteYN = 0

left join & on절에 where절 조건 추가
left join 결과 중 #A.deleteYN = 0 : 제거
null 로 변환되고 한 행으로 Merge
left join 결과 중 #A.deleteYN = 0 : 제거
null 로 변환되고 한 행으로 Merge

 

---- left join & where b.id is null : 차집합

---- 첫번째 : 왼쪽(Table #A)이 기준이 되어 왼쪽 테이블의 모든 행이 출력 된다. 오른쪽(Table #B)에 왼쪽(Table #A)의 키(id)외래키(aID)로 들고있는 행이 없으면 그 행은 null로 반환 된다.

---- 두번째 : 왼쪽(Table #A)에만 존재 하는것만 결과(where b.id is null)로 출력

select * from #A as a

left join #B as b on b.aID = a.id

where b.id is null

left join & where b.id is null

 

728x90
반응형
LIST
Comments