SUBQUERY : INLINE VIEW 인라인 뷰
2024. 3. 3. 15:37ㆍDBMS/SQLQuery
반응형
FROM 절에 오는 서브쿼리는 다른 테이블이나 뷰로부터 데이터를 가져올 수 있고 서브쿼리를 사용하여 데이터를 동적으로 처리할 수 있다.
서브쿼리를 사용하면 쿼리의 논리를 더 작은 논리 블록으로 분할하여 이해하기 쉽게 만들 수 있다.
EX
SELECT
D.DEPARTMENT_ID,
D.DEPARTMENT_NAME,
AVG_SALARY
FROM
(
SELECT
DEPARTMENT_ID,
ROUND(AVG(SALARY),2) AS AVG_SALARY
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
) SUB
JOIN DEPARTMENTS D ON SUB.DEPARTMENT_ID = D.DEPARTMENT_ID;
부서별 평균 급여를 계산하는 서브쿼리이다.
먼저 부서별 직원들의 평균을 낸 다음 각 부서의 평균 급여를 계산한다.
쿼리의 논리가 서브와 외부로 분할되어 가독성이 향상된다.
외부 쿼리는 속성의 역할을 명확하게 보여주며, 서브쿼리는 부서별 평균 급여를 계산하는 역할을 수행한다.
SELECT
DEPARTMENTS.DEPARTMENT_ID,
DEPARTMENTS.DEPARTMENT_NAME,
ROUND(AVG(EMPLOYEES.SALARY), 2) AS AVG_SALARY
FROM
EMPLOYEES
JOIN
DEPARTMENTS ON EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
GROUP BY
DEPARTMENTS.DEPARTMENT_ID,
DEPARTMENTS.DEPARTMENT_NAME;
인라인 뷰 대신 DEPTID와 DEPTNAME 을 그룹화 하여 사용함
코드의 중복을 줄이고 유지 보수를 단순화하기 위해 동일한 서브쿼리를 재사용 할 수 있다.
EX
WITH AVSAL AS (
SELECT
DEPARTMENT_ID,
ROUND(AVG(SALARY),2) AS AVG_SALARY
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
)
--서브쿼리로 부터 부서별 평균 급여를 가지고 옴
SELECT
D.DEPARTMENT_ID,
D.DEPARTMENT_NAME,
AVSAL.AVG_SALARY
FROM
DEPARTMENTS D
JOIN AVSAL ON D.DEPARTMENT_ID = AVSAL.DEPARTMENT_ID;
부서별 평균급여 이상을 받는 직원 추출
WITH AVSAL AS (
SELECT
DEPARTMENT_ID,
ROUND(AVG(SALARY),2) AS AVG_SALARY
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
)
--서브쿼리로 부터 부서별 평균 급여를 가지고 옴
SELECT
E.EMPLOYEE_ID,
E.FIRST_NAME,
E.LAST_NAME,
E.SALARY,
AVG_SALARY
FROM
EMPLOYEES E
JOIN AVSAL ON E.DEPARTMENT_ID = AVSAL.DEPARTMENT_ID
WHERE
E.SALARY>AVSAL.AVG_SALARY;
FROM 절의 서브쿼리를 사용하면 실행 시점에 동적으로 데이터를 생성할 수 있다. 이는 특정 필터링 조건이나 계산된 열을 사용하여 데이터를 생성하는 데 유용하다.
EX
SELECT
DEPARTMENT_ID,
AVG(SALARY) AS AVG_DEPT_SALARY
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
SELECT
e.EMPLOYEE_ID,
e.FIRST_NAME,
e.LAST_NAME,
e.SALARY
FROM
EMPLOYEES e
JOIN
(
SELECT
DEPARTMENT_ID,
AVG(SALARY) AS AVG_DEPT_SALARY
FROM
EMPLOYEES
GROUP BY
DEPARTMENT_ID
) sub ON e.DEPARTMENT_ID = sub.DEPARTMENT_ID
WHERE
e.SALARY > sub.AVG_DEPT_SALARY;
FROM 절 평균 급여 계산 쿼리를 사용하여 이 평균 급여보다 높은 급여를 받는 직원들을 선택하여 출력함
실행 시점에서 동적으로 데이터를 생성하여 원하는 필터링이나 계산을 적용할 수 있다.
반응형
'DBMS > SQLQuery' 카테고리의 다른 글
PIVOT, CASE (0) | 2024.03.03 |
---|---|
파생 속성(Derived Attribute) (0) | 2024.03.03 |
IFNULL , NVL (0) | 2024.03.03 |
RATIO_TO_REPORT, 파티션 별 합계에서 차지하는 비율 (0) | 2024.03.03 |
집계 함수와 윈도우 함수 (0) | 2024.03.03 |