[SQL] SUBQUERY


SUBQUERY
  • は、1つの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위)