스칼라 서브쿼리(Scalar Subquery)는 단일 값을 반환하는 서브쿼리입니다.
즉, SELECT 문이 실행될 때 하나의 행과 하나의 열(단일 값)만 반환하는 서브쿼리를 의미합니다.
✔ 반환 값이 반드시 하나(1개 행, 1개 열)
✔ 메인 쿼리의 컬럼과 함께 사용할 수 있음
✔ 각 행마다 실행될 수 있어 성능 저하 가능
✔ NULL을 반환할 수도 있음
SELECT emp_id, name,
(SELECT AVG(salary) FROM salaries WHERE emp_id = e.emp_id) AS avg_salary
FROM employees e; ✅ 각 직원(emp_id)에 대한 평균 급여(avg_salary)를 반환
✅ 각 행마다 서브쿼리가 실행됨(성능 고려 필요)
SELECT emp_id, name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees); ✅ 전체 직원 평균 급여보다 높은 급여를 가진 직원 검색
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > (SELECT AVG(salary) FROM employees); ✅ 전체 평균 급여보다 높은 부서만 표시
SELECT emp_id, name, salary
FROM employees
ORDER BY (SELECT department_name FROM departments WHERE dept_id = employees.dept_id); ✅ 부서 이름 기준으로 정렬
✔ 단순하고 직관적 (서브쿼리를 활용하여 값을 쉽게 조회 가능)
✔ 다양한 SQL 절에서 사용 가능
✔ 단일 값 반환으로 컬럼처럼 활용 가능
❌ 각 행마다 서브쿼리를 실행해야 하므로 성능이 저하될 수 있음
❌ 여러 개의 값을 반환하면 오류 발생 (Subquery returns more than 1 row 오류)
1️⃣ 인덱스 활용
2️⃣ JOIN으로 대체
SELECT e.emp_id, e.name, s.avg_salary
FROM employees e
LEFT JOIN (SELECT emp_id, AVG(salary) AS avg_salary FROM salaries GROUP BY emp_id) s
ON e.emp_id = s.emp_id; ✅ 스칼라 서브쿼리 대신 조인을 사용하여 성능 개선
3️⃣ 서브쿼리 결과를 CTE(공통 테이블 표현식)로 변경
WITH avg_salaries AS (
SELECT emp_id, AVG(salary) AS avg_salary FROM salaries GROUP BY emp_id
)
SELECT e.emp_id, e.name, a.avg_salary
FROM employees e
LEFT JOIN avg_salaries a
ON e.emp_id = a.emp_id; 요양원 선택 전 반드시 확인해야 할 체크리스트를 공개합니다. 공식 평가 자료 조회법, 방문 시 확인…
공공기관 채용 비리의 실태와 피해 지원자의 대응법을 정리했습니다. 채용 비리 신고 방법, 공익신고자 보호제도, 취준생…
주식 손실을 세금 절약에 활용하는 합법적 방법을 공개합니다. 해외주식 손익통산, ISA 계좌 활용, 연금계좌 절세까지…
배달이 예상 시간보다 크게 늦으면 취소·환불을 요청할 수 있습니다. 배달앱별 지연 취소 방법과 잘못 배달됐을…
통신비 절약의 핵심은 요금제 최적화입니다. 내 데이터 사용량 확인법, 알뜰폰 전환 비교, 위약금 없이 요금제…