삽질의 현장/- DataBase

[삽잡이::sql] 여러 테이블을 가지고 놀자! JOIN

shovelman 2016. 6. 13. 22:28


관계형 DB를 가지고 놀 때(?)

하나의 테이블을 통해서 데이터를 

가공하고 추출하는 경우도 있지만, 


여러 테이블들과 Join하여 데이터를 

가공하여 추출해야할 때가 있습니다.


데이터를 얻기 위해 하나의 테이블만으로는 부족할 수가 있기 때문입니다.


 

다들 아시는 영어 단어입니다.

join~ 너와 나의 연결 고리 


예 그렇습니다


JOIN 입니다~ 여러분~ 둘이 합쳐서 이쁜 데이터를 추출합니다~



SQL에서 JOIN은 '집합'으로 바라보시고 이해하시면 쉽습니다!


 


집합이라면, 교집합, 합집합 이런거겠구나!!! 



우선 INNER JOIN에 대해서 알아봅시다.


여기... 삽질의 명성! 삽질과에 학부 명단이 있습니다.



이번에 삽질 평가를 했는데, 

제대로 삽질을 하지 못한 F 학점을 받은 학생들을 추리려합니다.


아이고 '화석' 님은 학교를 18년을.... 그런데... F.....  



아무튼...

INNER JOIN 을 사용하게되면 JOIN 조건을 만족하는 값을 추출할 수 있습니다.


1
SELECT I.학번, I.이름, G.학점 FROM I AS 학부생기록 INNER JOIN G AS 성적 ON I.학번 = G.학번
cs


이렇게 되면... 

'화석' 형님과 삽잡이 군이 추출되겠군요....

 

다음으로 OUTER JOIN 을 보겠습니다.

여기에는 LEFT/RIGHT 종류가 있습니다.

LEFT는 왼쪽 기준으로 JOIN 한 다른 테이블에 값이 있건 없건 포함됩니다.

예를 들어 

합집합이라고 해야하나...



이처럼 새내기가 학생부 기록에는 있지만, 

그럴일은 없겠지만.... 성적 Table에는 없다고 해봅시다.


LEFT OUTER JOIN을 한다면,

201677486 새내기는 null 을 가지고 있는 결과를 얻을 수 있습니다.


RIGHT OUTER JOIN은 오른쪽 테이블 기준이겠지요!?


1
SELECT I.학번, I.이름, G.학점 FROM I AS 학부생기록 LEFT OUTER JOIN G AS 성적 ON I.학번 = G.학번
cs


똑같은 기준으로 RIGHT OUTER JOIN을 하면 어떻게 될까요?

성적 Table에는 새내기에 대한 정보가 없기 때문에 

새내기에 대한 정보는 출력되지 않겠지요.


FULL JOIN은 

LEFT OUTER JOIN + RIGHT OUTER JOIN 라고 생각하시면 됩니다.

두 Table 모두 없는 row도 결과에 포함된다는 뜻입니다.


굳~