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

4. 왼쪽 외부 조인 (LEFT JOIN)


왼쪽 테이블을 기준으로 외부 조인 한다. 오른쪽 테이블에 인치하는 값이 없어도 왼쪽 테이블의 데이터는 모두 가져 온다. 이때 오른쪽에 없는 데이터는 null 로 대치 된다.
외부조인은 여집합(Complement) 의 개념이다.


1. LEFT JOIN1
2. LEFT JOIN2
3. LEFT JOIN3
4. LEFT JOIN4
5. LEFT JOIN5

1. LEFT JOIN1

MAIN

- BACK1테이블을 기준으로 BACK2테이블에 공통으로 존재한 '백승민','양혜수'의 JUMSU값을 조인.


 1) 오라클

SELECT A.NAME,A.KEY,B.JUMSU

  FROM   BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME; 

      NAME   KEY    JUMSU

      백승민 176    55

      양혜수 140    140

      김국진 150   

      홍길동 155   

 

2) PROC SQL

PROC SQL;

  CREATE TABLE LEFT1 AS

    SELECT A.NAME,A.KEY,B.JUMSU

    FROM BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME;

QUIT; 

 

      name   key JUMSU

      김국진 150     .

      백승민 176    55

      양혜수 140   140

      홍길동 155     .

 

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK2;

      BY NAME;

RUN;

DATA LEFT2;

 MERGE BACK1(IN=A) BACK2(IN=B);

       BY NAME;

       IF A;

RUN;

      name   key JUMSU

      김국진 150     .

      백승민 176    55

      양혜수 140   140

      홍길동 155     .

 

맨 위로 이동 맨 위로 이동


2. LEFT JOIN2

MAIN

- BACK1테이블에 단독으로 존재하는 데이터 출력.

- BACK1테이블을 기준으로 BACK2테이블에 공통으로 존재한 '백승민','양혜수'의 값을 제외.


 1) 오라클

SELECT A.NAME,A.KEY,B.JUMSU

  FROM   BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME

WHERE  B.NAME IS NULL;

      NAME   KEY    JUMSU

      김국진 150   

      홍길동 155   

 

2) PROC SQL

PROC SQL;

  CREATE TABLE LEFT3 AS

    SELECT A.NAME,A.KEY,B.JUMSU

    FROM BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME

WHERE B.NAME IS NULL;

QUIT; 

      NAME   KEY    JUMSU

      김국진 150   

      홍길동 155   

 

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK2;

      BY NAME;

RUN;

DATA LEFT4;

 MERGE BACK1(IN=A) BACK2(IN=B);

      BY NAME;

      IF A AND B NE 1;

RUN;

      NAME   KEY    JUMSU

      김국진 150   

      홍길동 155   

 

맨 위로 이동 맨 위로 이동


3. LEFT JOIN3

MAIN


 1) 오라클

SELECT A.NAME,A.KEY,B.JUMSU

FROM   BACK1 A

       LEFT JOIN BACK2 B

            ON A.NAME = B.NAME

WHERE  A.NAME LIKE '백%'

      NAME   KEY    JUMSU

      백승민 176    55

 

 

2) PROC SQL

PROC SQL;

  CREATE TABLE LEFT5 AS

    SELECT A.NAME,A.KEY,B.JUMSU

    FROM BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME

WHERE A.NAME LIKE '백%';

      NAME   KEY    JUMSU

      백승민 176    55

 

 

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK2;

      BY NAME;

RUN;

DATA LEFT6;

 MERGE BACK1(IN=A WHERE=(NAME LIKE '백%'))

       BACK2(IN=B);

     BY NAME;

     IF A;

RUN;

      NAME   KEY    JUMSU

      백승민 176    55

 
맨 위로 이동 맨 위로 이동

4. LEFT JOIN4

MAIN

- BACK1테이블을 기준으로 BACK2테이블에서 '백승민'의 값을 조인.


 1) 오라클

SELECT A.NAME,A.KEY,B.JUMSU

  FROM   BACK1 A

         LEFT JOIN BACK2 B

              ON  A.NAME = B.NAME

              AND B.NAME = '백승민';

 

      NAME   KEY    JUMSU

      백승민 176       55

      양혜수 140   

      김국진 150   

      홍길동 155   

 

 

2) PROC SQL

PROC SQL;

  CREATE TABLE LEFT7 AS

    SELECT A.NAME,A.KEY,B.JUMSU

    FROM BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME = B.NAME

              AND B.NAME = '백승민';

QUIT;

      name   key   JUMSU

      김국진 150       .

      백승민 176      55

      양혜수 140       .

      홍길동 155       .

 

 

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK8;

      BY NAME;

RUN;

DATA LEFT8;

 MERGE BACK1(IN=A)

       BACK2(IN=B

             WHERE=(NAME = '백승민'));

     BY NAME;

     IF A;

RUN;

PROC PRINT;RUN;

      name   key   JUMSU

      김국진 150       .

      백승민 176      55

      양혜수 140       .

      홍길동 155       .

 

 

맨 위로 이동 맨 위로 이동


5. LEFT JOIN5

MAIN


 1) 오라클

SELECT A.NAME,A.KEY,B.JUMSU

  FROM   BACK1 A

         LEFT JOIN BACK2 B

              ON  A.NAME = B.NAME

              AND A.NAME = '백승민'

WHERE A.KEY >= 155;

      NAME   KEY    JUMSU

      백승민 176    55

      홍길동 155

 

 

2) PROC SQL

PROC SQL;

  CREATE TABLE LEFT9 AS

    SELECT A.NAME,A.KEY,B.JUMSU

    FROM BACK1 A

         LEFT JOIN BACK2 B

              ON A.NAME  = B.NAME

              AND A.NAME = '백승민'

    WHERE A.KEY >= 155;

QUIT;

      NAME   KEY    JUMSU

      백승민 176    55

      홍길동 155

 

 

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK8;

      BY NAME;

RUN;

DATA LEFT8;

 MERGE BACK1(IN=A WHERE=(KEY>=155))

       BACK2(IN=B

             WHERE=(NAME LIKE '백승민'));

       BY NAME;

       IF A;

RUN;

      NAME   KEY    JUMSU

      백승민 176    55

      홍길동 155

 

맨 위로 이동 맨 위로 이동