DAY16(2) - 서브쿼리

은나현·2023년 2월 13일
0

📌 1. 서브쿼리(subQuery)

  • 메인쿼리(Main Query)에 반대되는 개념으로 이름붙인 것으로, 메인쿼리를 구성하는 소단위 쿼리이다.
    • select, insert, delete, update 절에서 모두 사용된다.
    • 서브쿼리 자체는 일반 쿼리와 다를 바가 없으며, 서브쿼리의 결과 집합을 메인쿼리가 중간 결과값으로 사용할 수 있다.

📍 1-1. 서브쿼리 사용 예시

  • EMPLOYEES 테이블에서 직원 평균 급여보다 낮은 급여를 받는 직원 정보를 가져온다.

    SELECT 	*
    FROM 	EMPLOYEES e 
    WHERE 	SALARY < (	SELECT 	ROUND(AVG(SALARY))
    					FROM 	EMPLOYEES e )
    ;
  • LOCATIONS 테이블에서 COUNTRY_IDUSLOCATION_ID값을 갖는 지역 정보를 가져온다.

    SELECT	*
    FROM 	LOCATIONS l 
    WHERE 	LOCATION_ID IN (SELECT	LOCATION_ID 
    						FROM 	LOCATIONS l 
    						WHERE 	COUNTRY_ID = 'US'
    						)
    ;
  • EMPLOYEES 테이블을 DEPARTMENT_ID로 그룹지어 DEPARTMENT_ID가 100인 부서의 최소급여보다 최소 급여가 높은 부서를 HAVING으로 가져온다.

    SELECT	* 
    FROM 	EMPLOYEES e 
    GROUP BY DEPARTMENT_ID 
    HAVING  MIN(SALARY) > (	SELECT	MIN(SALARY)
    						FROM 	EMPLOYEES e
    						WHERE 	DEPARTMENT_ID = 100)	
    ;
  • EMPLOYEES 테이블을 JOB_ID로 그룹지어 직무별 최소급여를 갖는 테이블을 구하고, JOB_IDSALARY가 해당 테이블과 일치하는 직원, 즉 직무별로 최소급여를 받는 직원 정보를 구한다.

    SELECT 	*
    FROM 	EMPLOYEES e 
    WHERE 	(JOB_ID,SALARY) IN(	SELECT	JOB_ID	,	MIN(SALARY)  
    							FROM	EMPLOYEES e 
    							GROUP BY	JOB_ID)
    ;
  • 서브쿼리를 사용한 조건도 AND으로 나열할 수 있다.

    SELECT	*
    FROM 	EMPLOYEES e 
    WHERE 	JOB_ID = (	SELECT	JOB_ID 
    					FROM 	EMPLOYEES e
    					WHERE 	EMPLOYEE_ID = 123)
    AND 	SALARY > (	SELECT	SALARY 
    					FROM 	EMPLOYEES e
    					WHERE 	EMPLOYEE_ID = 192)
    ;

0개의 댓글