(SQL) 서브쿼리 사용하기 (예제를 통해)

(SQL) 예제를 통해 서브쿼리를 어떻게 사용하는지 알아보자

(SQL) 예제를 통해 서브쿼리를 어떻게 사용하는지 알아보자



✋🏾 <손에 잡히는 10분 SQL _ 인사이트> 교재를 참고해 작성한 포스팅입니다.
✋🏾 샘플데이터 다운로드 링크


1. 서브쿼리란?

서브쿼리는 용어 그대로 쿼리 안에 쿼리를 넣는 것이다.
주로 WHERE절과 IN절에서 많이 사용된다.

서브쿼리를 이용하면 테이블끼리 동적으로 연계해서 작업이 가능하다.

다음 예제를 통해 더 자세히 알아보자.

이 DB에서 나는 RGAN01 이라는 제품을 구매한 고객의 목록을 가져오고 싶다.
이 정보를 가져오려면 다음 순서대로 진행해야 한다.

1) RGAN01을 주문한 주문 번호를 가져온다
2) 이전 단계에서 가져온 주문 번호로 고객 ID를 가져온다
3) 이전 단계에서 가져온 고객 ID로 고객의 상세 정보를 가져온다.

이 세 단계는 별도의 쿼리로 수행가능하다.
하지만 그렇게하면 세번의 작업이 필요하다.

SELECT order_num
FROM OrderItems
WHERE prod_id='RGAN01'; -- 1

SELECT cust_id
FROM Orders
WHERE order_num IN (200007,20008) --2

SELECT cust_name,cust_contact
FROM Customers
WHERE cust_id IN (1000000004,1000000005); --3



서브쿼리를 이용하면 이 세 단계를 하나의 쿼리로 합쳐서 진행할 수 있다.
다음과 같이 작성하면 된다.

SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id IN (SELECT cust_id
                  FROM ORders
                  WHERE order_num IN(SELECT order_num
                                     FROM OrderItems
                                     WHERE prod_id='RGAN01'))

이처럼 서브쿼리를 사용하면 강력하고 유연한 SQL문을 작성할 수 있다.


2. 서브쿼리를 사용할 때 주의할 점

서브쿼리를 사용할 때 주의할 점은 다음과 같다.

  • 서브쿼리가 항상 효율적인 것은 아니다.
    • 사용할 수 있는 서브쿼리의 수에는 제한이 없다.
    • 너무 많은 쿼리를 사용하면 성능이 저하될 수 있다.
  • 서브쿼리는 하나의 열만 검색할 수 있다.
  • 서브쿼리는 항상 안에 있는 쿼리를 먼저 처리하고 , 이후 바깥쪽에 있는 쿼리를 처리한다.

3. 추가 문제 (서브 쿼리 이용)

1) 서브쿼리를 사용하여 10 또는 그 이상의 가격으로 제품을 구매한 고객 목록을 반환하라.
OrderItems 테이블에서 조건에 맞는 주문번호 (order_num)을 가져온 다음,
Orders 테이블에서 주문 번호와 일치하는 주문에 대한 고객 ID(cust_id)를 검색한다.

SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
                    FROM OrderItems
                    WHERE item_price>=10);


2) Products 테이블에서 모든 제품명(prod_name)과 quant_sold를 가져오는 SQL 문을 작성하라.
여기서 quant_sold는 판매된 항목의 총수량이 담긴 계산 필드다.

SELECT prod_name,
       (SELECT SUM(quantity)
        FROM OrderItems
        WHERE Products.prod_id=OrderItems.prod_id)
FROM Products;


© 2024. All rights reserved.