문과생의 우당탕탕 공부 기록

03. OUTER JOIN) BASKET테이블로 LEFT,RIGHT JOIN 이해하기 본문

SQL 공부/조인과 집계 데이터

03. OUTER JOIN) BASKET테이블로 LEFT,RIGHT JOIN 이해하기

드르렁쿨쿨 2023. 1. 10. 15:01

*본 내용은 앞의 JOIN 내용을 시작으로 계속 연결되는 테이블을 사용합니다.

 

OUTER JOIN은 말 그대로 

OUTER = 외부의

JOIN = 조인이라는 뜻이다.

 

 

 

흔히 말해서 집합적으로 조인되는 기준으로 

 

 

LEFT (OUTER) JOIN이면 앞서 언급된 집합 기준으로 교집합까지 포함하여 결과값이 나오고

 

 

 

 

 

RIGHT (OUTER) JOIN이면 뒤에 나오는 집합 기준으로 교집합까지 결과값이 나온다. 

 

 

 

 

 

 

FULL (OUTER) JOIN은 전체 합집합이라고 생각하면 쉽다

 

 

 

 

 

 

 

 

저번시간에 만든 테이블을 잠깐 가져오자면

BASKET_A와 BASKET_B라는 테이블을 만들고

각각의 PRIMARY KEY를 FRUIT으로, 가변의 문자열을 (VARCHAR) 100byte로 지정한다. 

그리고 null이아니게!!

 

VARCHAR = 가변의 문자열 타입으로 100byte까지 넣을 수 있다는 뜻이다

* VARCHAR와 CHAR의 차이점은 다른 게시글로 한번 정리해보겠다

그 다음 BASKET_A와 B에 각각 과일의 종류를 넣어주는 INSERT문을 작성한다.

각각의 테이블에 이런 값들이 들어갔다!

 

본격적인 OUTER JOIN 시작하기

위에 BASKET_A와 BASKET_B는 각각 과일목록들을 가지고있다.

이것을 

 

1. LEFT JOIN을 시행하면

BASKET_A에 들어있는 4가지 항목은 전부 그대로 나오고

오른쪽에 BASKET_B에 들어있는 항목 중에 A와 INNER JOIN되는 애들은 나오고, 아닌 애들은 결과값으로 안나온다.

 

그러면 여기서 NULL값인거만 뽑으면 어떻게 될까?

자 위에거랑 똑같이 뽑는데, NULL인거를 뽑는다고 WHERE 조건문으로 걸어줬다.

쉽게 말해서 INNER JOIN되는거를 제외하고 A에서 나머지 것들을 뽑은것이다.

 

LEFT JOIN하고-> 거기서 B.ID가 NULL(없는거)인 것을 뽑으니까 ,

INNER로 연결되어있던 1APPLE과 2ORANGE는 빠지고, 

JOIN안되어있는 3BANANA와 4CUCUMBER가 결과값으로 나온 것임!

 

한번 더 정리하자면, 순수A만 뽑고싶으면 SQL문을 작성할 때

FROM A로 잡고

LEFT JOIN으로 B를 엮어주고 (=A가 왼쪽에 위치, A(순수A+INNER JOIN이있는 A를 가져오게됨))

FRUIT 조건을 건 다음에(INNER JOIN이 되는것) WHERE로 B조건을 걸어서 빼내주면

순수 A만 남는 것이다! 

(말이 더 어렵게 됐는데 -_-;;무튼)

 

RIGHT JOIN도 똑같다!

 

이렇게 RIGHT JOIN도 똑같이 된다

대신 A가 이제 NULL값이 생김. 당연함 WHY냐면 B가 오른쪽에 위치해 있으니까 오른쪽인 B만 나온다

 

근데 이제 여기서 순수B만 보고싶으면

A에 대한 기준으로 NULL인거를 뽑으면 = b와 겹치지않는 것(=null 이니까)

순수 b만 나오는 것임!!!

 

 

Comments