[공통] Left Outer Join 이해
예제)
SELECT * FROM [Department] AS a LEFT OUTER JOIN [Department] AS b ON a.DepartCode=b.ParentCode
WHERE a.Depth = 2
해설) 간단히 말하면 왼쪽의 a 테이블을 기준으로 하여 셀렉트한 결과를 병합(Join)하여 결과를 만든다. a테이블에 내용이 있는 경우라면 b 테이블에 내용이 없는 경우에도 화면에 표시된다. RIGHT OUTER JOIN은 오른쪽 테이블을 기준으로 하여 셀렉트하고 병합한 결과를 나열한다.
1. [Department] AS a
[Department] AS b
=> 동일한 Department 테이블을 두개 만들어서 각자 a , b 객체로 생각
2. WHERE a.Depth = 2
=> a 에서 Depth =2 를 찾는다. (Where는 기준테이블에 대한 조건)
3. ON a.DepartCode=b.ParentCode
=> 2. 의 결과(a.Depth = 2)에서 a.DepartCode=b.ParentCode 인것을 찾는다. (On은 추가 테이블에 대한 조건)
LEFT OUTER JOIN 에 의해서 a를 기준으로 하여 결과를 만든다.
(단 a의 한 레코드에 대해서 b에 여러개의 레코드가 대응되는 경우 b를 모두 나열)
a가 기준이기에, 검색 결과가 없는 경우(null인 경우)에도 결과를 출력해 준다.
4. 결과
부서 깊이 2에 있는 부서들을 부모로 하는 자식 부서(깊이3)를 모부와 함께 나열하고 있다.
이너조인 예제
SELECT E1.Name, E1.LastChangeTime, E1.UserCode, E2.Name, E3.Phone
FROM [User] AS E1
INNER JOIN [Department] AS E2 ON E2.DepartCode = E1.DepartCode
INNER JOIN [Phone] AS E3 ON E1.UserCode = E3.UserCode
WHERE E1.Positions = 3
=> [User]의 Select 결과에 단순히 [Department], [Phone] 테이블의 레코드를 덧붙이기 한것으로 두개의 테이블중 어느 한쪽에 셀렉트한 결과가 없는 경우라면 화면에 표시되지 아니한다.
댓글
댓글 쓰기