SQL LEFT OUTER JOIN
LEFT OUTER JOIN 구문이 실무에서 나와서 정의에 대해 예전에 SQL 공부할 때 정리했던 노트를 다시 꺼내어 찾아보았다. FROM 뒤에 LEFT OUTER JOIN 의 왼쪽에 위치한 테이블을 100의 Base로 두고 LEFT OUTER JOIN 우측의 테이블을 위치시키는 것인데, 일반 조인문으로도 활용이 가능하며 일반 조인문으로 활용 시에는 우측 테이블 끝에 (+)를 표현하는 것같다. SQLD를 한번에 합격했지만 당시에 공부했던 내용은 약간 암기형으로 현재는 머릿속에 남아있지 않아, SQLD 공부할 때 정리했던 노트와 책을 다시 꺼내어, 이제는 실무에서 활용할 수 있게 머릿속에 다시 넣고 익숙해질 수 있게 정리해 보려고 한다.
아래는 SQLD 자격증 취득하려고 공부할 당시 책. SQL 자격검정 실전문제 내용을 보고 노트에 정리한 내용인데 다시 올려본다.
오라클에서는 Outer Join 구문을 (+)기호를 사용하여 처리할 수 있으며, 이를 ANSI 문장으로 변경하기 위해서는 Inner 쪽 테이블 조건절을 ON 절에 위치시켜야 정상적 Outer Join 수행할 수 있다.
LEFT OUTER JOIN: 좌측 테이블이 기준이 되어 결과를 생성한다. Table A 와 B가 있을 때 (table 'A'가 기준이 됨) A와 B를 비교해서 B의 Join 컬럼에서 같은 값이 있을 때 B 테이블에서 해당 데이터를 가져오고 B의 Join 컬럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 컬럼들은 Null값으로 채운다. Left Join으로 Outer 키워드를 생략해서 사용할 수 있다.
SELECT A.게시판ID, A.게시판명, COUNT(B.게시글ID) AS CNT
FROM 게시판A LEFT OUTER JOIN 게시글B
ON (A.게시판ID=B.게시판ID AND B.삭제여부='N')
WHERE A.사용여부='Y'
GROUP BY A.게시판ID, A.게시판명
ORDER BY A.게시판ID;
=
SELECT A.게시판ID, A.게시판명, COUNT(B.게시글ID) AS CNT
FROM 게시판A, 게시판B
WHERE A.게시판ID=B.게시판ID(+)
AND B.삭제여부(+)='N'
AND A.사용여부='Y'
GROUP BY A.게시판ID=A.게시판명
ORDER BY A.게시판ID;
출처: [책] SQL 자격검정 실전문제