- SUB QUERY (서브쿼리)
- SELECT문 안에 다시 SELECT문이 기술된 형태의 쿼리
- 단일 SELECT문으로 조건식을 만들기에는 조건이 부족할 때 또는 완전히 다른 테이블에서 데이터 값을 조회하여 메인 쿼리의 조건으로 사용하려 할때 유용
- 하나의 SQL문에 포함되어 있는 또다른 SQL문을 의미함
- 사용방법
-- 서브쿼리를 괄호로 감싸서 사용
-- 서브쿼리는 단일 행 또는 복수 행 비교연산자와 함께 사용 가능
-- 서브쿼리에서는 ORDER BY를 사용하지 못함
- 사용가능한 위치
SELECT, FROM, WHERE, HAVING ORDER BY, INSERT 문에 VALUES 절
- 서브쿼리 분류
- 단일행 서브 쿼리
서브쿼리가 단일 행 비교 연산자 (=>, <, <<, >, >>, <>> 와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 함
만약 결과가 2건 이상인 경우 오류가 발생

그룹함수 사용 경우 결과 값이 1건이므로 단일행 서브쿼리 사용 가능
-
다중행 서브 쿼리
서브쿼리의 결과가 2건 이상 반환될수 있는 경우 다중 행 비교 연산자 (IN, ALL, ANY, SOME) 와 함께 사용

--서브쿼리에서 여러행 발생하는 경우 사용

-
FROM 절에 사용하는 서브 쿼리
인라인 뷰 라고 함
FROM 절에 테이블명만 오도록 되어 있으나 동적생성된 테이블형태로 사용 인라인뷰는 SQL문이 실행될때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음
인라인뷰는 동적으로 조인방식을 사용한것 같음

- 다중행 연산자 (ALL, ANY, EXISTS)
서브쿼리 작성시 고려해야할 점, 서브쿼리의 결과 값이 단일 튜플이 나올수 있지만 다중 튜플일 경우도 있음
- ALL (다중 튜플에서 and 결과로 연산이 되는데 사용)

-
ANY (다중 튜플에서 or 결과로 연산이 되는데 사용)

-
EXISTS / NOT EXISTS
(데이터가 존재할 경우와 존재하지 않을 경우 특정 액션을 해야 할 경우)
서브쿼리에 해당하는 튜플이 적어도 한건 이상 존재하면 'TRUE' 없으면 'FALSE' 를 리턴하며, 서브쿼리에 일치 하는 결과가 한건이라도 있으면 쿼리를 더 이상 수행 하지 않음 (SELECT, INSERT, UPDATE, DELETE 에서 사용 가능)

- 서브쿼리를 활용한 DDL
테이블의 구조와 정보를 복사하는 벙법

- 서브쿼리를 활용한 DML
테이블의 구조와 정보를 복사하는 벙법
