[Database] Inner Join과 Outter Join(1)
2011. 6. 8. 13:20ㆍDatabase
책의 설명 이해 안가서 결국 실행 해보고서야 이해가 갔습니다. Join에 대해 많이 부족하지만제가 깨달은(?) 정보만 밑에다가 정리하겠습니다..
1. ' JOIN ' = 교집합, 하는 짓은 3단 논법?
즉 밑에와 같은 테이블이 2개가 있다고 생각해 보자.
단순하게 왼쪽 테이블만 본다면 '가1'의 직책은 3이 된다.
즉 밑에와 같은 테이블이 2개가 있다고 생각해 보자.
사용자 사용자코드
이름 직책 코드 명
--------------- ---------------
가1 3 1 사장
가2 5 2 부장
가3 3 과장
가4 2 4 대리
가5 1 5 사원
가6 3
가7
이름 직책 코드 명
--------------- ---------------
가1 3 1 사장
가2 5 2 부장
가3 3 과장
가4 2 4 대리
가5 1 5 사원
가6 3
가7
단순하게 왼쪽 테이블만 본다면 '가1'의 직책은 3이 된다.
하지만 두개의 테이블을 보고 머리속으로 생각을 조금만 한다면
" 가1의 직책은 3이지만 실제로는 과장이 구나 " 라고 생각할 수 있을 것이다. 왜냐하면 두개의 테이블을 보고 머리속에서 스스로 결합했기 때문이다.
머리속을 들여다 보면 간단한 그 유명한 소크라테스 형이 말한 '3단 논법'으로 밑에와 같은 작업을 했을 것이다.
가1 = 3
3 = 과장 +
------------
가1 = 과장
위와 같이 간단한 정보여야 머리속에서 합칠 수 있다. 하지만 거대한 Data 앞에서는 저렇게 바보 같이 하지 말고 JOIN이라는 명령어를 쓰자. JOIN이란 조금 전에 머리속에서 했던 결합이라고 생각하면 된다.
2. JOIN ?
JOIN 은 교집합 ? 간단하게 교집합을 생각해 보자. 두 집합에서 서로 일치하는 데이터가 없으면 그건 교집합을 해도 결과 값은 없다. 즉 일치하는 데이터가 없다는 것을 증명하는 일이 아니면 결국 쓸데 없이 머리 쓴 것이다.
이처럼 일치하는 데이터도 없이 JOIN을 하면 그건 결국 뻘짓 된다.
(자료형 또한 맞지 않으면 에러가 난다.)
그럼 위에 빨간 박스에서 일치하는 데이터는 무엇일까? 3 이다.
가1 = 3
3 = 과장 +
------------
가1 = 과장
즉 윗 줄에 있는 3은 사용자 테이블의 직책 컬럼이다. 밑에 줄에 있는 3은 사용자코드 테이블의 코드 컬럼이다. 즉 사용자 테이블의 직책 컬럼과 사용자 코드의 코드 컬럼을 JOIN하는 것이다.
3. Inner Join
그럼 자 이제 밑에 보이는 sql을 보자
SELECT 사용자.이름, 사용자코드.명 FROM 사용자, 사용자코드
WHERE 사용자.직책 = 사용자코드.코드
요롷게 하면 결과는 어떻게 될 것인가?
이름 명
-----------------
가1 과장
가2 사원
가4 부장
가5 사장
가6 과장
출력 될 것이다. ( 이런 조인을 Inner Join이라고 한다. )
위에 파란색 박스(테이블 정보)를 보고 위에 결과를 보면 아 그렇구나~ 당연히 저렇게 되겠지. 흔히 단순하게 생각하면 그렇다. 나도 저렇게 생각했지만 막상 쓰려로 하니깐. 어려웠다. 왜 어려웠냐 감만 잡았기 때문이다. 그렇기 때문에 혹시 아직 이해가 안되거나 어려운 사람을 위해 좀 더 작업을 설명 하겠다.
위에 파란색 박스(테이블 정보)를 보고 위에 결과를 보면 아 그렇구나~ 당연히 저렇게 되겠지. 흔히 단순하게 생각하면 그렇다. 나도 저렇게 생각했지만 막상 쓰려로 하니깐. 어려웠다. 왜 어려웠냐 감만 잡았기 때문이다. 그렇기 때문에 혹시 아직 이해가 안되거나 어려운 사람을 위해 좀 더 작업을 설명 하겠다.
SELECT 사용자.이름, 사용자코드.명 FROM 사용자, 사용자코드
WHERE 사용자.직책 = 사용자코드.코드
위 sql을 멋대로 해석 이다.
1). FROM 사용자, 사용자코드 :
FROM 작업을 했을 것이다. 사용자 테이블과 사용자 코드 테이블의 테이블 영역을 참조하기 시작했을 것이다.
2).WHERE 사용자.직책 = 사용자코드.코드 :
이제 where 작업을 할 것이다. 사용자.직책 = 사용자코드.코드 작업 즉 join을 한다. 위에 제목에 설명했듯이 '3단 논리'를 생각하면 될것이다.
가1 3 -----------------------> 1 사장 (3 = 1 ? false)
|------------> 2 부장 (3 = 2 ? false)
|------------> 3 과장 (3 = 3 ? true)
|------------> 4 대리 (3 = 4 ? false)
|------------> 5 사원 (3 = 5 ? false)
가2 5 -----------------------> 1 사장 (5 = 1 ? false)
|------------> 2 부장 (5 = 2 ? false)
|------------> 3 과장 (5 = 3 ? false)
|------------> 4 대리 (5 = 4 ? false)
|------------> 5 사원 (5 = 5 ? true)
가3 -----------------------> 1 사장 ( = 1 ? false)
|------------> 2 부장 ( = 2 ? false)
|------------> 3 과장 ( = 3 ? false)
|------------> 4 대리 ( = 4 ? false)
|------------> 5 사원 ( = 5 ? false)
가4 2 -----------------------> 1 사장 (4 = 1 ? false)
|------------> 2 부장 (4 = 2 ? false)
|------------> 3 과장 (4 = 3 ? false)
|------------> 4 대리 (4 = 4 ? true)
|------------> 5 사원 (4 = 5 ? false)
가5 1 -----------------------> 1 사장 (1 = 1 ? ture)
|------------> 2 부장 (1 = 2 ? false)
|------------> 3 과장 (1 = 3 ? false)
|------------> 4 대리 (1 = 4 ? false)
|------------> 5 사원 (1 = 5 ? false)
가6 3 -----------------------> 1 사장 (1 = 1 ? false)
|------------> 2 부장 (3 = 2 ? false)
|------------> 3 과장 (3 = 3 ? true)
|------------> 4 대리 (3 = 4 ? false)
|------------> 5 사원 (3 = 5 ? false)
가7 -----------------------> 1 사장 ( = 1 ? false)
|------------> 2 부장 ( = 2 ? false)
|------------> 3 과장 ( = 3 ? false)
|------------> 4 대리 ( = 4 ? false)
|------------> 5 사원 ( = 5 ? false)
이와 같은 작업을 하게 된다.
위에서 true가 될때마다 새로운 래코드만 만들어 진다. 즉 select 되기 전의 JOIN만 된상태는 이럴 것이다. (view라고 부르는 것 같다.)
사용자.이름 사용자.직책 사용자코드.코드 사용자코드.명
----------------------------------------------------------------
가1 3 3 과장
가2 5 5 사원
가4 2 2 부장
가5 1 1 사장
가6 3 3 과장
즉 조건이 맞은 테이블의 레코드 끼리 합체 했다고 생각하면 된다.
3). SELECT 사용자.이름, 사용자코드.명 :
의에 있는 사용자.이름 과 사용자코드.명을 뽑아 낸 것이다. 그래서 결과는 이와 같이 나왔다. 이런 것을 Inner Join 이라고 한다.
이름 명
-----------------
가1 과장
가2 사원
가4 부장
가5 사장
가6 과장
'Database' 카테고리의 다른 글
[Database] Inner Join과 Outer Join(2) (0) | 2011.06.08 |
---|