문제
다음 SQL문에서 비상관 서브쿼리의 논리적 실행 순서로 가장 적절한 것은?
SELECT 학번, 이름 FROM 학생 WHERE 학번 IN (SELECT 학번 FROM 수강 WHERE 과목명 = '데이터베이스');
① 외부 쿼리가 먼저 실행된 후 서브쿼리가 실행된다 ② 서브쿼리가 먼저 실행된 후 외부 쿼리가 실행된다 ③ 외부 쿼리와 서브쿼리가 동시에 실행된다 ④ 실행 순서는 데이터베이스 엔진이 임의로 결정한다
정답
2번
해설
비상관 서브쿼리는 외부 쿼리의 컬럼을 참조하지 않으므로 논리적으로 서브쿼리가 먼저 평가되어 결과 집합을 만들고, 외부 쿼리가 그 결과를 이용해 조건을 판단한다. 이 예제에서는 수강 테이블에서 '데이터베이스' 과목을 수강한 학번을 먼저 구한 뒤, 학생 테이블에서 해당 학번의 학생 정보를 조회한다. 단, 실제 DBMS 실행 계획에서는 최적화 과정에서 물리적 실행 방식이 달라질 수 있다.