서브쿼리: 스칼라·인라인 뷰·상관 서브쿼리, DB별 차이
서브쿼리: 스칼라·인라인 뷰·상관 서브쿼리, DB별 차이
쿼리 하나로 안 되는 조회는 대부분 쿼리 안에 쿼리를 넣어 풉니다. "전체 평균보다 많이 받는 사람", "부서별 최고 급여자" 같은 요구는 서브쿼리 없이는 쓰기 어렵습니다. 이 레슨은 서브쿼리가 SELECT·FROM·WHERE 절 어디에 들어가는지, 상관 서브쿼리가 왜 행마다 다시 실행되는지, 상위 N 조회 문법이 Oracle·MySQL·MSSQL 에서 왜 다른지를 직접 실행해 확인합니다. EXISTS 와 NOT EXISTS 의 본격적인 활용은 다음 레슨에서 다룹니다.
1. 왜 배우는가
실무 조회의 상당수는 "평균과 비교", "그룹별 1등", "다른 테이블에 있는지 확인" 형태입니다. 이런 조건은 집계 함수 하나로는 표현이 안 되고, 쿼리 결과를 다시 조건이나 데이터 소스로 쓰는 서브쿼리가 필요합니다.
서브쿼리는 위치에 따라 이름과 역할이 다릅니다. SELECT 절에 오면 스칼라 서브쿼리, FROM 절에 오면 인라인 뷰, WHERE 절에 오면 조건으로 씁니다. 셋을 구분하지 못하면 "왜 여러 행이 반환됐다는 오류가 날까" 같은 실수를 반복하게 됩니다.
페이징 화면의 상위 N 조회는 DB마다 문법이 다릅니다. Oracle 은 ROWNUM 을 인라인 뷰와 묶어 쓰고, MySQL 은 LIMIT, MSSQL 은 TOP 을 씁니다. 이 차이를 모르면 개발 DB에서 만든 쿼리가 운영 DB로 넘어갈 때 그대로 깨집니다.