본문 바로가기
SQL/Oracle

UNION, UNION ALL 사용법, 예제 & 차이점

by wakestand 2019. 12. 9.
반응형

UNION, UNION ALL은 여러 조회한 결과를 합쳐주는 역할을 하는데

SELECT * FROM TB1

UNION(혹은 UNION ALL)

SELECT * FROM TB2

이런 식으로 조회한 결과를 합칠 수 있다

 

예제로 사용될 테이블과 쿼리는 위를 확인해주면 되는데 

보면 두 테이블은 모두 NAME이 김철수, AGE가 30인 값을 제외하면

모두 다른 값들을 가지고 있다

 

UNION, UNION ALL을 사용해서 두 테이블을 모두 조회해본 뒤 결과를 합쳐보자

 

먼저 UNION의 경우에는 두 결과를 합치면서 중복 값은 제거하는데

TB1과 TB2에 모두 김철수, 30이 들어간 값이 있으므로 

김철수는 두 줄이 아닌 한 줄만 나오는 것이 보인다

 

UNION은 중복을 제거한 뒤 조회한 결과들을 합치는 것!

 

다음은 UNION ALL인데

UNION ALL은 중복값을 제거하지 않고 합치기 때문에

김철수가 2번 나오는 것이 보인다

 

UNION ALL은 중복을 제거하지 않고 조회한 결과를 합치는 것!

 

마지막으로 간략히 정리해보면

UNION이나 UNION ALL이나 조회한 결과를 합치는 것은 동일하다

 

그러나

UNION은 중복을 제거하고 합치고

UNION ALL은 중복을 제거하지 않고 합친다는 것이 차이점이다

 

마지막으로 사용한 테이블과 쿼리는 아래를 참고해주면 된다

 

CREATE TABLE TB1 ( NAME VARCHAR2(20), AGE NUMBER(3) ); 
CREATE TABLE TB2 ( NAME VARCHAR2(20), AGE NUMBER(3) ); -- 테이블 TB1, TB2 생성

INSERT INTO TB1(NAME, AGE) VALUES('김철수', 30);
INSERT INTO TB1(NAME, AGE) VALUES('이영희', 35);
INSERT INTO TB1(NAME, AGE) VALUES('박영수', 40);
INSERT INTO TB1(NAME, AGE) VALUES('엄영수', 40); -- TB1에 값 삽입

INSERT INTO TB2(NAME, AGE) VALUES('김철수', 30);
INSERT INTO TB2(NAME, AGE) VALUES('최수영', 50);
INSERT INTO TB2(NAME, AGE) VALUES('하희영', 55); -- TB2에 값 삽입

SELECT * FROM TB1
UNION         -- UNION은 각 결과를 합치며 중복 제거
SELECT * FROM TB2

SELECT * FROM TB1
UNION ALL      -- UNION ALL은 각 결과를 합치며 중복 포함
SELECT * FROM TB2 
반응형

댓글