Cs/DataBase

[데이터베이스] 조인

ukkkk7 2023. 11. 29. 22:57
728x90
반응형

 

Join 이란?

RDB에서 기본키-외래키로 연관된 두 테이블을 묶어 하나의 테이블로 만드는 방법으로 RDB를 사용함에 있어 중요한 역할을 한다.

 

 

Join이 왜 필요할까?

관게형 데이터베이스 특성상 정규화를 수행하면 각 속성이 최소성과 유일성을 만족하는 데이터의 집합으로 테이블이 구성되고 테이블간 관계(Relationship)을 갖게 된다.

이렇게 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되므로 연관있는 데이터를 효율적으로 검색하고 처리하기 위해 조인이 필요하다.

 

 

Join의 종류

 

INNER JOIN

두 테이블에서 '공통된 값' 만을 가진 행을 출력해준다. 다시말해 테이블 데이터 간 교집합을 의미한다. 보통 INNER JOIN이 기본적인 JOIN 방법이다.

 

 

위와같은 정규화된 2개의 상품 Table이 있을 때 INNER JOIN을 실행한 쿼리문을 살펴보면 ON이하에 무엇을 기준으로 결합할 것인지 명시해준다.

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 //조회할 컬럼
	FROM TableA as A       	// 결합할 테이블 명. as 이후는 별칭
    	INNER JOIN TableB as B   // 결합할 테이블 명. as 이후는 별칭
    	ON A.상품코드 = B.상품코드  // 결합 조건

 

해당 쿼리문을 실행했을 때 아래와 같은 교집합 결과가 나온다.

 

 

 

 

OUTER JOIN

 

 

외부 조인은 공통 데이터 외에 어느 한쪽의 테이블에만 존재하는 데이터도 함께 결합하여 조회하고자 할 때 사용하는 방법이다. OUTER JOIN의 종류로는 LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN이 있다.

 

내부 조인에서는 공통된 컬럼을 기준으로 결합하기 때문에 테이블 순서가 상관이 없었지만, 외부 조인에서는 테이블 기준이 중요하다. 어떤 테이블을 먼저 접근하냐에 따라 쿼리 성능에 영향을 미치기 때문이다.

 

 

LEFT JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블에서 왼쪽 테이블과 공통된 값을 가지는 행을 반환한다.

만약 오른쪽 테이블에서 공통된 값을 가지는 행이 없다면 NULL값을 반환한다. 

 

 

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	LEFT JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

 

위와같은 LEFT JOIN을 실행하면

 

위와같은 결과가 나온다.A테이블과 B테이블의 공통값인 1,3,4는 재고수량이 있지만 없는 경우는 null로 표시되었다.

 

 

RIGHT JOIN

오른쪽 테이블을 기준으로 오른쪽 테이블 데이터 전부와 왼쪽 테이블에서 오른쪽과 공통되는 값을 결합한다.

 

 

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	RIGHT JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

 

SQL문은 LEFT에서 RIGHT로만 바뀌었다.

 

이번엔 B테이블을 기준으로 B와 A의 공통값은 결합되었지만 없는 값은 null로 표시되었다.

 

 

FULL JOIN

 

두 테이블의 모든 값을 반환해주고 만약 공통된 값을 가지고 있지 않은 행이 있다면 NULL을 반환한다.

 

SELECT A.상품코드 상품코드, A.상품명 상품명, B.재고수량 재고수량 
	FROM TableA as A       
    	FULL OUTER JOIN TableB as B   
    	ON A.상품코드 = B.상품코드

 

 

A,B 테이블 데이터 전부를 불러왔고 공통값이 없는 곳엔 null이 표시되었다.

 

 

UNION/ UNION ALL

JOIN과는 별개로 두 개의 테이블을 합치는 방법이며 내/외부 조인과는 관련이 없다.

 

 

FULL OUTER JOIN과 UNION 과의 차이는 무엇인지?

위의 방법들은 두 개 이상의 테이블에서 레코드(컬럼)을 결합하는 방법이다.

FULL OUTER JOIN의 경우 일치하지 않는 레코드(컬럼)도 포함해서 결과를 반환하지만 UNION의 경우는 일치하는 레코드 만 반환한다.

 

UNION이란 즉, 두개의 테이블에서 중복을 제거하고 합친 모든 행을 반환하는 방법이다.

아래와 같이 쿼리문을 작성한다.

SELECT 테이블1.컬럼1, 테이블1.컬럼2 FROM 테이블1
UNION
SELECT 테이블2.컬럼1, 테이블2.컬럼2 FROM 테이블2

 

UNION ALL은 중복을 제거하지 않고 모든 행을 반환한다. SQL문은 UNION 뒤에 ALL만 추가해서 붙여주면 된다.

 

UNION은 중복제거 하기 위해 정렬 작업을 수행하는데 CPU자원을 소모하여 성능 이슈가 발생할 수 있기 때문에 상황에 맞게 적절한 연산자를 선택하여야 한다.

 

728x90
반응형