SQLD 서브쿼리, 그림 두 장으로 끝내기
SQLD를 준비하는 스터디방마다 빠지지 않고 올라오는 하소연입니다. 기출문제집을 펴면 괄호 안에 SELECT가 또 들어 있고, 그 안에 또 괄호가 있고… 어디서부터 읽어야 할지 막막하죠. 그런데 서브쿼리 문제는 사실 딱 두 가지만 잡으면 대부분 풀립니다. 실행 순서와 위치별 이름입니다.
1. 서브쿼리는 '괄호 안이 먼저'다
서브쿼리는 어렵게 생각할 필요 없이 수학의 괄호 계산과 똑같습니다. 3 × (1 + 2)에서 괄호 안 1 + 2를 먼저 계산하듯, SQL도 괄호 안의 SELECT가 먼저 실행되고 그 결과가 바깥 쿼리에 전달됩니다.
순서를 풀어보면 이렇습니다.
- 괄호 안 서브쿼리 SELECT AVG(급여) FROM 사원이 먼저 실행됩니다.
- 결과로 값 하나가 나옵니다. 예를 들어 평균 급여 350만 원
- 이 값이 바깥 쿼리의 조건에 대입되어, 실제로는 WHERE 급여 > 350만이 실행되는 셈입니다.
시험장에서 복잡한 서브쿼리 문제를 만나면, 괄호 안부터 결과를 종이에 적어두고 바깥 쿼리를 읽으세요. 이것만으로 오답의 절반이 사라집니다. '단, 메인쿼리의 값을 가져와 쓰는 '연관 서브쿼리'는 메인쿼리와 서브쿼리가 서로 값을 주고받으며 반복 실행됩니다.'
2. 위치가 바뀌면 이름이 바뀐다
서브쿼리 이론 문제의 단골은 '이 서브쿼리의 종류는?'입니다. 종류를 외우려 하면 헷갈리지만, 원리는 하나입니다.
서브쿼리가 문장의 어디에 있느냐로 이름이 정해집니다.
여기서 시험에 자주 나오는 함정 하나만 짚고 갑니다. 스칼라 서브쿼리가 2행 이상을 반환하면 에러입니다. '다중 행을 반환하는 서브쿼리를 SELECT 절에 쓸 수 있다'는 선지가 나오면 틀린 보기입니다. 반대로 WHERE 절에서 다중 행을 받으려면 '=' 대신 'IN, ANY, ALL'을 써야 하죠. 이 두 문장만 기억해도 서브쿼리 이론 문제는 사실상 끝입니다.
3. 실전 감각 점검: 이 문제 풀리나요?
Q. 이 쿼리가 반환하는 것은?
괄호 안부터 읽습니다. 급여가 500 이상인 사원들의 부서번호 목록이 먼저 나오고(다중 행이므로 IN 사용), 바깥 쿼리는 그 목록에 포함되는 부서의 이름을 반환합니다. 즉 '급여 500 이상인 사원이 한 명이라도 있는 부서의 이름'입니다.
이 정도가 자연스럽게 읽혔다면 서브쿼리 기본기는 잡힌 겁니다. 아직 멈칫했다면, 괄호 안 → 결과 메모 → 바깥 쿼리 순서를 몸에 익히는 연습이 더 필요합니다.
서브쿼리를 문제로 굳히고 싶다면
『빠르게 따는 SQLD』 1권 「2장 SQL 활용」에서는 오늘 다룬 내용을 상관 서브쿼리, EXISTS 동작 원리까지 확장해 다루고, 각 개념 뒤에 기출변형 문제를 배치해 바로 손으로 확인할 수 있게 구성했습니다. 해설은 정답의 이유뿐 아니라 나머지 보기가 왜 틀렸는지까지 '오답 노트' 방식으로 풀어냈습니다.
책 없이도 지금 바로 실력을 점검하고 싶다면, 골든래빗 CBT에서 SQLD 기출변형 문제를 실제 시험과 같은 화면으로 풀어볼 수 있습니다.
공부하다 막히는 부분은 빠따 SQLD 공식 카카오톡 질문방에서 저자에게 직접 물어볼 수 있습니다.
