더북(TheBook)

지금까지 봐왔던 쿼리보다 약간 복잡하군요. 하지만 그리 어렵지는 않으니 차근차근 살펴보도록 하죠. 쿼리 10-3은 부서를 기준으로 각 부서에 속한 사원의 사원번호, 이름, 주소를 조회하는 쿼리입니다. 이 쿼리의 FROM 절에서 괄호로 묶인 컬러로 표시된 부분이 인라인 뷰입니다. 이것부터 먼저 살펴봅시다. 이 인라인 뷰는 사원정보와 주소정보 테이블을 address_id 컬럼을 통해 조인해 사원번호, 사원 명, 주소, 부서번호를 가져오고 있습니다. 이 인라인 뷰는 FROM 절에서 독립적인 하나의 테이블처럼 동작합니다.

이 인라인 뷰 서브쿼리 전체를 k란 별칭을 주어 k란 이름으로 참조할 수 있습니다. 즉, 메인쿼리의 SELECT 절에서 이 서브쿼리에서 반환되는 컬럼들 앞에 ‘k.’을 붙여 참조했죠. 그리고 가장 중요한 부분인 부서정보 테이블과 서브쿼리와의 조인은 dept_id 컬럼을 사용하고 있습니다. 특히 주의할 점은 서브쿼리 내의 dept_id( b.dept_id )는 WHERE 절에서 메인 쿼리와의 조인을 위해 필요한 컬럼이므로( WHERE a.dept_id = k.dept_id ) 반드시 명시해야 합니다.

쿼리 10-3에서는 외부 조인이 아닌 내부 조인을 사용했기 때문에 부서정보 테이블 중 ‘IT팀’은 조회되지 않았습니다. 마찬가지로 사원정보 테이블에서 주소 값이 없는(사원정보 테이블의 address_id 값이 NULL인 건) ‘왕건’ 데이터는 서브쿼리 자체에서 조회되지 않았기 때문에 최종 결과에 포함되지 않았습니다. 또한, 부서정보 테이블에서 유효한 부서( a.use_yn = 'Y' )만 조회하도록 WHERE 절에 조건을 주었습니다. 물론 현재 모든 부서가 유효한 부서이므로 최종 결과에 별 영향을 끼치지는 않았죠.

약간 복잡하긴 하지만 이해하기 어려운 개념은 아닐 거예요. 만약 한 번에 이해가 안 되면 여러 번 다시 읽고 실습해 보세요. 서브쿼리 중에 제일 많이 사용하는 것이 FROM 절에서 사용하는 인라인 뷰이므로 쿼리 10-3의 구문과 실행 결과를 보면서 꼭 이해하고 넘어가도록 하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.