참고도서: 모두의 SQL(길벗) 7장 http://www.yes24.com/Product/Goods/64434562?OzSrank=1
모두의 SQL
난생처음 SQL로 데이터를 분석하고 가공해야 한다면? 초보자와 비전공자를 위한 가장 쉬운 SQL 입문서인터넷이 발전하고 페이스북과 같은 소셜 미디어가 활성화되면서 데이터로 모든 것을 말하
www.yes24.com
---- 모두의 SQL 7장: 서브쿼리 - SELECT 문 안에 있는 SELECT 문 ----
--- 1) 단일 행 서브쿼리
SELECT FIRST_NAME FROM EMPLOYEES
WHERE SALARY = (SELECT MIN(SALARY) FROM EMPLOYEES);
-- 예제 7-1. 'De Haan'과 salary가 동일한 직원
SELECT *
FROM EMPLOYEES A
WHERE A.SALARY = (
SELECT SALARY FROM EMPLOYEES
WHERE LAST_NAME = 'De Haan'
); -- '=': 단일 행 연산자
-- 'Taylor'와 salary가 동일한 직원은?
SELECT SALARY FROM EMPLOYEES WHERE LAST_NAME = 'Taylor'; -- 서브쿼리
SELECT *
FROM EMPLOYEES A
WHERE A.SALARY = (
SELECT SALARY FROM EMPLOYEES
WHERE LAST_NAME = 'Taylor'
);
-- 서브쿼리가 다중 행일 경우 단일 행 연산자를 사용할 수 없음
-- 즉, A.SALARY = 8600이면서 3200일수는 없음
-- '=any' 등 연산자를 추가해줄 경우 해결 가능
--- 2) 다중 행 서브쿼리
-- 예제 7-2. department_id별로 가장 낮은 salary 조회, 해당 직원은 누구인가?
SELECT MIN(SALARY) 최저급여 FROM EMPLOYEES GROUP BY DEPARTMENT_ID; -- 서브쿼리
SELECT *
FROM EMPLOYEES A
WHERE A.SALARY IN (
SELECT MIN(SALARY) 최저급여 FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)
ORDER BY A.SALARY DESC; -- 'IN': 다중 행 연산자
-- '=ANY': 다중 행 연산자로, ANY와 ALL은 반드시 비교 연산자(>/=/<)를 앞에 같이 써야 함
SELECT *
FROM EMPLOYEES A
WHERE A.SALARY =any (
SELECT MIN(SALARY) 최저급여 FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
)
ORDER BY A.SALARY DESC;
--- 3) 다중 열 서브쿼리: WHERE 조건식에서 비교되는 열이 여러 개일 때 사용
-- 예제 7-3. job_id별로 가장 낮은 salary 조회, 해당 직원은 누구인가?
SELECT JOB_ID, MIN(SALARY) 그룹별급여 FROM EMPLOYEES GROUP BY JOB_ID; -- 서브쿼리
SELECT * FROM EMPLOYEES A
WHERE (A.JOB_ID, A.SALARY) IN (
SELECT JOB_ID, MIN(SALARY) 그룹별급여
FROM EMPLOYEES
GROUP BY JOB_ID
)
ORDER BY A.SALARY DESC;
--- 4) FROM절 서브쿼리: 인라인 뷰
SELECT *
FROM EMPLOYEES A,
(SELECT TO_CHAR(HIRE_DATE, 'YYYY'), SUM(SALARY)
FROM EMPLOYEES
GROUP BY TO_CHAR(HIRE_DATE, 'YYYY')) B;
-- 예제 7-4. 직원 중 department_name이 IT인 직원의 정보를 인라인 뷰를 이용해 출력
SELECT * FROM EMPLOYEES A,
( SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'IT') B
WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID;
'데이터 [Data] > SQL' 카테고리의 다른 글
강의내용 정리: Data Modeling 기본 (0) | 2021.06.30 |
---|---|
SQL DML 실습 코드 (0) | 2021.05.14 |
SQL 조인 실습 코드 (0) | 2021.05.14 |
SQL 함수 실습 코드 (0) | 2021.05.13 |
SQL SELECT문 실습 코드 (0) | 2021.05.13 |
댓글