ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [한기교] SQL 활용 필기(10) - 중첩 질의문
    비전공자 공부일기/:: DB - SQL 2020. 5. 4. 14:08

    < 중첩 질의문의 개념 >

     

    ㅁ 중첩 질의문의 개념

    - 하나의 SQL문의 결과를 다른 SQL문에 전달함

    - 두 개의 SQL문을 하나의 SQL로 처리함

    - 이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일함

    - SQL문 안에 SQL문이 포함되어 있음

     

     

    ㅁ 조인 질의문과 중첩 질의문

    이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일.

    따라서 중첩 질의문의 필요성 = 조인의 필요성

    상황에 따라 취향에 따라(?) 조인 or 중첩 질의문이 더 편한 경우가 있기 때문에 사용

    중첩 질의문이 좀더 직관적인 너낌적인 너낌

     

     

    ㅁ 중첩 질의문의 표현

    : SQL문 안에 SQL문이 포함되어 있음

     

     

    < 서브쿼리 >

    ㅁ 단일행 서브 쿼리와 다중행 서브 쿼리

    - 단일행 서브 쿼리

    : 서브 쿼리의 결과로 하나의 튜플만이 반환됨

     

    - 다중행 서브 쿼리

    : 서브 쿼리의 결과로 여러 개의 튜플들이 반환됨

     

    - 단일행 서브 쿼리와 다중행 서브 쿼리를 구분해야 하는 이유

    : 일반적인 비교 연산자인 =, <, <=, >, >=, !=등은 속성값 간의 비교 연산임

     

     

    ㅁ 단일행 서브쿼리

    : 서브 쿼리의 결과로 하나의 튜플만이 반환됨

    --> 서브 쿼리의 검색 조건이 후보키에 연관되어 있을 경우가 많음

     

    (ex)
    SELECT ENO, DNO
    FROM EMPLOYEE
    WHERE DNO = (SELECT DNO     ---> 튜플이 DNO 하나만 반환
                FROM EMPLOYEE
                WHERE EMPLOYEE.ENO=110)

     

     

    ㅁ 다중행 서브쿼리

    : 서브 쿼리의 결과로 여러 개의 튜플들이 반환됨

    --> 단일행 비교 연산자 사용 시 오류

     

    - IN

    --- 속성값이 여러 값들 중 하나이기만 하면 참 / "= OR"의 의미

     

    - ANY 또는 SOME

    --- 메인쿼리 비교조건에서 서브쿼리의 결과와 하나라도 일치하면 참

    --- IN과의 차이점은 > >= <= < 과 같은 범위 비교하고도 같이 사용 가능

    --- = ANY와 = SOME은 IN과 같은 의미임

     

    - ALL

    --- 메인 쿼리 비교 조건에서 서브 쿼리의 결과와 모두 일치하면 참

     

    - EXISTS 연산자

    --- 서브 쿼리의 결과가 하나라도 존재하면 참이 되는 연산자

     

    - NOT EXISTS

    --- EXISTS와 상반되는 연산자

     

     

    ㅁ 다중컬럼 서브쿼리

    : 서브쿼리의 결과가 여러 개의 속성들로 구성되어 주 쿼리의 조건과 비교하는 서브쿼리임

    - 복수 개의 서브쿼리들로 구성됨

    - 메인쿼리와 서브쿼리의 비교대상 칼럼을 분리하여 개별적으로 비교한 후 AND 연산에 의해 최종결과를 출력

     

     

    ㅁ 상호 연관 서브쿼리

    - 비상호 연관 서브쿼리

    : 앞서 보았던 서브 쿼리들은 서브쿼리의 결과가 메인쿼리에서 검사하는 튜플에 영향받지 않고 그 결과가 일정

     

    - 상호 연관 서브 쿼리
    : 메인 쿼리절과 서브 쿼리 간에 검색 결과를 교환하는 서브 쿼리

     

    * 주의 사항
    : 메인 쿼리에서 table1에 속한 튜플을 하나씩 접근하여 WHERE 절 수행 시

    서브 쿼리가 반복적으로 수행됨으로 성능이 매우 떨어질 수 있음

     

     

    ㅁ 중첩 질의문 작성 시 주의점
    - 중첩 질의문 사용 시 오류가 없도록 IN, ANY, ALL을 기본적으로 사용함
    - 서브 쿼리 내에서는 ORDER BY 절을 사용하면 안됨
    - 서브 쿼리의 결과가 NULL일 경우, 메인 쿼리의 결과 또한 NULL임
    - 서브 쿼리가 NULL을 반환할 경우, 메인 쿼리에서 결과를 생성하고 싶으면 “NOT EXISTS” 를 사용함

     

     

     

    댓글

coding wanee