ITmembers.net 아카이브 · 2001–2009

재미로 배우는 오라클 & SQL 강좌

오라클 데이터 검색 - UNION

지난 시간까지 약 3회에 걸쳐 JOIN에 대해 다뤘습니다.
JOIN은 하나 이상의 테이블에서 특정한 컬럼을 검색할 때 사용했습니다.
이번 시간에 다룰 UNION도 하나 이상의 테이블에서 특정한 컬럼을 검색할 때 사용합니다.
JOIN 문은 WHERE 조건으로 두 개 이상의 테이블에서 원하는 컬럼을 선택하여 조회하지만, UNION은 두 개 이상의 SELECT 문을 사용하여 그 검색 결과를 합친다는 특징이 있습니다.

먼저 실습하기에 앞서 TEMPORARY라는 테이블이 필요합니다. 다음의 식을 복사하여 SQL*PLUS에 그대로 붙여 실행하시기 바랍니다.

DROP TABLE TEMPORARY;
CREATE TABLE TEMPORARY
(  TEMP_NUM CHAR(5) PRIMARY KEY,
   LAST_NAME VARCHAR2(30) NOT NULL,
   FIRST_NAME VARCHAR2(30) NOT NULL,
   PLACE VARCHAR2(30) );
INSERT INTO TEMPORARY VALUES ('20001', 'LISA', 'SMITH', 'SEOUL');
INSERT INTO TEMPORARY VALUES ('20002', 'KENNY', 'COLE', 'PUSAN');
INSERT INTO TEMPORARY VALUES ('10005', 'JULIE', 'ROSE', 'SEOUL');

자 그럼, 아래 그림을 보세요.


위와 같은 테이블에서, 다음 검색 식을 입력하면 어떻게 될까요?
SELECT LAST_NAME, FIRST_NAME
FROM EMP;

당연히 7개의 행이 검색되겠죠.

그럼 다음과 같이 입력하면?
SELECT LAST_NAME, FIRST_NAME
FROM TEMPORARY;

후후, 너무 쉽습니다. 당연히 3개의 행이 검색되겠죠.
그럼 위의 두 개의 식을 합쳐 볼까요?
이렇게 말입니다.

SELECT LAST_NAME, FIRST_NAME
FROM EMP
UNION
SELECT LAST_NAME, FIRST_NAME
FROM TEMPORARY
ORDER BY 1;


SELECT 문을 두 개 쓰고, 그 사이에 UNION으로 합쳐놓은 것입니다. 쉽죠?
그리고 마지막 줄에 ORDER BY 1은 첫 번째 컬럼으로 오름차순 정렬한다는 뜻입니다. 물론 ORDER BY 절을 반드시 써야하는 것은 아닙니다.

그럼 결과는 어떻게 나올까요?
7개 + 3개는 10개가 되겠지만, 9개가 나타납니다.  EMP 테이블과 TEMPORARY 테이블에서 LAST_NAME과 FIRST_NAME이 같은 행이 하나 있죠? 바로 노란 색으로 표시된 JULIE ROSE 행이 중복되어서 하나만 표시되기 때문입니다.

만약 중복된 행이라도 모두 표시하고 싶다면 UNION 대신 UNION ALL을 쓰면 됩니다.

어려운 내용은 아니었을 겁니다.
내일이면 또 한 주가 시작되는 월요일입니다.
행복한 한 주 되시길 바랍니다.

이상 동주 아빠 손병목이었습니다.