dongdorodongdong
서브쿼리 본문
- 서브쿼리
- 정의
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문 - 특징
- 괄호로 감싸서 사용
- 서브쿼리에서 ORDER BY절 사용X (ORDER BY절은 메인쿼리의 마지막 문장에 위치)
- SELECT 절, FROM 절, HAVING 절, ORDER BY 절 등에서 사용 가능 - 종류
- 연관 서브쿼리
> 서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태의 서브쿼리
>
WHERE sal > (SELECT MAX(sal) FROM emp e2 WHERE e2.name = e1.name)
- 비연관 서브쿼리
> 서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태의 서브쿼리
> 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용
- 단일 행 서브쿼리
> 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미
> 단일 행 비교 연산자(=, <, <=, >, >=, <>)
>
WHERE a1 = (SELECT a1 FROM BOX WHERE name = 'apple')
WHERE sal > (SELECT sal FROM emp WHERE ename = 'dong')
- 다중 행 서브쿼리
> 서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미
> 다중 행 비교 연산자(IN, ALL, ANY, SOME, EXISTS)
IN |
서브쿼리 결과에 존재하는 임의의 값과 동일한 조건 |
ALL |
서브쿼리 결과에 존재하는 모든 값을 만족하는 조건 |
ANY |
서브쿼리 결과에 존재하는 어느 하나의 값이라도 만족하는 조건 |
EXISTS |
서브쿼리 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건 |
>
WHERE sal > ANY (SELECT sal FROM emp WHERE name = 'dong')
WHERE sal < ALL (SELECT sal FROM emp WHERE name = 'dong')
- 다중 컬럼 서브쿼리
> 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것
> Oracle만 지원
- 스칼라 서브쿼리
> SELECT 절에서 사용되는 서브쿼리
> 한 행, 한 컬럼 만을 반환하는 서브쿼리
> JOIN으로도 변경이 가능
- Inline View, Dinamic View
> FROM 절에서 사용되는 서브쿼리
> 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있음
> DB에 해당 정보가 저장되지 않음