본문 바로가기

IT 개념

Inner Join 과 Outer Join 의 차이

같이 면접 본 분이 알려주신, 다른 기업에서 물어봤다던 질문 중 하나입니다.

https://jetalog.net/28

 

[Database] INNER JOIN과 OUTER JOIN의 차이

중복 없는 열(column)들을 Join한다고 가정했을 때, 가장 일반적인 경우입니다: A와 B를 Innter-Join하면 A와 B의 교집합을 얻을 수 있습니다. A와 B를 Outer-Join하면 A와 B의 합집합을 얻을 수 있습니다. Exampl..

jetalog.net

중복없는 열(column)들을 Join 한다고 가정했을 때, 가장 일반적인 경우로

Inner Join : A 와 B의 교집합을 얻을 수 있다.

Outer Join : A와 B의 합집합을 얻을 수 있다.

예시

A는 1,2,3,4 B는 3,4,5,6

(1,2)는 A에만 있고, (3,4)는 A,B 둘 다 있고, (5,6)은 B만 갖고 있는 상황

[Inner Join]

select * from a INNER JOIN b on a.a = b.b;

select a.*, b.* from a, b where a.a = b.b;

A와 B의 교집합

[Left Outer Join]

A 에 있는 모든 행과 B에 함께 있는 행을 얻기

select * from a LEFT OUTER JOIN b on a.a = b.b;

select a.*, b.* from a, b where a.a = b.b(+);

[Full outer join]

A와 B의 합집합을 얻기

어떤 행의 A에는 데이터가 있고 B에는 비어 있는 경우 B 부분은 null 이며

반대의 경우 A 부분이 null

select * from a FULL OUTER JOIN b on a.a = b.b;

한번 더..

https://server-engineer.tistory.com/306

 

Inner Join과 Outer Join 차이점

INNER JOIN과 OUTER JOIN의 차이를 예제와 함께 설명한다. 1. INNER JOIN 조인이 되는 키값을 기준으로 교집합 (NULL값을 포함하지 않는다) 2. OUTER JOIN 조인이 되는 키값을 기준으로 기준테이블 Key 집합 (기..

server-engineer.tistory.com

[INNER JOIN]

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

[OUTER JOIN]

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

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

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

FROM 학생

NATURAL JOIN 학과;

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

FROM 학생, 학과

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

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

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

※ NATURAL JOIN : EQUI JOIN(?) 에서 JOIN 조건이 '=' 일 때 동일한 속성이 두 번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한번만 표기하는 방법

※ 두 테이블을 조인하여 사용할 때, 한 테이블에만 있는 속성은 테이블 명을 생략할 수 있지만, 두 테이블에 모두 속해 있는 속성(학과.학과코드)은 반드시 속성명을 테이블 명과 함께 표시해야 한다.

2. <학생> 테이블과 <성적등급> 테이블을 JOIN 하여 각 학생의 학번, 이름, 성적, 등급을 출력하는 SQL 문을 작성하시오.

SELECT 학번, 이름, 성적, 등급

FROM 학생, 성적등급

WHERE 학생.성적 BETWEEN 성적등급.최저 AND 성적등급.최고;

※ <학생> 테이블의 성적이 80~89인 튜플이 <성적등급> 테이블의 '최저' 필드의 값이 80이고, '최고'필드의 값이 89인 튜플과 조인하므로 등급은 B가 되는 원리.

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

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

FROM 학생 LEFT OUTER JOIN 학과 ON 학생.학과코드 = 학과.학과코드;

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

FROM 학과 RIGHT OUTER JOIN 학생 ON 학과.학과코드 = 학생.학과코드;

※ 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 을 했으므로 모두 출력된다.

'IT 개념' 카테고리의 다른 글

Spring 프레임워크와 전자정부프레임워크의 차이  (0) 2021.08.06
내가 하는 디버그  (0) 2021.08.06
내가 하는 디버그  (0) 2021.08.03
Javascript input 입력값 가져오기  (0) 2021.07.31
세션과 쿠키의 차이점  (0) 2021.07.31