Programming/기초 지식

SQL 중첩 질의문

728x90

 

 

목차

     

     

     


     

    2021.12.11 - [Programming/기초 지식] - SQL 조인 질의문

     

    SQL 조인 질의문

    목차 2021.12.11 - [Programming/기초 지식] - SQL 트랜잭션(Transaction) SQL 트랜잭션(Transaction) 목차 2021.12.10 - [Programming/Java 기초] - SQL 데이터 삽입/수정/변경 SQL 데이터 삽입/수정/변경 목차 2..

    montoo.tistory.com

     

    1. 중첩질의문 개요

    1.1. 중첩 질의문의 개념

    • 하나의 SQL문의 결과를 다른 SQL문에 전달한다
    • 두 개의 SQL문을 하나의 SQL로 처리한다
    • 이론적으로 중첩 질의문은 조인 구문과 표현능력이 동일하다
    • SQL문 안에 SQL무이 포함되어 있다.

    1.2. 단일행 서브 쿼리와 다중행 서브 쿼리

    • 단일행 서브쿼리
      • 서브쿼리의 결과로 하나의 튜플만이 반환된다.
    • 다중행 서브쿼리
      • 서브쿼리의 결과로 여러 개의 튜플들이 반환된다
    • 단일행 서브쿼리와 다중행 서브쿼리를 구분해야 하는 이유는?
      • 일반적인 비교 연산자인 =, >, >=, <, <=, != 등은 속성값 간의 비교 연산이기 때문이다. (단일행)
    • 다중행 비교 연산자
      • IN
        • 특정한 값으로 비교연산을 처리
        • 속성값이 여러 값들 중 하나라도 만족 하면 참
        • "=OR"의 의미
    SELECT *
    FROM Pitem
    WHERE Itemprice IN (4000, 3000)

     

    • ANY 또는 SOME
      • IN연산자와는 달리 범위로 비교연산 처리
      • 메인쿼리 비교 조건에서 서브쿼리의 결과와 하나라도 일치하면 참
      • IN과의 차이점은 >,>=,<,<= 와 같은 범위 비교와도 같이 사용 가능하다
    • ALL
      • 메인쿼리 비교 조건에서 서브쿼리의 결과와 모두 일치하면 참
    • EXISTS 연산자
      • 서브쿼리의 결과가 하나라도 존재하면 참이 되는 연산자
    • NOT EXISTS
      • 서브쿼리의 결과가 하나라도 존재하면 거짓이 되는 연산자

     

    2. 다양한 중첩 질의문

    2.1. 다중 컬럼 서브쿼리

    • 서브쿼리의 결과가 여러 개의 속성들로 구성되어 메인쿼리의 조건과 비교하는 서브쿼리
    • 복수 개의 서브쿼리들로 구성된다
    • 메인쿼리와 서브쿼리의 비교 대상 칼럼을 분리하여 개별적으로 비교한 후 AND연산에 의해 최종결과를 출력한다.

    2.2. 상호 연관 서브쿼리

    • 비상호 연관 서브쿼리
      • 서브쿼리의 결과가 메인쿼리에서 검사하는 튜플에는 영향 받지 않고 그 결과가 일정하다.
    • 상호 연관 서브쿼리
      • 메인쿼리절과 서브쿼리 간에 검색 결과를 교환하는 서브쿼리
    • 주의사항
      • 메인쿼리에서 table1에 속한 튜플을 하나씩 접근하여 WHERE절 수행 시 서브쿼리가 반복적으로 수행됨으로 성능이 매우 떨어질 수 있다.

    2.3. 중첩 질의문 작성 시 주의점

    • 중첩 질의문 사용 시 오류가 없도록 IN, ANY, ALL을 기본적으로 사용한다.
    • 서브쿼리 내에는 ORDER BY절을 사용하면 안된다.
    • 서브쿼리의 결과가 NULL일 경우, 메인쿼리의 결과 또한 NULL이다.
    • 서브쿼리가 NULL을 반환할 경우, 메인쿼리에서 결과를 생성하고 싶으면 "NOT EXISTS"를 사용한다.

     

    300x250