본문 바로가기
✨ DBMS/etc

[SQL] 서브 쿼리 ( 단일 행 VS 다중 행 ) - WHERE(Nested)

by 환풍 2023. 7. 26.
728x90
반응형

 

서브쿼리란?

다른 쿼리 내부에 포함되어 있는 SELECT 문을 의미한다.
서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리또는 메인 쿼리라고 부르며, 서브 쿼리는 내부쿼리라고도 부른다.

 

 

이전에 단일 행 함수와 다중 행 함수에 대해 포스팅 한 적이 있다.

이번에는 서브 쿼리에 대한 단일 행 함수다중 행 함수를 알아보겠다.

 

[Oracle / SQL] 단일행 함수(Single)와 다중행 함수(Mutible)

단일행 함수(SINGLE ROW FUNCTION) - 한개의 입력 한개의 출력 - SELECT, WHERE, ORDER BY, UPDATE의 SET 절에서 사용 가능 - 조회되는 컬럼 값이 같아야한다. HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기

bright-landscape.tistory.com

 

단일 행 서브쿼리란?

수행 결과가 오직 하나의 행만을 반환하는 서브 쿼리를 갖는 것이다.
단일 행 서브 쿼리문에선 오직 하나의 행으로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내는데, 메인 쿼리의 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
반응형

댓글