728x90
동적 쿼리란?
데이터를 조회하다 보면, '이 조건일 땐 이 값', '다른 조건일 땐 다른 값'을 기준으로 조회하고 싶은 경우가 많다.
이럴 때 하드코딩된 WHERE
조건은 유연하지 못하다.
이럴때 바로 서브 쿼리를 활용하면 된다.
동적 쿼리는 행 시점에 조건이나 쿼리 구조가 유동적으로 바뀌는 SQL문을 갖기 때문에, 사용자의 입력, 조건, 상황에 따라 쿼리 자체가 달라진다.
정적 쿼리와 동적 쿼리의 차이점
정적 쿼리
- 고정된 방식으로 작성되고 실행되는 SQL 문
- 데이터나 다른 변수의 변화에 영향을 받지 않음
- 쿼리 구조가 고정됨
동적 쿼리
- 실행되는(런타임) 동안 생성되고 실행되는 SQL문
- 조건에 따라 쿼리 구조가 바뀜
서브 쿼리를 활용한 동적 쿼리 사용 예시
- 사원 정보를 저장하고 있는 emp 테이블
emp_id name job sal dept_id 1 Alice CLERK 2500 10 2 Bob MANAGER 4000 10 3 Charlie CLERK 2000 20 4 Dave SALESMAN 3000 30 5 Eva MANAGER 5000 20 6 Frank ANALYST 2700 30 - 부서 정보를 저장하고 있는 dept 테이블
dept_id dept_name location 10 HR SEOUL 20 IT BUSAN 30 SALES DAEGU
- 비교 대상 조건을 동적으로 지정할 경우
평균 급여보다 높은 사원을 찾으려는 경우
SELECT name, sal
FROM emp
WHERE sal > (SELECT AVG(sal) FROM emp);
- 다중 행 비교(
IN
,NOT IN
)
IT 부서와 같은 급여를 받는 사원을 찾으려는 경우
SELECT name, sal
FROM emp
WHERE sal IN (
SELECT sal FROM emp WHERE dept_id = 20
);
ANY
/ALL
비교
부서별 평균 급여가 전체 평균보다 높은 부서를 찾으려는 경우
SELECT name, sal
FROM emp
WHERE sal > ALL (
SELECT sal FROM emp WHERE dept_id = 20
);
EXISTS
/NOT EXISTS
부서별 평균보다 더 많이 받는 사원을 찾으려는 경우
SELECT dept_id
FROM dept d
WHERE EXISTS (
SELECT 1 FROM emp e WHERE e.dept_id = d.dept_id AND sal >= 3000
);
728x90
'DB' 카테고리의 다른 글
[DB] SQL - CREATE TABLE과 함께 쓰는 제약 조건이란? (0) | 2025.04.03 |
---|---|
[DB] SQL - 상호 연관 서브쿼리란? (0) | 2025.04.02 |
[DB] SQL - 단일 행, 다중 행, 다중 열 서브쿼리 개념 정리 (0) | 2025.04.01 |
[DB] SQL - 서브쿼리 개념 정리 (0) | 2025.04.01 |
[DB] SQL - JOIN에 사용되는 조건절(USING, ON)에 대해 알아보자. (0) | 2025.03.31 |