본문 바로가기
데이터베이스

[SQLD] 조인(Join) 종류(3) - Full Outer, Natural, Cross 조인

by Data Lib 2023. 11. 23.

이번 포스팅에서는 조인의 마지막 내용으로 Full Outer Join, Natural Join, Cross Join에 대해 알아보도록 하겠습니다. 

 

 

Full Outer Join 

Full Outer Join은 Left Outer Join과 Right Outer Join의 결과를 결합하는 조인 유형입니다. 조인되는 두 테이블의 모든 행을 반환하며, 왼쪽 테이블과 오른쪽 테이블의 일치하는 행이 함께 표시되고, 일치하지 않는 테이블의 열에 대해 NULL 값이 포함된 일치하지 않는 행이 반환됩니다. Full Outer Join은 모든 데이터베이스가 제공하지는 않습니다. 만약 MySQL 등 Full Outer Join을 지원하지 않는 데이터베이스에서는 Left Outer Join 결과와 Right Outer Join 결과를 UNION하여 합쳐 사용 가능합니다. 

 

Full Outer Join
Full Outer Join

 

Natural Join(자연 조인)

Natural Join은 동일한 이름과 동일한 데이터 유형을 가진 컬럼을 기반으로 테이블을 결합하는 조인 유형입니다. 두 테이블에서 동일한 이름을 가진 모든 열을 조인 조건으로 사용하여 Inner Join을 수행하는 방법입니다. 즉, 조인 조건을 명시적으로 지정할 필요 없이 동일한 이름의 열을 자동으로 일치시킵니다. 실제 프로젝트에서는 많이 사용하지 않지만 SQLD 시험에는 종종 출제됩니다. 

 

 

중요한 것은 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요합니다. 주의할 점은 동일한 이름을 갖는 컬럼이 있지만 데이터 타입이 다르면 에러가 발생합니다. 그래서 테이블간에 동일한 형식을 갖는 공통 컬럼이 반드시 하나만 존재해야 합니다. 그리고 조인하는 테이블 간의 동일 컬럼이 SELECT 절에 기술되도 테이블 이름을 생략해야 합니다. 요약하면 조인 조건을 기술하지 않아도 자동으로 공통 컬럼을 찾아서 조인하는 매커니즘입니다. 

 

일반적인 inner join
일반적인 inner join

 

natural join
natural join

두 테이블이 갖는 공통 컬럼에 대해서 Inner Join은 별개의 컬럼으로 나타내지만, Natural Join은 하나의 컬럼으로 나타냅니다. 그렇기 때문에 select emp.deptno라고 select 절에 기술하면 에러가 발생합니다. 

 

Cross Join(교차 조인)

두 테이블의 카테시안 곱을 반환하는 조인 유형입니다. 즉, 첫 번째 테이블의 각 행을 두 번째 테이블의 모든 행과 결합합니다. 다른 유형의 조인과 달리 Cross Join에는 특정 조인 조건이 없습니다. 두 테이블 사이에 가능한 모든 행 조합을 생성합니다. 두개의 테이블을 조인하여 데이터를 검색하는 방법 중에 두 테이블의 데이터의 모든 조합을 받아오는 방법이 교차 조인입니다. 

-- 명시적(explicit) CROSS JOIN 표현

SELECT *
FROM 테이블1
CROSS JOIN 테이블2
;
-- 암시적(implicit) CROSS JOIN 표현

SELECT *
FROM 테이블1
          , 테이블2
;

 

카테시안 곱(Cartesian Product)이 발생하는 경우

  • 실수로 조인 조건 컬럼 중 일부를 빠뜨린 경우이 발생
  • 데이터를 복제하여 원본 테이블을 반복해서 읽는 것을 피하기 위해 사용, 일반적으로 관계(retaion)가 있는 테이블간이 아닌 더미 테이블을 이용하여 활용(고급 SQL 기술)