DB/Oracle

[Oracle] UNION, UNION ALL 차이점

dy8_8 2022. 8. 29. 13:50
728x90

UNION이란, 2개 이상의 SELECT문을 연결해 또 다른 하나의 쿼리로 가공할 때 사용한다.

 

그럼 UNION과 UNION ALL의 차이점은 

중복 데이터를 제거하고 보여주냐, 그대로 보여주냐 차이이다. 

 

1. UNION

SELECT A.COLUMN1
           , A.COLUMN2
           , A.COLUMN3
   FROM TABLE_1 A

UNION

SELECT B.COLUMN1
           , B.COLUMN2
           , B.COLUMN3
   FROM TABLE_2 B

 

각 SELECT 한 값의 중 중복된 것이 있으면 제거하고 보여진다. 

TABLE_1, TABLE_2에서 COLUMN1,2,3이 중복되는 값이 있으면 제거되고 보여진다. 

 

 

 

2. UNION ALL 

SELECT A.COLUMN1
           , A.COLUMN2
           , A.COLUMN3
   FROM TABLE_1 A

UNION ALL

SELECT B.COLUMN1
           , B.COLUMN2
           , B.COLUMN3
   FROM TABLE_2 B

 

각 SELECT한 값은 중복되어도 그대로 보여진다. 

TABLE_1, TABLE_2에서 COLUMN1,2,3이 중복되는 값이 있어도 SELECT된 게 있으면 다 보여진다. 

 

 

주의사항은 아래와 같다. 
1.SELECT하는 컬럼의 타입이 동일해야 한다. 
"ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다

2. SELECT하는 컬럼의 개수가 동일해야 한다. 
"ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다." 

 

컬럼 개수가 동일하지 않아서 비교해 가며 찾아봤는데 

주석이 풀려 있던 컬럼이 있어서 그랬었다.

찾아보니 콤마(,)가 없어서 2번 에러문이 뜬 경우도 있었다.

 

쿼리를 복붙해오는 경우라면 확인을 잘 해야할 듯 하다.