Skip Headers

오라클 / PROC SQL / DATA STEP

이블 결합
프 로 그 램 비 교

Go to Documentation Home
HOME
Go to Book List
PRO_home
Go to Table of Contents
연구회
Go to Index
자료실
Go to Master Index
TABLE JOIN
Go to Feedback page
MAIL

Go to previous page
Previous
Go to next page
Next

7. 합집합 세로결합(UNION)


집합 연산자 설명
UNION 두 집합에 대해 중복되는 행을 제외한 합집합
UNION ALL 두 집합에 대해 중복되는 행을 포함한 합집합
MINUS 두 집합간의 차집합
INTERSECT 두 집합간의 교집합

- UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환 합니다.

- UNION 연산은 두개의 테이블에 속하면서 중복되는 행을 제외한 행 집합을 결과 집합으로 반환한다. 한가지 주의할 점은 UNION 연산에서는 두개의 테이블에서 중복되는 행을 제외시키기 위하여 내부적으로 정렬 작업이 발생하여 UNION ALL 연산보다 처리 속도가 느려진다는 점이다. UNION 연산의 결과 집합은 오름차순으로 출력되며 테이블의 순서를 바꾸어도 결과는 동일하다. UNION ALL연산은 중복되는 행을 제외하지 않고 모두 출력한다. 따라서 UNION ALL 연산은 정렬 작업이 필요없는 관계로 UNION 연산보다 처리 속도가 빠르다.

- CORR(CORRESPONDING) 옵션은 두 개의 테이블에서 공통 변수를 사용.

- ALL 옵션은 중복 제거 없이 세로 결합.


1. UNION1
2. UNION2
3. UNION ALL

1. UNION

MAIN

- BACK1테이블 과 BACK2테이블을 세로 결합시 모든 변수값이 공통으로 중복되는 '양혜수'의 값은 한번 출력. 단, BACK2테이블의 JUMSU변수는 KEY변수와 동일하게 취급.


 1) 오라클

SELECT * FROM BACK1 A

UNION

SELECT * FROM BACK2 B;

NAME   KEY

김국진 150

백승민  55

백승민 176

양혜수 140

이수남 150

홍길동 155

2) PROC SQL

PROC SQL;

  CREATE TABLE UNION11 AS

    SELECT * FROM BACK1

    UNION

    SELECT * FROM BACK2;

QUIT;

 

name   key

김국진 150

백승민  55

백승민 176

양혜수 140

이수남 150

홍길동 155

3) PROC SQL

- 두개 테이블에서 공통변수 NAME에 대하여 세로결합.

- NAME변수의 중복 관측치 '백승민','양혜수'의 중복값 제거

PROC SQL;

  CREATE TABLE UNION12 AS

    SELECT * FROM BACK1

    UNION CORR

    SELECT * FROM BACK2;

QUIT;

name

김국진

백승민

양혜수

이수남

홍길동

4) DATA STEP

DATA UNION13;

 SET BACK1 BACK2(RENAME=(JUMSU=KEY));

     BY NAME KEY;

     IF LAST.KEY;

RUN;

name   key

김국진 150

백승민  55

백승민 176

양혜수 140

이수남 150

홍길동 155

맨 위로 이동 맨 위로 이동


2. UNION2

MAIN

- BACK1테이블 과 BACK2테이블을 세로 결합시 NAME 변수값이 공통으로 중복되는 '백승민','양혜수'의 값은 한번 출력. 단, BACK2테이블의 JUMSU변수는 KEY변수와 동일하게 취급.


 1) 오라클

SELECT A.NAME FROM BACK1 A

UNION

SELECT B.NAME FROM BACK2 B;

NAME

김국진

백승민

양혜수

이수남

홍길동

2) PROC SQL

PROC SQL;

  CREATE TABLE UNION21 AS

    SELECT A.NAME FROM BACK1 A

    UNION

    SELECT B.NAME FROM BACK2 B;

QUIT;

name

김국진

백승민

양혜수

이수남

홍길동

3) DATA STEP

DATA UNION22;

 SET BACK1(KEEP=NAME) BACK2(KEEP=NAME);

     BY NAME;

     IF LAST.NAME;

RUN;

name

김국진

백승민

양혜수

이수남

홍길동

맨 위로 이동 맨 위로 이동


3. UNION ALL

MAIN

UNION과 같으나 두 테이블의 중복되는 값까지 반환 합니다.

- BACK1테이블 과 BACK2테이블을 세로 결합시 모든 변수의 관측값을 중복 제거 없이 출력.


 1) 오라클

SELECT * FROM BACK1 A

UNION ALL

SELECT * FROM BACK2 B;

 

NAME   KEY

김국진 150

백승민 176

양혜수 140

홍길동 155

백승민 55

양혜수 140

이수남 150

2) PROC SQL

PROC SQL;

  CREATE TABLE UNION_ALL1 AS

    SELECT * FROM BACK1 A

    UNION ALL

    SELECT * FROM BACK2 B;

QUIT;

 

name key

김국진 150

백승민 176

양혜수 140

홍길동 155

백승민  55

양혜수 140

이수남 150

3) PROC SQL

- 두개 테이블에서 공통변수 NAME에 대하여 세로결합.

- NAME변수의 모든 관측치 출력

PROC SQL;

  CREATE TABLE UNION_ALL2 AS

    SELECT * FROM BACK1 A

    UNION ALL CORR

    SELECT * FROM BACK2 B;

QUIT;

 

name

김국진

백승민

양혜수

홍길동

백승민

양혜수

이수남

4) DATA STEP

DATA UNION_ALL3;

 SET BACK1 BACK2(RENAME=(JUMSU=KEY));

RUN;

 

name key

김국진 150

백승민 176

양혜수 140

홍길동 155

백승민  55

양혜수 140

이수남 150

5) DATA STEP

DATA UNION_ALL4;

 SET BACK1 BACK2(RENAME=(JUMSU=KEY));

     BY NAME;

RUN;

 

name   key

김국진 150

백승민 176

백승민  55

양혜수 140

양혜수 140

이수남 150

홍길동 155

 

맨 위로 이동 맨 위로 이동