[ORACLE] SELECT문 합쳐 결과 출력 - 유니온 (UNION / UNION ALL)
우리는 SELECT문을 사용해 데이터를 조회할 수 있습니다.
만약 이렇게 조회한 여러개의 SELECT문을 가지고 데이터를 가공하고 싶다면 집합연산자 라는것을 활용하면 됩니다.
집합 연산자
집합연산자는 SELECT문을 활용해 조회한 데이터에 대해 연산하는 연산자이다.
집합 연산자에는 UNION, UNION ALL, INTERSECT, MINUS가 있습니다.
오늘은 이 집합 연산자 중 UNION 과 UNION ALL에 대해 포스팅하겠습니다.
1. 합집합 UNION (중복 제거)
두개의 SELECT문을 서로 합치고 싶은데 그 중에서도 두 개의 조회문의 중복되는 데이터를 한번만 출력하고 싶다면 UNION을 사용하면 됩니다.
UNION을 사용하게 되면 두개의 SELECT문을 서로 합친 결과를 출력하지만 UNION ALL과는 반대로 중복데이터는 한번만 출력됩니다.
위와 같은 데이터를 가진 DEPARTMENTSTORE01 / DEPARTMENTSTORE02 라는 테이블이 있습니다.
만약 위 두개의 백화점의 모든 매장을 조회하고 싶다고 가정해보겠습니다.
이럴 경우 집합 연산자인 UNION을 사용하면 됩니다.
이때, 주의할 점은 합치려는 SELECT문의 컬럼명, 컬럼위치, 컬럼수가 동일해야 합니다.
그렇지 않다면 "ORA-01789 : 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다." 라는 에러가 발생합니다.
만약 컬럼명이 같지 않다면 ALIOS를 활용해 억지로라도 같게 만들어주어야 합니다.
UNION을 사용해 두 개의 결과 쿼리를 하나의 데이터 집합으로 출력합니다.
UNION절에서는 정렬을 사용하지 않는다면 첫번째 SELECT문이 위로오고 두번째 SELECT문이 밑으로 붙게 됩니다.
현대백화점, 신세계백화점에 총 12개의 매장이 있지만 10개만 조회된 것은 두 개의 백화점의 중복되는 매장에 대한 데이터를 한 번만 조회했기 때문입니다. 만약 중복데이터를 모두 조회하고 싶다면 UNION ALL을 사용하면 됩니다.
2. 합집합 UNION ALL(중복 제거 X)
그냥 두 개의 SELECT문 그 자체를 합치고 싶다면 UNION ALL을 사용하면 됩니다.
UNION ALL을 사용하여 두 개의 SELECT문을 중복제거 없이 합쳐 이어붙여 출력되었습니다.
UNION ALL은 조회 순서대로 출력됩니다.
UNION과는 반대로 정렬을 하지 않으면 첫번째 SELECT문의 데이터의 두 번째 SELECT문이 밑으로 붙습니다.
현대백화점의 매장 6개 / 신세계백화점의 매장 6개 -> 총 12개의 데이터가 중복제거 없이 출력되는 것을 볼 수 있습니다.
👉 UNION ALL 정렬(ORDER BY)
UNION은 결과값을 자동으로 정렬 후 반환하지만 UNION ALL은 정렬을 하지 않고 반환합니다.
여기서 주의할 점이 집합연산자로 SELECT문을 연결할 때에는 맨 마지막에 연결한 SELECT문에만 정렬이 가능합니다.
위 사진처럼 마지막 SELECT문에 정렬을 넣으면 정렬된 결과값을 반환받을 수 있습니다.
이상 ORACLE 집합연산자 UNION / UNION ALL 에 대한 포스팅을 마치겠습니다.
감사함당
'DB & SQL' 카테고리의 다른 글
[MariaDB] 윈도우 MariaDB 설치/접속 (1) | 2022.10.04 |
---|---|
[MySQL] 현재 데이터베이스 조회 및 변경 (0) | 2022.07.02 |
[Oracle] 중복 데이터 제거 (distinct, group by) (0) | 2021.07.31 |
[Oracle] 오라클 DECODE 개념 및 사용예제 (if else 조건문 - 디코드) (0) | 2021.07.22 |
SQL Error [1054] [42S22]: Unknown column 'SYSDATE' in 'field list' 해결 방법 (1) | 2021.04.27 |