SUB QUERY 란 ?

QUERY 안의 QUERY
한 개의 행(ROW, RECORD, 한 사람에 해당하는 데이터)에서 결과 값이 반환되는 QUERY

서브 칼럼이 *이 아닌 이상 서브 칼럼이랑 외부 칼럼이 같아야 한다.
사용 : 테이블이 있는데 걸러내서 산출하고 싶을 때

 

 

현재까지 배운 종류

- SELECT  단일 ROW 단일 COLUMN (산출되는 데이터는 한 개, 컬럼도 한 개)
- FROM    다중 ROW 다중 COLUMN
- WHERE   다중 ROW 다중 COLUMN(제일 많이 사용)


SELECT절 

-- hr 스키마

SELECT employee_id, first_name,
    (SELECT first_name -- 단일 COLUMN
        FROM employees
            WHERE employee_id = 100) -- 단일 ROW
FROM employees;


SELECT first_name,
    (SELECT SUM(salary) FROM employees),
    (SELECT AVG(salary) FROM employees)
FROM employees;


-- 평균월급에 내 월급이 얼마인지 비교

SELECT first_name, salary,  (SELECT AVG(salary) FROM employees)
FROM employees
WHERE department_id = 30;

 

 

 

FROM절

-- 100번 부서에 있는 사람만 걸러내서 테이블을 만듯 것
-- 그테이블의 값을 받아낸 것
-- 별칭으로도 내보낼 수 있다.

SELECT EMPNO, NAME ,SAL
FROM ( SELECT employee_id EMPNO, first_name NAME ,salary SAL
        FROM employees
         WHERE department_id = 100)
WHERE SAL > 8000;     


-- 부서번호가 50번, 급여가 6000이상인 사원

SELECT  employee_id, first_name, last_name, salary
FROM ( SELECT *
        FROM employees
        WHERE department_id = 50)
WHERE salary >= 6000;  


-- 업무별 급여의 합계, 인원수, 사원명, 월급

SELECT e.employee_id, e.first_name,j.급여합계, j.인원수
FROM employees e, (SELECT job_id, SUM(salary) 급여합계, COUNT(*) 인원수                   
                    FROM employees
                    GROUP BY job_id) j;




WHERE절

-- 평균 급여보다 많은 사원

SELECT employee_id, first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)
                FROM employees);


-- 부서 90인 사원의 업무명 

SELECT job_id, first_name, department_id
FROM employees
WHERE job_id IN (SELECT job_id
                FROM employees
                WHERE department_id = 90);


-- 부서별로 가장 급여를 적게 받는 사월의 급여와 같은 급여를 받는 사원

SELECT first_name, salary, department_id
FROM employees
WHERE salary IN (SELECT MIN(salary)
                    FROM employees
                        GROUP BY department_id);
                        
                        
-- 부서별로 가장 급여를 적게 받는 사원과 급여
-- GROUP으로만 못구할 때 서브쿼리 사용
SELECT first_name, employee_id, salary, department_id
FROM employees
WHERE (department_id, salary) IN (SELECT department_id, MIN(salary)
                                  FROM employees
                                  GROUP BY department_id);

+ Recent posts