서브쿼리(SubQuery)
일반적인 쿼리문 안에 또 다른 쿼리문이 삽입되는 형태입니다.
모든 데이터 조작어 (SELECT,INSERT,DELETE,UPDATE)안에서 모두 사용 가능합니다.
서브쿼리의 기본형
평균 급여보다 적게 받는 사람의 EMPLOYEE_ID,FIRST_NAME,LAST_NAME를 출력하려고 합니다.
이를 위해서는 2개의 SELECT 구문이 필요합니다.
SELECT ROUND(AVG(SALARY)) FROM EMPLOYEES;
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME FROM EMPLOYEES WHERE SALARY < 6462;
서브쿼리를 이용하면 하나의 SELECT 구문을 생성할 수 있습니다.
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME
FROM EMPLOYEES
WHERE SALARY < (SELECT ROUND(AVG(SALARY)) FROM EMPLOYEES);
조건이 적용된 서브쿼리
아래 서브쿼리 이용 값과 동일 합니다.
SELECT * FROM DEPARTMENTS WHERE LOCATION_ID IN(1400,1500,1700);
-- 조건이 여러개 일때 서브쿼리를 이용하여 WHERE 조건에 넣을 수 있습니다.
SELECT * FROM DEPARTMENTS WHERE LOCATION_ID IN (SELECT LOCATION_ID
FROM LOCATIONS
WHERE COUNTRY_ID = 'US');
-- 급여가 가장 적은 사람 출력
SELECT EMP.FIRST_NAME , EMP.LAST_NAME, JOB.JOB_TITLE
FROM EMPLOYEES EMP, JOBS JOB
WHERE EMP.SALARY = (SELECT MIN(SALARY) FROM EMPLOYEES)
AND EMP.JOB_ID = JOB.JOB_ID;
Any , ALL
Any를 적용한 서브쿼리
-- DEPARTMENT_ID = 20 인 사람의 최소 급여보다 큰 'ANY(모든) 사람'을 출력합니다.
SELECT EMPLOYEE_ID, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
WHERE SALARY > ANY (SELECT SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 20);
All를 적용한 서브쿼리
-- DEPARTMENT_ID = 20 인 사람의 최대 급여보다 큰 'ALL(모든) 사람'을 출력합니다.
SELECT EMPLOYEE_ID, DEPARTMENT_ID, SALARY
FROM EMPLOYEES
WHERE SALARY > All (SELECT SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = 20);
'DataBase > Oracle' 카테고리의 다른 글
10. Oracle DML(Insert, Update, Delete) (0) | 2020.03.26 |
---|---|
9. Oracle DDL(Table 정의) (0) | 2020.03.26 |
7. Oracle 조인 (0) | 2020.03.26 |
6. Oracle GroupBy, Having 절 (0) | 2020.03.25 |
5. Oracle 날짜 함수 (0) | 2020.03.25 |