본문 바로가기

Join ( inner , left, right , full outer , self ) 본문

BF 2024/SQL

Join ( inner , left, right , full outer , self )

jaegomhoji 2022. 3. 15. 21:26

* join 이란? 두 개 이상의 테이블을 결합하는 것 

 

출처 : https://media.vlpt.us/images/leesinji8/post/de80ab88-7e83-453a-b000-1df80c293016/Untitled.png

 

** INNER JOIN  : 두 테이블의 공통영역을 선택하는 조인 방식 

select * 

from table A 

inner join table B

on tableA.column = tableB.column

where condition; 

 

** LEFT JOIN : 두개의 테이블에서 공통영역을 포함해, 왼쪽 테이블의 다른 데이터를 포함하는 조인방식 

 

** RIGHT JOIN : 두개의 테이블에서 공통영역을 포함해, 오른쪽 테이블의 다른 데이터를 포함하는 조인방식 

* left join & right join 은 공통영역을 제외하고 어떤 영역의 데이터를 보여줄 것인지에 대한 차이 

 

select * 

from tableA

left join tableB

on tableA.column = tableB.column

where condition;

 

> 공통 영역은 선택한 필드의 값들이 출력되었으나, null 값에 해당되는 정보들은 left join 영역의 값들이다 

 

 

** FULL OUTER JOIN : 두 개의 테이블에서 공통영역을 포함하여 양쪽 영역의 모든 값들을 출력하는 방식 

select * 

from tableA

full outer join tableB

on tableA.col = tableB.col;

 

< 그러나 mysql 에서는 full outer join을 지원하지 않는다 >

< left join 결과 union right join 결과를 통해서 full outer join을 수행할 수 있다 >

 

* 아래와 같은 방식 

select colA.1, colA.2, colB.1, colB.2

from tableA

left join tableB

on colA.1 = colB.1

union

select colA.1, colA.2, colB.1, colB.2

from tableA 

right join tableB

on colA.1 = colB.1;

 

** Self join ( inner join 과 같은 효과 ) 

select col1, col2

from tableA, tableB,

where tableA.1 = tableB.1 ; 

 

* 만약 self join 시 , 이용하고자 하는 칼럼명이 두 테이블 간 중복이 없다면, table.column을 명시하지 않고도 시스템이 저절로 구분한다, 하지만 가독성 확보의 목적에서 명시하는 것이 좋다.

'BF 2024 > SQL' 카테고리의 다른 글

UNION, UNION ALL  (0) 2022.03.16
Concat , alias , distinct, limit  (0) 2022.03.15
논리연산자 기초 ( AND, OR , NOT, BETWEEN , IN , LIKE )  (0) 2022.03.15
비교연산자 comparison operators  (0) 2022.03.14
Order by ( col asc | desc )  (0) 2022.03.14
Comments