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"
'Database > Oracle' 카테고리의 다른 글
[Oracle] ORA-01791: SELECT 식이 부적합합니다 / 원인 및 해결 방법 (0) | 2021.01.20 |
---|---|
[Oracle] 오라클 NULL 치환 방법/ COALESCE 함수 사용법과 예제 (0) | 2020.10.23 |
[Oracle] 오라클 첫 문자 대문자 변환 방법/ INITCAP 함수 사용법과 예제 (0) | 2020.10.20 |
[Oracle] 오라클 절대값 구하는 방법/ ABS 함수 사용법과 예제 (0) | 2020.10.19 |
[Oracle] 오라클 올림, 반올림, 내림, 버림 함수(TRUNC/ROUND/CEIL/FLOOR) 사용법과 예제 (0) | 2020.10.16 |
댓글