[SQL] SUBQUERY

aljongjong·2021년 12월 16일
0

학원 복습일지

목록 보기
33/84

SUBQUERY

  • 하나의 SQL 문 안에 포함된 또 다른 SQL 문을 뜻한다.
  • 메인 쿼리(기존 쿼리)를 보조하는 역할을 하는 쿼리문이다.



서브 쿼리 구분

    서브 쿼리는 서브 쿼리를 수행한 결과값의 행과 열의 개수에 따라서 분류할 수 있다.
    
    1) 단일행 서브 쿼리        : 서브 쿼리의 조회 결과 값의 행과 열의 개수가 1개 일 때
    2) 다중행 서브 쿼리        : 서브 쿼리의 조회 결과 값의 행의 개수가 여러 행 일때
    3) 다중열 서브 쿼리        : 서브 쿼리의 조회 결과 값이 한 행이지만 컬럼이 여러 개 일때
    4) 다중행 다중열 서브 쿼리    : 서브 쿼리의 조회 결과 값이 여러 행, 여러 열 일때
    
    * 서브 쿼리의 유형에 따라서 서브 쿼리 앞에 붙는 연산자가 달라진다.
    
<단일행 서브 쿼리>
    서브 쿼리의 조회 결과 값의 행과 열의 개수가 1개 일 때 (단일행, 단일열)
    비교 연산자(단일행 연산자) 사용 가능 (=, !=, <>, ^=, >, <, >=, <=, ...)
    
    





<다중행 서브 쿼리>
       서브 쿼리의 조회 결과 값의 행의 개수가 여러 행 일때
       
       IN / NOT IN (서브 쿼리): 여러 개의 결과 값 중에서 한 개라도 일치하는 값이 있다면 혹은 없다면 TRUE를 리턴한다.
       ANY: 여러 개의 값들 중에서 한 개라도 만족하면 TRUE, IN과 다른 점은 비교 연산자를 함께 사용한다는 점이다.
           ANY(100, 200, 300)
           SALARY = ANY(...)   : IN과 같은 결과
           SALARY != ANY(...)  : NOT IN과 같은 결과
           SALARY > ANY(...)   : 최소값 보다 크면 TRUE
           SALARY < ANY(...)   : 최대값 보다 작으면 TRUE
       ALL: 여러 개의 값들 모두와 비교하여 만족해야 TRUE, IN과 다른 점은 비교 연산자를 함께 사용한다는 점이다.
           ALL(100, 200, 300)
           SALARY > ALL(...)   : 최대값 보다 크면 TRUE
           SALARY < ALL(...)   : 최소값 보다 작으면 TRUE
           







<다중열 서브 쿼리>
        조회 결과 값은 한 행이지만 나열된 컬럼 수가 여러 개 일때 




<다중행 다중열 서브 쿼리>
	서브 쿼리의 조회 결과값이 여러 행, 여러 열일 경우




인라인 뷰

  • FROM 절에 서브 쿼리를 제시하고, 서브 쿼리를 수행한 결과를 테이블 대신 사용한다.





<RANK 함수>
	[표현법]
	RANK() OVER(정렬 기준) / DENSE_RANK() OVER(정렬 기준)
		
	RANK() OVER(정렬 기준)      : 동일한 순위 이후의 등수를 동일한 인원수만큼 건너뛰고 순위를 계산한다.
                                    (EX. 공동 1위가 2명이면 다음 순위는 3위)
                                    
	DENSE_RANK() OVER(정렬 기준): 동일한 순위 이후의 등수를 무조건 1씩 증가한다.
                                    (EX. 공동 1위가 2명이면 다음 순위는 2위)






0개의 댓글