본문

Inner Join과 Outer Join 차이점

반응형

 

INNER JOIN과 OUTER JOIN의 차이를 예제와 함께 설명한다.

 

 

1. INNER JOIN

조인이 되는 키값을 기준으로 교집합 (NULL값을 포함하지 않는다)

 

 

 

2. OUTER JOIN

조인이 되는 키값을 기준으로 기준테이블 Key 집합 (기준테이블은 NULL값을 포함한다)

 

 


예제 문제를 풀어보며 이해하도록 하자

 

 

 

 

1. <학생> 테이블과 <학과>테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하는 SQL문을 작성하시오.

SELECT 학번, 이름, 학생.학과코드, 학과명FROM 학생 NATURAL JOIN 학과;

※ NATURAL JOIN : EQUI JOIN에서 JOIN 조건이 '='일 때 동일한 속성이 두 번 나타나게 되는데, 

이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법.

 

※ 두 테이블을 조인하여 사용할 때 한 테이블에만 있는 속성은 테이블명을 생략할 수 있지만, 

두 테이블에 모두 속해 있는 속성은 반드시 속성명을 테이블명과 함께 표시해야 한다.

 

SELECT 학번, 이름, 학생.학과코드, 학과명

FROM 학생, 학과

WHERE 학생.학과코드 = 학과.학과코드;

 

SELECT 학번, 이름, 학생.학과코드, 학과명

FROM 학생 JOIN 학과 USING(학과코드);

 

결과>

 

학번 

이름 

학과코드 

학과명 

15 

고길동 

COM 

컴퓨터 

16 

이순신 

HAN 

국어 

17 

김선달 

COM 

컴퓨터 

19 

아무개 

HAN 

국어 

 

2. <학생> 테이블과 <성적등급> 테이블을 JOIN하여 각 학생의 학번, 이름, 성적, 등급을 출력하는 SQL문을 작성하시오.
SELECT 학번, 이름, 성적, 등급FROM 학생, 성적등급WHERE 학생.성적 BETWEEN 성적등급.최저 AND 성적등급.최고;

※ <학생> 테이블의 성적이 80~89인 튜플을 <성적등급> 테이블의 '최저' 필드의 값이 80이고, 

'최고' 필드의 값이 89인 튜플과 조인하므로 등급은 B가 된다.

 

결과>

 

학번 

이름 

성적 

등급 

15

고길동 

83 

B

16

이순신 

96 

A

17

김선달 

95 

A

19

아무개 

75 

C

37

박치민  

55 

D

 

 

3. <학생> 테이블과 <학과> 테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하는 SQL문을 작성하시오. 

이때, 학과코드가 입력되지 않은 학생도 출력하시오.

SELECT 학번, 이름, 학생.학과코드, 학과명FROM 학생 LEFT OUTER JOIN 학과ON 학생.학과코드 = 학과.학과코드;
SELECT 학번, 이름, 학생.학과코드, 학과명FROM 학생, 학과WHERE 학생.학과코드 = 학과.학과코드(+);
SELECT 학번, 이름, 학생.학과코드, 학과명FROM 학과 RIGHT OUTER JOIN 학생ON 학과.학과코드 = 학생.학과코드;
SELECT 학번, 이름, 학생.학과코드, 학과명FROM 학과, 학생WHERE 학과.학과코드(+) = 학생.학과코드;

 

 LEFT OUTER JOIN : 왼쪽 테이블에 해당하는 속성은 NULL값을 포함하여 모두 출력

RIGHT OUTER JOIN : 오른쪽 테이블에 해당하는 속성은 NULL값을 포함하여 모두 출력

 

 

4. <학생> 테이블과 <학과> 테이블에서 학과코드 값이 같은 튜플을 JOIN하여 학번, 이름, 학과코드, 학과명을 출력하는 SQL문을 작성하시오. 이때, 학과코드가 입력 안 된 학생이나 학과명이 없는 학과코드도 모두 출력하시오.

SELECT 학번, 이름, 학과.학과코드, 학과명

FROM 학생 FULL OUTER JOIN 학과

ON 학생.학과코드 = 학과.학과코드

 

※ FULL OUTER JOIN을 하면 JOIN 구문으로 연결되지 않는 자료도 모두 출력된다. 

박치민은 학과코드가 없고, ENG는 <학생> 테이블에 등록되지 않아서 연결고리가 없지만 FULL OUTER JOIN을 했으므로 모두 출력된다.

 

결과>

 

학번 

이름 

학과코드

학과명

15

고길동 

COM

컴퓨터

16

이순신 

HAN

국어

17

김선달 

COM

컴퓨터

19

아무개 

HAN

국어

37

 박치민  

 

 

 

 

ENG

영어 



 

반응형

공유

댓글