스칼라 서브쿼리(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;
윈도우 운영체제의 노트북에서는 iPhone 유선 테더링이 잘 안되는 경우가 많습니다. 보통 iPhone의 드라이버가 설치가 안되있어서인…
안녕하세요, 혹시 이런 생각해 본 적 없으신가요? "내가 투자한 회사는 누가 감시하고, 어떻게 운영될까?" 오늘은…
1. Gemini CLI란 무엇인가요? Gemini CLI는 터미널 환경에서 직접 Gemini 모델과 상호작용할 수 있도록 만들어진…
과적합은 머신러닝에서 학습용데이터를 과하게 학습하여, 실제데이터를 예측하지 못하는 현상을 말합니다. 인공지능(AI)의 학습 방법은 우리가 시험공부를…