SUB QUERY
간단하게 보면 Query 안의 Query 라고 볼 수 있으며,
한개의 행(row)에서 결과 값이 반환되는 Query 이다.
SELECT 부분에서의 SUBQUERY 는 단일 ROW 단일 COLUMN (나오는 데이터가 한개, 컬럼 한개)
FROM 부분에서의 SUBQUERY 는 다중 ROW 다중 COLUMN
WHERE 부분에서의 SUBQUERY 는 다중 ROW 다중 COLUMN --> 가장 많이 사용한다고 한다.
/*
SELECT EMPLOYEE_ID, (SELECT FIRST_NAME, LAST_NAME FROM EMPLOYEES) -- 다중컬럼 사용x
SELECT EMPLOYEE_ID, (SELECT FIRST_NAME FROM EMPLOYEES) -- 다중row 사용x
*/
SELECT 부분에서의 SUB QUERY 예
-- SELECT (SUB QUERY)
SELECT employee_id, first_name,
(SELECT salary FROM employees WHERE employee_id = 100),
(SELECT COUNT(*) FROM employees)
FROM employees;
FROM 부분에서의 SUB QUERY 예
-- FROM (SUB QUERY)
SELECT employee_id, first_name, department_id
FROM ( SELECT employee_id, first_name, department_id
FROM employees
WHERE department_id = 20);
WHERE 부분에서의 SUB QUERY 예
-- WHERE (SUB QUERY)
SELECT first_name, salary
FROM employees
WHERE salary > ( SELECT AVG(salary)
FROM employees );
SELECT first_name, job_id, department_id
FROM employees
WHERE job_id IN( SELECT job_id
FROM employees
WHERE department_id = 90);
SUB QUERY를 활용한 예제문제 (hr계정)
1. 부서별로 가장 급여를 적게 받는 사원과 같은 급여를 받는 사원 모두를 선택.
2. 부서별로 가장 급여를 적게 받는 사원의 정보를 선택.
--예제1) 부서별로 가장 급여를 적게 받는 사원과 같은 급여를 받는 사원
SELECT department_id, first_name ||' '|| last_name, salary
FROM employees
WHERE salary IN (SELECT MIN(salary) FROM employees GROUP BY department_id)
ORDER BY department_id ASC;
--예제2) 부서별로 가장 급여를 적게 받는 사원의 정보
SELECT department_id, first_name, salary
FROM employees
WHERE (salary, department_id)
IN (SELECT MIN(salary), department_id FROM employees GROUP BY department_id )
ORDER BY department_id ASC;
'Language > SQL' 카테고리의 다른 글
Oracle SQL VIEW (0) | 2019.12.21 |
---|---|
Oracle SQL DML : INSERT, UPDATE, DELETE (추가, 수정, 삭제) (0) | 2019.12.21 |
Oracle SQL DML : SELECT 04(JOIN) (0) | 2019.12.21 |
Oracle SQL DML : SELECT 03(ORDER BY, GROUP BY, OVER ...) (0) | 2019.12.21 |
Oracle PL/SQL PL03 (Procedural extension to Structured Query Language) (0) | 2019.12.20 |