📌서브쿼리의 기본 원리

2025. 3. 25. 15:57·기술블로그
목차
  1. 서브쿼리의 기본 원리
  2. 📌 예시 분석
  3. 📌 서브쿼리 예시 2: 여러 컬럼을 이용한 서브쿼리 사용
  4. 서브쿼리 사용 시 유의점
  5. 4️⃣ 고급 팁 – 개발자 성장에 도움 되는 활용법
  6. 결론

**서브쿼리(subquery)**는 SELECT 구문 안에 다른 SELECT 쿼리를 포함시키는 방식으로, 중첩된 쿼리로 데이터를 다시 조회하거나 계산할 수 있게 해주는 강력한 도구입니다. 이 서브쿼리는 괄호(()) 안에 작성되며, 쿼리의 일부로 처리됩니다.

서브쿼리의 기본 원리

서브쿼리는 하나의 쿼리 내에 다른 쿼리를 내부적으로 실행하는 방식입니다. 서브쿼리는 **괄호 ()**로 둘러싸여 있으며, 외부 쿼리에서 결과를 사용하게 됩니다.

📌 예시 분석

SELECT title, rating 
FROM books 
WHERE rating > (SELECT AVG(rating) AS rating_avg FROM books);

1. 서브쿼리 부분: (SELECT AVG(rating) AS rating_avg FROM books)

  • 이 부분은 서브쿼리로, books 테이블에서 rating 컬럼의 평균값을 구하고 있습니다.
  • AVG(rating)는 평균 값을 계산하는 집계 함수입니다. 이 서브쿼리는 books 테이블의 모든 rating 값의 평균을 계산하고, 이 값은 rating_avg라는 **별칭(alias)**로 불립니다.
  • 서브쿼리에서 나온 값은 하나의 숫자로 반환됩니다. 예를 들어, rating_avg = 4.2라고 할 수 있습니다.

2. 외부 쿼리 부분: SELECT title, rating FROM books WHERE rating > (서브쿼리)

  • 외부 쿼리는 books 테이블에서 **title**과 **rating**을 가져옵니다.
  • WHERE rating > (서브쿼리)는, 서브쿼리에서 계산된 평균값(rating_avg)보다 큰 rating을 가진 레코드만 선택합니다.
  • 예를 들어, 만약 서브쿼리에서 rating_avg = 4.2가 반환되면, 외부 쿼리는 rating 값이 4.2보다 큰 모든 title과 rating을 반환합니다.

📌 서브쿼리 예시 2: 여러 컬럼을 이용한 서브쿼리 사용

서브쿼리는 단일 컬럼뿐만 아니라 여러 컬럼에도 사용할 수 있습니다. 예를 들어, 특정 조건을 만족하는 데이터를 서브쿼리로 먼저 추출한 후, 그 결과를 외부 쿼리에서 활용하는 방식입니다.

sql
 
SELECT title, rating 
FROM books 
WHERE rating > (
    SELECT AVG(rating)
    FROM books
    WHERE author = '한강'
);

이 예시에서는 author가 '한강'인 책들의 평균 rating을 구하는 서브쿼리를 작성하고, 그 평균보다 높은 rating을 가진 책만을 선택합니다.


서브쿼리 사용 시 유의점

  1. 성능 문제
    • 서브쿼리가 단일 결과를 반환할 때는 성능이 좋지만, 만약 서브쿼리가 다수의 값을 반환하면 성능 문제가 발생할 수 있습니다. 이런 경우에는 JOIN이나 IN 절을 사용하는 것이 더 효율적일 수 있습니다.
  2. 서브쿼리의 위치
    • 서브쿼리는 SELECT, WHERE, HAVING, FROM 등 여러 위치에서 사용될 수 있습니다. 각 위치에서 서브쿼리는 다르게 동작하므로 사용하는 위치에 따라 쿼리의 결과가 달라질 수 있습니다.
  3. IN, EXISTS와 결합
    • 서브쿼리를 IN이나 EXISTS와 결합하여 여러 값을 비교하거나 조건을 설정할 수도 있습니다.
     
SELECT title, rating 
FROM books 
WHERE rating IN (SELECT rating FROM books WHERE author = '한강');

 


4️⃣ 고급 팁 – 개발자 성장에 도움 되는 활용법

  1. 🔥 서브쿼리 성능 최적화
    • 서브쿼리는 성능에 부담을 줄 수 있기 때문에, **JOIN**이나 WITH 구문을 사용하여 서브쿼리를 최적화할 수 있습니다.
    • 서브쿼리가 반환하는 값이 단일 값이라면, 성능에 크게 영향을 미치지 않지만, 다수의 값을 반환하는 서브쿼리는 **JOIN**을 고려하는 것이 좋습니다.
  2. ✅ JOIN vs 서브쿼리
    • **JOIN**은 같은 테이블의 여러 컬럼을 합칠 때, 서브쿼리는 값을 구할 때 유용하게 사용됩니다.
    • 예시: JOIN은 두 테이블을 합치는 데 유용하지만, 집계값을 계산하는 데는 서브쿼리가 더 편리할 때가 있습니다.
  3. 🚀 서브쿼리 사용 시 EXISTS 활용
    • 서브쿼리 내에서 **EXISTS**를 사용할 경우, 해당 조건이 존재하는지 여부를 빠르게 확인할 수 있어 효율적입니다.
     
SELECT title, rating
FROM books
WHERE EXISTS (SELECT 1 FROM reviews WHERE reviews.book_id = books.book_id);

결론

서브쿼리는 쿼리 내에서 다른 쿼리를 실행하는 강력한 기능입니다. 이때 서브쿼리의 결과는 단일 값이나 여러 값일 수 있으며, WHERE, HAVING, FROM 등의 다양한 위치에서 활용됩니다. AVG()와 같은 집계 함수를 서브쿼리에서 사용하고, 그 값을 외부 쿼리에서 비교하는 방식으로 데이터를 효율적으로 처리할 수 있습니다!

서브쿼리와 함께 쿼리 최적화 방법을 잘 익히면, 복잡한 데이터 분석 작업을 효율적이고 우아하게 처리할 수 있을 거야!

'기술블로그' 카테고리의 다른 글

📌 MySQL Safe Update Mode란? 활성화, 비활성화  (0) 2025.03.25
📌 My Sql에서 가장 많은 책을 출판한 저자의 최근 출판된 책 찾기  (0) 2025.03.25
📌 MySQL Group By와 집계 함수 활용(Error Code 1055 해결 방법)  (0) 2025.03.25
📌 Select *와 Select 컬럼 지정의 차이점: 성능 최적화와 효율적인 쿼리 작성  (0) 2025.03.25
📌 My Sql에서 부분 일치 검색으로 중복 데이터 제거하기  (0) 2025.03.25
  1. 서브쿼리의 기본 원리
  2. 📌 예시 분석
  3. 📌 서브쿼리 예시 2: 여러 컬럼을 이용한 서브쿼리 사용
  4. 서브쿼리 사용 시 유의점
  5. 4️⃣ 고급 팁 – 개발자 성장에 도움 되는 활용법
  6. 결론
'기술블로그' 카테고리의 다른 글
  • 📌 MySQL Safe Update Mode란? 활성화, 비활성화
  • 📌 My Sql에서 가장 많은 책을 출판한 저자의 최근 출판된 책 찾기
  • 📌 MySQL Group By와 집계 함수 활용(Error Code 1055 해결 방법)
  • 📌 Select *와 Select 컬럼 지정의 차이점: 성능 최적화와 효율적인 쿼리 작성
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (798)
      • Python (32)
      • 프로젝트 (113)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    youngprofessionals
    life reflection
    RM
    btscomeback
    chinanightlife
    basalcellcarcinoma
    bts
    titaniumcase
    urbantrends
    chatgpterror
    classaction
    뷔
    americanlaw
    hotcoffeecase
    btsreunion
    travel ban
    americaparty
    global politics
    livebroadcast
    btsjungkook
    homebartrend
    remittance
    trumpmuskclash
    newpoliticalparty
    gpterror
    college reunions
    smartphonedurability
    btsdischarge
    self-growth
    lawsuitculture
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌서브쿼리의 기본 원리

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.