1. 서브쿼리(subQuery)
- Main Query에 반대되는 개념으로 이름을 붙인 것
- 메인 쿼리를 구성하는 소단위 쿼리
- SELECT, INSERT, DELETE, UPDATE 절에서 모두 사용 가능
- 서브쿼리의 결과 집합을 메인 쿼리가 중간 결과값으로 사용
- 서브쿼리 자체는 일반 쿼리와 다를 바가 없다.
-- 1. 평균 급여보다 적은 사람 구하기
-- 평균 급여
SELECT ROUND(AVG(SALARY))
FROM EMPLOYEES e
;
-- 6,462가 출력됨
-- 구한 6,462를 타이핑 해서 사용
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME , SALARY
FROM EMPLOYEES e
WHERE SALARY < 6462
ORDER BY SALARY
;
-- 평균 급여를 타이핑 할 경우 평균 급여가 변경될 시 쿼리를 변경해야 한다.
-- 하지만 평균 급여를 서브쿼리로 하여 메인쿼리를 작성하면 변경할 필요가 없다.
SELECT EMPLOYEE_ID , FIRST_NAME , LAST_NAME , SALARY
FROM EMPLOYEES e
WHERE SALARY < (SELECT ROUND(AVG(SALARY)) FROM EMPLOYEES e )
ORDER BY SALARY
;
-- 2. locations 테이블에서 country_id가 'US'인 location_id를 가진 부서 전체를 조회
-- country_id가 'US'인 location_id
SELECT LOCATION_ID
FROM LOCATIONS l
WHERE COUNTRY_ID = 'US'
;
-- 1400, 1500, 1600, 1700 출력됨
-- 구한 LOCATION_ID를 타이핑 해서 조회
SELECT *
FROM DEPARTMENTS d
WHERE LOCATION_ID IN (1400, 1500, 1600, 1700)
;
-- 서브쿼리를 사용해서 조회
SELECT *
FROM DEPARTMENTS d
WHERE LOCATION_ID IN (SELECT LOCATION_ID
FROM LOCATIONS l
WHERE COUNTRY_ID = 'US')
;
2. 예제
-- 1. 월급이 가장 적은 사람의 first_name, last_name 출력
SELECT min(SALARY)
FROM EMPLOYEES e
;
SELECT FIRST_NAME , LAST_NAME
FROM EMPLOYEES e
WHERE SALARY = (SELECT min(SALARY) FROM EMPLOYEES e )
;
-- 2. 월급이 가장 많은 사람의 first_name, last_name, job_title 출력
SELECT MAX(SALARY)
FROM EMPLOYEES e
;
SELECT e.FIRST_NAME , e.LAST_NAME , j.JOB_TITLE
FROM EMPLOYEES e
LEFT OUTER JOIN JOBS j ON e.JOB_ID = j.JOB_ID
WHERE SALARY = (SELECT MAX(SALARY)
FROM EMPLOYEES e )
;
-- 3. employees 테이블에서 Kochhar의 급여보다 많은 사원의
-- 사원번호, 이름, 담당업무(job_id), 급여를 출력하라
SELECT SALARY
FROM EMPLOYEES e
WHERE LAST_NAME = 'Kochhar'
;
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , SALARY
FROM EMPLOYEES e
WHERE SALARY > (SELECT SALARY
FROM EMPLOYEES e
WHERE LAST_NAME = 'Kochhar')
;
-- 4. employees 테이블에서 급여의 평균보다 적은 사원의
-- 사원번호, 이름, 담당업무, 급여, 부서번호를 출력하라
SELECT AVG(SALARY)
FROM EMPLOYEES e
;
SELECT EMPLOYEE_ID , FIRST_NAME , JOB_ID , SALARY , DEPARTMENT_ID
FROM EMPLOYEES e
WHERE SALARY < (SELECT AVG(SALARY)
FROM EMPLOYEES e)
;
728x90
'이론 > 자바 풀스택 국비수업' 카테고리의 다른 글
220420 데이터베이스 COMMIT, ROLLBACK (0) | 2022.04.28 |
---|---|
220419~20 데이터베이스 데이터타입, DDL, DML (0) | 2022.04.28 |
220415~18 데이터베이스 JOIN (0) | 2022.04.27 |
220411 ~ 14 데이터베이스 SELECT 함수 4 (0) | 2022.04.27 |
220411 데이터베이스 SELECT 함수 3 (0) | 2022.04.27 |