DataBase/Oracle

8. Oracle 서브쿼리

유가엘 2020. 3. 26. 17:49

7_SubQuery.sql
0.00MB

서브쿼리(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);