티스토리 뷰

MySQL

[2] 서브쿼리(Subquery)

up_one 2025. 1. 8. 17:36

서브쿼리(Subquery)는 SQL문에 포함되어 있는 또 다른 SQL문으로써 최종 출력을 위한 보조 역할을 하는 SQL문입니다. 즉 서브쿼리(Subquery)는 특정 값을 가지고 있는 row의 다른 칼럼이 필요할 때 활용할 수 있습니다. 서브쿼리(Subquery)는 메인 SQL문에서 GROUP BY를 제외한 모든 곳에 작성할 수 있고 작성되는 위치와 반환 값에 따라 명칭이 달라집니다.

 

  • 인라인 뷰(Inline view) : FROM 절에 사용되는 서브쿼리, 결과가 동적으로 생성된 테이블처럼 사용할 수 있지만 임시적인 View이기 때문에 데이터 베이스에 저장되지 않습니다.
  • 스칼라 서브쿼리 : SELECT 절에 사용되는 서브쿼리, 결괏값으로 하나의 값(단일 행)을 반환합니다.
  • 서브쿼리 : WHERE 절에 사용되는 서브쿼리

<위치에 따라 사용되는 서브쿼리>

 

  • 단일 행 서브쿼리 : 서브쿼리에서 한 행에 대한 값만 반환하는 것, 메인 쿼리의 WHERE 절에서 사용한다면 단일 행 비교 연산자(>, <, <= 등)를 사용한다.
  • 다중 행 서브쿼리 : 서브쿼리에서 여러 행에 대한 결과 값을 반환하는 것, 메인 쿼리의 WHERE 절에서 사용한다면 다중 행 비교 연산자를 사용한다.
    • IN : 반환되는 여러 개의 행 중 하나만 참이어도 참
    • ALL : 메인쿼리와 서브쿼리의 결과가 모두 동일하면 참
    • EXISTS : 서브쿼리 결과를 만족하는 값이 존재하는지 여부를 확인

<반환 값에 따른 서브쿼리>

 

 

ex) sakila 데이터베이스에서 customer_id가 5인 고객의 대여횟수, customer_id, first_name, last_name을 구하시오.

SELECT C.customer_id, C.first_name, C.last_name, 
	(SELECT COUNT(rental_id) FROM sakila.rental WHERE customer_id=C.customer_id) AS total_rent 
    FROM sakila.customer C
	WHERE C.customer_id=5;

 

 

ex) sakila 데이터베이스에서 대여횟수가 10회 이상인 고객의 customer_id, first_name, last_name, 대여 횟수를 구하시오. 결과는 대여 횟수 기준으로 오름차순 정렬하세요

SELECT C.customer_id, C.first_name, C.last_name, 
	(SELECT COUNT(R.rental_id) FROM sakila.rental R WHERE C.customer_id=R.customer_id 
				GROUP BY R.customer_id HAVING COUNT(R.rental_id)>=10) AS total_rent
	FROM sakila.customer C
ORDER BY total_rent ASC;

 

'MySQL' 카테고리의 다른 글

[3] WITH 문 연습  (0) 2025.04.08
[1] SQL 코딩테스트 문법 정리  (0) 2025.01.05
TAG more
글 보관함
최근에 올라온 글