Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 파이썬기초
  • 자료구조
  • MariaDB
  • 프로그래머스
  • 객체
  • AI
  • 백준
  • 인공지능
  • 빅데이터
  • 코딩테스트
  • 파이썬
  • 하둡
  • Baekjoon
  • 데이터
  • 프로그래밍
  • 머신러닝
  • 딥러닝
  • 데이터베이스
  • PYTHON
  • 선형대수학
  • 데이터사이언스
  • 알고리즘
  • mysql
  • pytorch
  • TensorFlow
  • sql
  • 코테
  • class
  • 선형대수
  • 객체지향

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

SQL

[SQL] 중첩 질의 - 상관 중첩 질의와 존재 연산자 EXISTS (3)

2024. 3. 21. 16:47
반응형

상관 중첩 질의 (Correlated Nested Query)

  • 중첩 질의에서 하위 질의의 WHERE 절에 있는 레코드 검색 조건에 주질의에서 선언된 테이블의 컬럼을 참조하는 경우 상관 중첩 질의라고 함! 

아래 예제를 통해 이해해보겠습니다.

 

<예시 테이블 구조>

  • 사원 테이블: EMPLOYEE(Fname, Minit, Lname, SSN, Bdate, Address, Sex, Salary, Super_ssn, Dno)
  • 부양 가족 테이블: DEPENDENT(Essn, Dependent_name, Sex, Bdate, Relationship)

 

아래 쿼리는 부양 가족 (dependent)과 성별이 같은 근로자의 ssn을 조회하는 쿼리입니다.

단일 질의는 join문을 활용하여 조회했습니다.

-- 단일 질의 

SELECT ssn
FROM employee AS e 
    INNER JOIN dependent AS d
    ON e.ssn = d.ssn
WHERE e.sex = d.sex
;

 

위 쿼리는 다음과 같이 상관 중첩 질의 형식으로도 같은 결과를 조회할 수 있습니다.

-- 상관 중첩 질의

SELECT ssn
FROM employee AS e
WHERE ssn IN ( SELECT essn
                FROM dependent AS d
                WHERE e.sex = d.sex )
;

 

비상관 중첩 질의에서 하위 질의는 한번 수행되지만, 상관 중첩 질의에서 하위 질의는 여러번 수행되는 것을 확인할 수 있습니다.

 

존재 연산자 (EXISTS, NOT EXISTS)와 상관 중첩 질의

기본적으로 존재 연산자는 다음 역할을 수행합니다.

  • EXISTS 연산자 (함수) : 상관 중첩 질의에서 하위 질의의 결과가 공집합 (empty_set) 인지를 검사
  • EXISTS(Q): 하위 질의 Q의 결과에 적어도 한 개 이상의 레코드가 존재하면 참을 반환

위에서 예시를 들었던 상관 중첩 질의를 다시 한 번 살펴보겠습니다.

-- 상관 중첩 질의

SELECT ssn
FROM employee AS e
WHERE ssn IN ( SELECT essn
                FROM dependent AS d
                WHERE e.sex = d.sex )
;

 

해당 질의를 EXISTS 연산자와 상관 중첩 질의를 활용해서 SQL을 작성해보면..

 

-- 상관 중첩 질의 + EXISTS 연산자

SELECT ssn
FROM EMPLOYEE AS e
WHERE EXISTS(
             SELECT *
             FROM dependent AS d
             WHERE e.ssn = d.essn AND
                   e.sex = d.sex
             )
;

 

EXISTS는 참 혹은 거짓을 반환하므로 하위 질의에서 반환해야 하는 컬럼명을 명시하는 것이 무의미한 경우가 대부분이다. 따라서 관례적으로 *를 사용함을 알아두면 좋습니다.

 

추가로 위에서 활용한 IN 연산자와 상관 중첩 질의의 연산량이 EXISTS 연산자와 상관 중첩 질의의 연산량보다 훨씬 더 큽니다.

True가 있으면 탐색을 멈추는 EXISTS와 다르게 IN은 끝까지 탐색을 진행합니다.

반응형
저작자표시 (새창열림)

'SQL' 카테고리의 다른 글

[SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의  (0) 2024.03.25
[SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)  (0) 2024.03.20
[SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1)  (0) 2024.03.20
[SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스)  (0) 2024.03.18
    'SQL' 카테고리의 다른 글
    • [SQL] 프로그래머스 특정 물고기를 잡은 총 수 구하기 - 조인 & 상관중첩질의
    • [SQL] 검색 - 목록 검색 연산자와 중첩 질의 Nested Query (2)
    • [SQL] 검색 - 비교 연산자와 중첩 질의 Nested Query (1)
    • [SQL] 조건에 부합하는 중고거래 댓글 조회 (프로그래머스)
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바