IT/기초 지식

[SQL] UNION과 UNION ALL의 차이점

개발자 두더지 2023. 4. 11. 20:06
728x90

일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다. 

 

 UNION과 UNION ALL의 차이점에 대해서 설명하고자 한다.

 UNION ALL은 이름 그대로 UNION의 형제같은 것이다. 따라서 먼저 UNION에 대해서 이야기한 후에 UNION ALL에 대한 이야기를 하고자한다. 

 

 

UNION이란?


 2개의 SQL 실행 결과를 세로 방향으로 연결시키는 구문이다.

 예를 들면 다음과 같다. 다음과 같이 두 개의 테이블이 있다고 가정하자.

 첫 번째 테이블

test_pk test_val
1 a
2 b

 두 번째 테이블

test_pk test_val
2 b
10 a2
11 b2
13 c2

 두 개의 테이블의 UNION으로 결합하면 다음과 같은 테이블이 된다.

test_pk test_val
1 a
2 b
10 a2
11 b2
13 c2

 SQL구문으로 작성하면 다음과 같다.

select test_pk, test_val from test1
union 
select test_pk, test_val from test2

 

특이 기능

 결합시킬 때는 어떤 것을 할까? 그것은 바로 "중복의 삭제"이다.

 첫 번째와 두 번째의 테이블을 비교해보면 아래와 같은 같은 행(중복행)은 생략되어 표시되고 있다. 

test_pk test_val
2 b

 

주의점

 두 테이블의 항목의 수가 데이터 형이 같아야만 UNION을 사용할 수 있다.

 

 

UNION ALL이란?


 UNION의 특수 기능(중복 삭제)를 하지 않은 구문이다. 즉 중복된 결과도 그대로 표시된다. 위에서 봤던 테이블에 UNION ALL을 적용하면 다음과 같이 된다.

test_pk test_val
1 a
2 b
2 b
10 a2
11 b2
13 c2

 SQL문은 다음과 같다.

select test_pk, test_val from test1
union all 
select test_pk, test_val from test2

 

 

정리


 위에서 보았듯, 두 가지의 차이는 중복을 제거해주느냐 안해주느냐이다. 본인의 필요에 따라 선택하면 된다. 

 


참고자료

https://qiita.com/tarosuke777000/items/391b0291faae45974be1

728x90