728x90
반응형
서브쿼리란?
다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다.
서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리또는 메인 쿼리라고 부르며, 서브 쿼리는 내부쿼리라고도 부른다.
이전에 단일 행 함수와 다중 행 함수에 대해 포스팅 한 적이 있다.
이번에는 서브 쿼리에 대한 단일 행 함수와 다중 행 함수를 알아보겠다.
단일 행 서브쿼리란?
수행 결과가 오직 하나의 행만을 반환하는 서브 쿼리를 갖는 것이다.
단일 행 서브 쿼리문에선 오직 하나의 행으로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내는데, 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =, >, >=, <, <=, <>를 사용해야한다.
EMP 테이블에서 WHERE절에 서브쿼리를 조건으로 주었다.
수행 결과로 오직 하나의 행만 반환하는 서브 쿼리로 단일 행 서브쿼리라고 한다.
서브 쿼리에서 그룹 함수 사용
평균 급여보다 많은 급여를 받는 사원을 검색해보았다.
이와 같이 비교 연산자를 사용하여 단 하나의 행을 반환하는 것을 단일 행 서브 쿼리라고 한다.
다중 행 서브쿼리란?
서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리이다.
다중 행 서브쿼리는 반드시 다중 행 연산자와 함께 사용해야한다.
다중 행 연산자 종류
- IN : 메인 쿼리의 비교조건('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중 하나라도 일치하면 참.
- ANY, SOME : 메인 쿼리의 비교조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참.
- ALL : 메인 쿼리의 비교조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참.
- EXIST : 메인 쿼리의 비교조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참.
IN 연산자
결과가 2개 이상 구해지는 쿼리문을 서브 쿼리로 기술할 경우 다중행 연산자와 함께 사용.
위 쿼리를 보면, DEPTNO의 값이 두개가 나왔다. 이 쿼리를 서브 쿼리로 사용할 경우 다중 행 서브 쿼리가 되는 것이다.
이처럼 2개 이상 구해지는 쿼리문에 조건절에 IN을 사용하여 다중 행 서브 쿼리를 알아보았다.
ALL 연산자
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다.
위 쿼리를 보면, SAL의 값 중 가장 큰 값이 2850이다.
> ALL 은 모든 비교값보다 크냐? 고 묻는 것이다. 따라서 위 값보다 모두 큰 값을 비교한다.
ANY / SOME 연산자
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참이다.
> ANY / SOME 은 찾은 값 중 최소값 보다만 크면 참이다. 따라서 950보다만 크면 모두 나오는 것이다.
정리
- < any : 비교대상중 최대값보다 작음
(ex. 과장직급의 최대급여보다 적게 받는 사원조회)
- > any : 비교대상중 최소값보다 큼
(ex. 과장직급의 최소급여보다 많이 받는 사원조회)
- = any : in연산자와 동일
(ex. 과장 직급과 동일한 급여를 받는 사원조회)
- < all : 비교대상중 최소값보다 작음
(ex. 과장직급의 최소 급여보다 적게 받는 사원조회)
- > all : 비교대상중 최대값보다 큼
(ex. 과장직급의 최대 급여보다 많이 받는 사원조회)
728x90
반응형
'✨ DBMS > etc' 카테고리의 다른 글
[SQL] 분석함수(윈도함수) OVER( ), PARTITION BY, ORDER BY (0) | 2023.08.02 |
---|---|
[SQL] 순위 함수 - RANK(), DENSE_RANK(), ROW_NUMBER() (0) | 2023.08.02 |
[SQL/MySQL] 트랜잭션 COMMIT, ROLLBACK, SAVEPOINT 사용법 (0) | 2023.08.01 |
[SQL] 서브 쿼리 - (인라인 뷰, 스칼라) - SELECT, FROM (0) | 2023.07.31 |
[SQL] SQL 쿡북 - Chaper 1 (0) | 2023.07.25 |
댓글