본문 바로가기
Database/Oracle

[Oracle] 오라클 UNION과 UNION ALL 차이점/ UNION 함수 사용법과 예제

by 코딩 시그널 2020. 10. 26.
반응형

SELECT 문을 실행하면 해당 조건에 맞는 데이터가 조회된다. 조회된 결과를 가지고 여러 개의 SELECT문을 연결해 또 다른 하나의 쿼리로 가공하고 싶을 때 사용하는 것이 바로 집합 연산자다. 집합 연산자는 우리가 학창 시절 배웠던 집합, 즉 합집합, 교집합, 차집합, 여집합과 개념이 같다. 집합 연산자의 종류는 UNION, UNION, ALLNTERSECT, MINUS가 존재하는데 이번 포스팅에서는 2개 이상의 SELECT 문의 결과 집합을 결합하는 데 사용하는 UNION, UNION ALL에 대해 알아보자

UNION

UNON은 합집합을 의미한다. 2개 이상의 SELECT문 결과 집합을 결합하는 데 사용되며 SELECT 문 사이의 중복 행을 제거한다. UNION 연산자 내의  SELECT문에는 데이터 형식이 유사한 결과 집합에 동일한 수의 필드가 있어야 한다.

 

사용방법

SELECT expr1, expr2, ... expr_n FROM tables;

UNION

SELECT expr1, expr2, ... expr_n FROM tables;

 

다음은 UNION 사용법에 대한 예제이다.

WOMAN_CLASS, MAN_CLASS라는 테이블에 데이터를 조회해보았다. 각각 테이블에는 학생 이름과 해당하는 학생의 반 이름이 존재한다. 위의 조회 결과를 바탕으로 학생들의 반 목록을 조회해보자

 

SELECT CLASS_NAME WHERE WOMAN_CLASS;

UNION

SELECT CLASS_NAME WHERE MAN_CLASS;

 

UNION을 이용하여 두 SELECT문을 하나의 데이터 SET으로 조회할 수 있었다. 여기서 주목해야 될 점은 UNION을 사용하면 중복 데이터를 제거한다는 것이다. 만약에 중복 제거 없이 SELECT문에서 조회된 데이터 그대로를 합치고 싶다면 UNION ALL을 사용하면 된다.

 

UNION ALL

2 개 이상의 SELECT문 결과 집합을 결합하는 데 사용된다. 쿼리에서 모든 행을 반환하며 다양한 SELECT 문 사이의 중복 행을 제거하지 않는다.

 

사용방법

SELECT expr1, expr2, ... expr_n FROM tables;

UNION ALL

SELECT expr1, expr2, ... expr_n FROM tables;

 

다음은 UNION ALL 사용법에 대한 예제이다.

SELECT CLASS_NAME WHERE WOMAN_CLASS;

UNION ALL

SELECT CLASS_NAME WHERE MAN_CLASS;

 

WOMAN_CLASS, MAN_CLASS라는 테이블에 데이터를 이용하여 UNION과 마찬가지로 학생들의 반 목록을 조회해보았다. UNION ALL을 사용했을 경우 중복 제거 없이 모든 데이터가 반환되는 것을 확인할 수 있다.

 

주의 사항

집합 연산자로 연결되는 각 SELECT문의 SELECT 리스트의 개수와 데이터 타입은 일치해야 한다

 

타입 불일치 시 오류

ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다
"expression must have same datatype as corresponding expression"

 

개수 불일치 시 오류

ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다.
"query block has incorrect number of result columns"

댓글