[오라클|Oracle] UNION / UNION ALL


두 개 이상의 테이블을 하나의 테이블인 합쳐서 써야 할 때가 있습니다.

 

그런 경우 UNION을 사용하시면 됩니다.

 

SELECT SYSDATE FROM DUAL;

 

 

 SYSDATE

 1

 2013/09/27 12:02:17

 

SELECT TABLE_NAME FROM TABS
WHERE ROWNUM = 1;

 

 

 TABLE_NAME

 1

 ACTIVITY

 

이렇게 두 개의 테이블이 있고, 이 두 테이블을 하나의 테이블로 합치고 싶다면,

 

 

SELECT SYSDATE A FROM DUAL
UNION
SELECT TABLE_NAME A FROM TABS
WHERE ROWNUM = 1;

 

 

이렇게 하시면

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

라는 에러가 뜨실 겁니다.

 

이유는...

 

SELECT SYSDATE UNION_1 FROM DUAL
UNION
SELECT TABLE_NAME UNION_1 FROM TABS
WHERE ROWNUM = 1;

 

이 두 컬럼의 데이타 타입이 다르기 때문입니다.

 

 

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') UNION_1 FROM DUAL
UNION
SELECT TABLE_NAME UNION_1 FROM TABS
WHERE ROWNUM = 1;

 

 

 

 UNION_1

 1

 2013/09/27 12:02:17

 2

 ACTIVITY

 

이렇게 데이타 타입을 맞추어 주시면 하나의 테이블처럼 조회됩니다.

 

 

SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') UNION_1 FROM DUAL
UNION
SELECT TABLE_NAME UNION_1 FROM TABS
WHERE ROWNUM = 1
ORDER BY UNION_1 DESC;

 

 

ORDER BY는 마지막에 한 번만 넣어주시면 됩니다.

 

※ UNION 과 UNION ALL 의 차이

UNION 은 모든 값이 동일한 ROW 가 여러개 있을 경우, 하나의 ROW로 합쳐서 조회가 되는 반면,

UNION ALL 은 중복된 ROW가 있을 경우, 그냥 모든 ROW를 조회해서 보여준다는 차이 입니다.

 

 

Posted by 쭈니루
TAG

댓글을 달아 주세요