본문 바로가기
Oracle

[Oracle] UNION과 UNION ALL 차이

by 네모세모동동 2025. 2. 12.

✏️ UNION / UNION ALL

      여러 개의 SELECT문 결과를 하나의 결과로 합쳐주는 집합 연산
      두 연산의 차이는 중복 제거!

         •   UNION => 중복 제거
         •   
UNION ALL => 중복 제거 X

 

 

중복 제거가 필요한 것이 아니라면 UNION 보다는 UNION ALL을 사용하는 것이 좋다.

UNION 은 중복 제거라는 단계가 한번 더 들어가기 때문에 속도와 부하에서 안좋아...

 

UNION과 UNION ALL을 사용할 때는

컬럼의 개수, 데이터 타입, 순서가 동일해야한다.

 

이 항목들이 동일하지 않은 경우 아래와 같은 문제들이 발생한다.

 

 

1. 컬럼의 개수가 일치하지 않는 경우

ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다.

(ORA-01789: query block has incorrect number of result columns)

SELECT ID, NAME
  FROM USER

UNION ALL

SELECT ID
  FROM USER

 

 

2. 데이터 타입이 다른 경우

ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다.

(ORA-01790: expression must have same datatype as corresponding expression)

SELECT 1 AS NO
  FROM DUAL

UNION ALL

SELECT 'ABC' AS NO
  FROM DUAL

 

 

3. 컬럼 순서가 다른 경우

컬럼 순서가 달라지면 데이터가 이상하게 변형될 수 있다.

만약 별칭(AS, 앨리어스)를 준다고 해도 순서에 따라 합쳐지니 조심해야한다.

SELECT 'K' AS ID
     , 'KIM' AS NAME
  FROM DUAL
UNION ALL
SELECT 'LEE' AS NAME
      ,'L' AS ID
  FROM DUAL

 

 

 


[참고]