서브쿼리
- select 문 안에 다시 select 문이 기술된 형태의 쿼리
- 중첩쿼리라고도 부름

서브쿼리의 종류
- 단일 행 서브쿼리 : 하나의 행을 검색하는 서브쿼리
- 다중 행 서브쿼리 : 하나 이상의 행을  검색하는 서브쿼리
- 다중 열 서브쿼리 : 하나 이상의 열을 검색하는 서브쿼리

단일 행 연산자
=, >, >=, <, <=, <>, !=
- 사용처 : 단일 행 서브쿼리, 다중 열 서브쿼리

다중 행 연산자
IN : 같은 값 IN(10,20) 10이나 20이 포함
NOT IN : 같은 값이 아님 NOT IN(10,20) 10이나 20이 포함되지 않음
EXISTS : 값이 있으면 반환 EXISTS(10) 10이 존재하면 참
ANY : 최소한 하나라도 만족하는 것(OR) ANY(10,20) 10이나 20이 포함
ALL : 모두 만족하는 것(AND) ALL(10,20) 10과 20 포함
- 사용처 : 다중 행 서브쿼리, 다중 열 서브쿼리

단일 행 서브쿼리
- select 문에서 얻은 한 개 행의 결괏값을 메인 쿼리로 전달하는 서브쿼리
ex)
SELECT *
FROM employees A
WHERE A.salary = (
                  SELECT salary
                  FROM employees
                  WHERE last_name = 'De Haan'
                  );

다중 행 서브쿼리
- 하나 이상의 결과 행을 메인 쿼리에 전달하는 경우에 사용
ex)
SELECT *
FROM employees A
WHERE A.salary IN (
                   SELECT MIN(salary) 최저급여
                   FROM employees
                   GROUP BY department_id
                  )
ORDER BY A.salary DESC;

다중 열 서브쿼리
- 메인 쿼리 서브쿼리 비교하는 where 조건식에서 비교되는 열이 여러 개일 때 사용
ex)
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;


인라인 뷰
- FROM 절 서브쿼리 
ex)
SELECT *
FROM employees A,
                  ( SELECT  department_id
                    FROM    departments
                    WHERE   department_name = 'IT') B
WHERE A.department_id = B.department_id;

 

모두의 SQL 누구나 쉽게 배우는 데이터 분석 기초

김도연 지음 길벗

+ Recent posts