반응형
테이블 작업을 하다 보면,
여러 테이블의 데이터를 조인해서 가져오도록 설계를 많이 합니다.
그러다 보면 데이터가 기본 1:1 혹은 1:N개로 존재를 해야 하는데,
그렇지 않을 경우 즉, 1:0으로 된 데이터를 가져와야 할 경우도 있습니다.
보통의 테이블 조인을 INNER JOIN이라 말을 하고,
저런 데이터가 없는 경우에도 가져와야 하는 JOIN을 OUTER JOIN 이라고 합니다.
아래와 같은 테이블이 있습니다.
select * from table1;
field1 field2 field3
200901 1 40
200901 2 40
200901 3 40
200901 4 40
200901 5 40
200901 6 40
200901 7 40
200901 8 40
select * from table2;
field1 field2 field3
200901 1 50
200901 2 60
200901 3 70
200901 4 80
INNER JION의 경우, 평소에 하던 대로 하면 됩니다.
SELECT a.*, b.*
FROM table1 a, table2 b
WHERE a.field1 = a.field1
AND a.field2 = b.field2
굳이 다른 방식으로 이해하려 하지 않아도 됩니다.
위 테이블 두개를 묶어서 관련된 데이터 b.field3값도 확인하고 싶습니다. 이때, 없는 레코드의 경우도 보여주고 싶을 때는 OUTER JOIN을 사용하게 됩니다.
OUTER JOIN의 경우는 좀 복잡합니다. 물론 INNER JOIN 의 정확한 것을 배워도 되지만,
일단 FM은 아래와 같습니다.
SELECT a.*, b.field3
FROM table1 a OUTER JOIN table2 b ON a.field2 = b.field2
WHERE a.field1 = '200901'
JOIN 부분은 없어도 NULL 값으로 연결을 해주고,
WHERE 이하 구문은 INNER JOIN 형태로 연결을 해줍니다.
현재도 *= 문법을 지원을 하고 있으나,
몇가지 버그 등의 문제로 추천하는 문법은 아닙니다.
반응형