SQL JOIN에 대해 집합으로 잘 표현된 자료가 있다
기본적인 JOIN문의 형태는
SELECT column1, column2, column3.....
FROM TableA A
(LEFT / RIGHT / FULL / INNER) JOIN TableB B
ON A.Key = B.Key
LEFT / RIGHT / FULL 은 OUTER Keyword를 써서 나타낼 수도 있다 (안 써도 결과는 같다)
위의 집합관계 그림에서
- 차집합 Set(A-B) or Set(B-A)
- Set(U) - Set(A∩B)
과 같은 경우 조건을 추가해서 나타내는 방법이 있다
WHERE 절을 추가해서 반대 방향의 테이블의 Key(맵핑되는 컬럼) 가 IS NULL일 때 순수하게 한쪽에만 속하는 원소(Row)를 가져온다
아래 예제를 보자
예제 data는 Oracle XE 버전을 설치하면 제공되는 기본 Scott DB를 이용했다
ex)
SELECT *
FROM EMP A
RIGHT OUTER JOIN DEPT B
ON A.DEPTNO = B.DEPTNO
SELECT *
FROM EMP A
RIGHT OUTER JOIN DEPT B
ON A.DEPTNO = B.DEPTNO
WHERE A.DEPTNO IS NULL
차이가 느껴지는가??
JOIN의 결과는 INNER 처럼 Key가 같은 내용을 찾아주지만 LEFT나 RIGHT와 같이 쓰이면 한쪽에만 존재하는 data를 포함하게 된다
그 반대방향의 Key가 Null인 경우만 필터링하면 순수한 A or B Table의 data를 가져올 수 있다
교집합에 속하는 data를 가져와야 하는지
차집합에 속하는 data를 가져와야 하는지
그것에 따라 RIGHT 나 LEFT 또는 INNER를 잘 쓰도록 하자
'Computer Science > 데이터베이스' 카테고리의 다른 글
친절한 SQL 튜닝 1. SQL 처리과정과 I/O (0) | 2018.07.04 |
---|---|
옵티마이저 (0) | 2018.04.13 |
트랜잭션 매니저와 카운트 그리고 Biz (0) | 2018.03.25 |
트랜잭션 입문(Before Lock and 동시성 제어) (0) | 2018.03.22 |
Entity Framework와 Code First (2) | 2018.03.20 |