스칼라 서브쿼리(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;
오늘은 AI 생태계에 혁신적인 변화를 가져올 것으로 예상되는 MCP(Model Context Protocol)에 대해 상세히 알아보겠습니다. 2024년…
1. TPM이란? TPM(Trusted Platform Module)은 국제 표준 기반의 보안 하드웨어 칩으로, 컴퓨터나 디지털 장비 내에서…
시즌2, 기대했는데... 실망도 두 배!두뇌싸움을 기대했는데, 전략도 없는 자기들만의 감정에 따른 편가르기, 정치싸움이 되어 버린…
BPF(Berkeley Packet Filter) 도어는 해커가 관리자 몰래 뒷문을 새로 만든 것입니다.해커가 명령을 내려 특정 데이터들을 뒷문을…
1. IPC의 개념과 목적 1.1 IPC란 무엇인가? IPC (Inter-Process Communication)는 운영체제 내의 서로 독립적인 프로세스…