오른쪽 외부조인과 왼쪽 외부조인을 합친 개념이다. 왼쪽/오른쪽 테이블의 값이 일치하든 일치 하지 않든 모두 가져오는 조인이다. 다만 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 |
- 아래
예제는 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 |
![]() |
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 . |
![]() |
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 . |
![]() |
2. FULL JOIN2 |
* 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 |
![]() |
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 .
|
![]() |
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 . |
![]() |
3. FULL JOIN3 |
* 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 NULLOR 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 . |
![]() |