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

3. 전체외부조인 (FULL JOIN)


오른쪽 외부조인과 왼쪽 외부조인을 합친 개념이다. 왼쪽/오른쪽 테이블의 값이 일치하든 일치 하지 않든 모두 가져오는 조인이다. 다만 Cross join 과 다른 점은 Full join 은 빈 값을  null 로 리턴한다는 것이고 Crosss join 은 양쪽 테이블을 그냥 단순히 연결시켜 준다는 점이다.


1. FULL JOIN1
2. FULL JOIN2
3. FULL JOIN3
4. S-PLUS
5. PROC SQL

1. FULL JOIN1

MAIN

- 아래 예제는 BACK1 테이블과 BACK2 테이블에 대하여 LEFT JOIN과 RIGHT JOIN을 수행

- 단, BACK1을 기준으로 수행하였기 때문에 BACK1 테이블의 NAME을 기준이 되어, BACK2 테이블의 NAME변수의 이수남은 NULL이 된다.


 1) 오라클

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

  FROM BACK1 A

       FULL JOIN BACK2 B

            ON  A.NAME = B.NAME;

      NAME   KEY    JUMSU

      백승민 176      55

      양혜수 140     140

      김국진 150   

      홍길동 155   

                     150

venn diagram of sql cartesian join

2) PROC SQL

PROC SQL;

  CREATE TABLE FULL1 AS

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

  FROM   BACK1 A

         FULL JOIN BACK2 B

              ON A.NAME = B.NAME;

QUIT;  

      name   key  JUMSU

      김국진 150     .

      백승민 176    55

      양혜수 140   140

               .   150

      홍길동 155     .

venn diagram of sql cartesian join

3) DATA STEP

PROC SORT DATA=BACK1;

      BY NAME;

RUN;

PROC SORT DATA=BACK2;

      BY NAME;

RUN;

DATA FULL2;

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

      BY NAME;

RUN; 

      name   key JUMSU

      김국진 150    .

      백승민 176   55

      양혜수 140  140

      이수남   .  150

      홍길동 155    .

venn diagram of sql cartesian join

맨 위로 이동 맨 위로 이동


2. FULL JOIN2

MAIN

* COALESES 참고 사이트 : http://www.statwith.pe.kr/ORACLE/functions019.htm

- 단, BACK1을 기준으로 수행하였기 때문에 BACK1테이블의 NAME을 기준이 되어, BACK2 테이블의 NAME변수의 이수남은 NULL이 된다.

- COALESCE(A,B)함수를 사용하여서 A와B 인수중에 NULL이 아닌 선행 값을 반환한다.

  S  Q  L   : CASE WHEN A IS NOT NULL THEN A ELSE B END

  DATA STEP : IF A NE '' THEN A ELSE B;


 1) 오라클

SELECT COALESCE(A.NAME,B.NAME) AS NAME,

       A.KEY,B.JUMSU

  FROM BACK1 A

       FULL JOIN BACK2 B

            ON  A.NAME = B.NAME; 

 

      NAME   KEY    JUMSU

      백승민 176    55

      양혜수 140    140

      김국진 150   

      홍길동 155   

      이수남        150

venn diagram of sql cartesian join

2) PROC SQL

PROC SQL;

  CREATE TABLE FULL3 AS

    SELECT COALESCE(A.NAME,B.NAME) AS NAME,

           A.KEY,B.JUMSU

    FROM BACK1 A

         FULL JOIN BACK2 B

              ON A.NAME = B.NAME;

QUIT; 

      NAME   key JUMSU

      김국진 150    .

      백승민 176   55

      양혜수 140  140

      이수남   .  150

      홍길동 155    .

 

venn diagram of sql cartesian join

3) DATA STEP

DATA FULL4;

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

      BY NAME;

RUN; 

      name   key JUMSU

      김국진 150    .

      백승민 176   55

      양혜수 140  140

      이수남   .  150

      홍길동 155    .

venn diagram of sql cartesian join

맨 위로 이동 맨 위로 이동


3. FULL JOIN3

MAIN

* COALESES 참고 사이트 : http://www.statwith.pe.kr/ORACLE/functions019.htm

- FULL조인 결과 중에 양쪽 테이블에 공통으로 존재하는 '백승민'과 '양혜수'는 제외.


 1) 오라클

SELECT COALESCE(A.NAME,B.NAME) AS NAME,

       A.KEY,B.JUMSU

  FROM BACK1 A

       FULL JOIN BACK2 B

            ON  A.NAME = B.NAME

WHERE  A.NAME IS NULL

   OR  B.NAME IS NULL;

 

      NAME   KEY    JUMSU

      김국진 150   

      홍길동 155   

      이수남         150

2) PROC SQL

PROC SQL;

  CREATE TABLE FULL5 AS

    SELECT COALESCE(A.NAME,B.NAME) AS NAME,

           A.KEY,B.JUMSU

    FROM BACK1 A

         FULL JOIN BACK2 B

              ON A.NAME = B.NAME

    WHERE A.NAME IS NULL

       OR B.NAME IS NULL;

QUIT;

      NAME   key JUMSU

      김국진 150    .

      이수남   .  150

      홍길동 155    .

 

3) DATA STEP

DATA FULL6;

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

      BY NAME;

      IF A NE 1 OR B NE 1;

RUN;

      name   key  JUMSU

      김국진 150     .

      이수남   .   150

      홍길동 155     .

맨 위로 이동 맨 위로 이동