스칼라 서브쿼리(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; 1. 타입스크립트 개요 타입스크립트(TypeScript)는 마이크로소프트(Microsoft)가 개발한 자바스크립트(JavaScript)의 상위 집합(Superset) 언어입니다.즉, 자바스크립트에 정적 타입(Static Type)을 추가하고,…
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…