▶서브쿼리(subQuery)란?
메인쿼리(Main Query)에 반대되는 개념으로 이름을 붙힌 것으로 메인쿼리를 구성하는 소단위 쿼리이다.
▶서브쿼리(subQuery) 사용이유
예를들어 평균급여보다 적게 받는 사람을 구하는 쿼리문을 작성한다고 해보자
*평균 급여를 구하는 쿼리문
1
2
3
|
SELECT round(avg(SALARY))
FROM EMPLOYEES e
;
-- 6,462 |
cs |
우린 우선 평균 급여를 구하는 쿼리문을 작성하여 평균 값을 구한 후
*평균급여(6462)보다 적게 받는 직원을 구하는 쿼리문
1
2
3
4
5
|
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME, SALARY
FROM EMPLOYEES e
WHERE SALARY < 6462
ORDER BY SALARY
;
|
cs |
구해진 평균값을 통해 where절로 데이터를 구할 것이다. 그런데 연봉은 언제든지 변경이 될 수 있다.다음달에 1명이 퇴사할 수 도 있고 내년엔 직원들의 월급이 일괄적으로 인상되어 전체적인 평균값이 올라갈 수 있는것이다. 쿼리문을 유동적으로 사용을 할 수 없으니 사람들은 많은 불편을 느꼈고 사람들은 서브쿼리문을 생각해낸다.
▶서브쿼리(subQuery) 사용방법
*서브쿼리문을 활용한 평균급여보다 적은 급여를 받는 직원의 이름을 구하는 쿼리문
1
2
3
4
5
|
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME, SALARY
FROM EMPLOYEES e
WHERE SALARY < (SELECT round(avg(SALARY)) FROM EMPLOYEES e )
ORDER BY SALARY
;
|
cs |
서브쿼리문은 기본적으로 Main쿼리 문에 넣어서 사용을 한다.
서브쿼리문의 처리해야하는 길이가 길지 않으면 가독성을 위해 일자로 처리를 하는 것이 보통이다.
1
2
3
4
5
|
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME, SALARY
, (SELECT round(avg(SALARY)) FROM EMPLOYEES e )
FROM EMPLOYEES e
WHERE SALARY < (SELECT round(avg(SALARY)) FROM EMPLOYEES e )
ORDER BY SALARY
|
cs |
서브쿼리문은 select, insert, deletel, update 모두 사용이 가능하며 서브 쿼리의 결과 집합을 메인 쿼리가 중간 결과값으로 사용한다. 해당 쿼리문은 select 결과값이 6462가 되어야하니 조건문 where에 넣어 데이터를 출력했다.
where 절에는 직계함수를 사용할 수 없어 havaing 절 혹은 group by를 사용해야하는데 굳이 그룹으로 묶을 필요가 없는 경우에 서브쿼리를 활용할 수도 있다.
'국비필기노트 > DBMS_Oracle' 카테고리의 다른 글
데이터베이스(DBMS)_오라클데이터타입(Oracle Data Type), 문자데이터타입(Char(n), varchar2(n)),숫자데이터타입(Numver(p,s)), LOB 데이터타입, 날짜데이터타입 (0) | 2022.04.19 |
---|---|
데이터베이스(DBMS)_DDL(CREAT,DROP,ALTER,TRUNCATE), INSERT, UPDATE, DELETE (0) | 2022.04.19 |
데이터베이스(DBMS)_조인(Join) (0) | 2022.04.15 |
데이터베이스(DBMS)_오라클 Select 함수 (0) | 2022.04.08 |
데이터베이스(DBMS)_Select문 구성방법, 알리아스 (0) | 2022.04.07 |