[Database] SubQuery 종류

2024. 7. 14. 17:58백엔드/Database

많은 개발자들이 SQL 쿼리를 작성할 때 서브 쿼리를 자주 사용합니다. 서브쿼리는 사용되는 위치에 따라 다양한 명칭으로 불리기도 합니다.

저는 보통 특별한 명칭을 사용하기보다는 그냥 서브 쿼리라고 부르는 편인데요, 오늘은 서브 쿼리의 종류에 대해 알아보려 합니다. 🤔

 

# 서브쿼리 (SubQuery)

  • 다른 SQL 쿼리에 포함된 쿼리로 메인 쿼리의 일부로 작동 
  • 괄호로 감싸져서 사용
  • SELECT, INSERT, UPDATE, DELETE의 WHERE, FROM, HAVING, SET 절, EXISTS 연산자 등 다양한 구문에서 사용 가능
  • 별칭 사용 가능 
  • 서브 쿼리는 메인 쿼리와 분리되어 가독성이 향상되지만 서브쿼리가 많거나 복잡해지는 경우 서버에 부하를 줄 수 있음

 

# 사용 위치에 따른 서브쿼리 명칭

사용위치 명칭
SELECT 절 스칼라 서브쿼리 (Scalar Sub Query)
FROM 절 인라인 뷰 (Inline View)
WHERE 절 중첩 서브쿼리

 

 

스칼라 서브쿼리 (Scalar Sub Query)

  • SELECT 절에서 사용되는 서브 쿼리 
  • 단일 값을 반환
  • 메인 쿼리의 각 행에 대해 하나의 값을 반환하여 추가적인 계산이나 필드를 생성하는 데 유용
SELECT 
    이름, 
    (SELECT MAX(점수) 
     FROM 점수_테이블 
     WHERE 점수_테이블.학번 = 학생_테이블.학번) AS 최고점수
FROM 
    학생_테이블;

 

 

인라인 뷰 (Inline View) 

  • FROM 절에서 사용되는 서브 쿼리로 메인 쿼리에서 사용 
  • 중간 결과를 생성
  • 별칭 지정 필수
SELECT 
    학급, 
    평균점수
FROM 
    (SELECT 학급, AVG(점수) AS 평균점수 
     FROM 점수_테이블 
     GROUP BY 학급) AS 학급_평균
WHERE 
    평균점수 >= 80;

 

중첩 서브쿼리

  • WHERE 절에서 사용되는 서브 쿼리 로 메인 쿼리의 조건을 설정
  • 단일 행 서브쿼리와, 다중 행 서브쿼리가 존재 
유형 반환 행 수 사용 연산자
단일 행 하나의 행 =, <, >, <=, >=
다중 행 여러 행 IN, ANY, ALL

 

단일 행 서브쿼리

  • 단일 값을 반환
  • 메인 쿼리에서 비교 연산자(=, <, >, <=, >=)를 사용하여 조건을 설정
SELECT 
    이름
FROM 
    학생_테이블
WHERE 
    학번 = (SELECT 학번 
            FROM 점수_테이블 
            WHERE 학급 = 'A' 
            ORDER BY 점수 DESC 
            LIMIT 1);

 

다중 행 서브쿼리

  • 여러 행을 반환
  • 메인 쿼리에서 IN, ANY, ALL 등의 연산자를 사용하여 다중 값을 조건으로 설정
SELECT 
    이름
FROM 
    학생_테이블
WHERE 
    학번 IN (SELECT 학번 
             FROM 등록_테이블 
             WHERE 학기 = '2024-1');

 

 

'백엔드 > Database' 카테고리의 다른 글

[Database] 데이터베이스 index(인덱스) 알아보기  (0) 2024.03.02