ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HiveQL - SELECT 문
    DATABASE/Hive 2024. 6. 11. 21:53
    728x90

     

     

     

             

     

    중첩 SELECT 문

    상위 2개의 테이블을 사용하여 고객의 총 주문 금액을 계산하고, 총 주문 금액이 300,000원 이상인 고객을 선택하는 쿼리를 작성했다.

    SELECT a.고객ID
          ,a.이름
          ,a.총_주문금액 
    FROM (
        SELECT 고객.고객ID, 고객.이름, SUM(주문.주문금액) AS 총_주문금액 
        FROM 고객 
        JOIN 주문 ON 고객.고객ID = 주문.고객ID 
        GROUP BY 고객.고객ID, 고객.이름 ) a  # 서브쿼리를 이용하여 a라는 테이블로 임시 테이블을 생성
    WHERE a.총_주문금액 >= 300000  # 조건에 일치하는 데이터를
    LIMIT 10; # 상위 10위를 뽑아냄

     

    결과

     

    1) 서브쿼리의 결과는 다음과 같다.

    고객ID 이름 총_주문금액
    1 김철수 250000
    2 이영희 600000
    3 박민수 750000
    4 최수지 250000
    5 정지훈 350000

     

    2) WHERE a.총_주문금액 >= 300000 조건을 만족하는 행들은 다음과 같다.

    고객ID 이름 총_주문금액
    2 이영희 600000
    3 박민수 750000
    5 정지훈 350000

     

    3) 결과적으로 SELECT a.고객ID, a.이름, a.총_주문금액 FROM (...) a WHERE a.총_주문금액 >= 300000 LIMIT 10; 결과

    고객ID 이름 총_주문금액
    2 이영희 600000
    3 박민수 750000
    5 정지훈 350000

     

    위의 결과는 총 주문 금액이 300,000원 이상인 고객 중에서 고객ID, 이름, 총_주문금액을 선택하고, 상위 10개의 행만 반환한 것이다. 이 경우에는 반환된 행이 3개뿐이다.

     

     

    서브쿼리의 장점

    1. 가독성 향상

    별칭을 사용하면 긴 테이블 이름을 간단하게 줄일 수 있어 쿼리의 가독성을 높인다. 예를 들어, 긴 테이블 이름 대신 짧은 별칭을 사용하면 코드가 훨씬 간결해진다.

    SELECT a.이름
          ,a.성적1
          ,a.성적2 
    FROM (
         SELECT 이름, 성적1, 성적2, (성적1 * 성적2) AS 성적_곱 
         FROM 학생 
    ) a 
    WHERE a.성적_곱 > 200 
    LIMIT 10;
    # 여기서 a는 서브쿼리 결과에 대한 별칭이다. a를 사용함으로써 쿼리를 더 간결하고 읽기 쉽게 만든다.
     

    2. 유지보수성 향상

    별칭을 사용하면 쿼리를 변경하거나 유지보수할 때 유용하다. 테이블 이름이 바뀌더라도 별칭만 변경하면 되므로, 쿼리를 전체적으로 수정할 필요가 줄어든다.

     

    3. 복잡한 쿼리 구조 관리

    서브쿼리를 사용하는 경우, 특히 여러 개의 서브쿼리가 포함된 복잡한 쿼리에서는 각 서브쿼리 결과를 명확하게 구분할 필요가 있다. 별칭을 사용하면 각 서브쿼리의 결과를 명확히 식별하고 관리할 수 있다.

    SELECT outer_query.이름
          ,outer_query.성적1
          ,outer_query.성적2 
    FROM ( 
         SELECT inner_query.이름, inner_query.성적1, inner_query.성적2,
               (inner_query.성적1 * inner_query.성적2) AS 성적_곱 
         FROM 학생 inner_query 
    ) outer_query 
    WHERE outer_query.성적_곱 > 200 
    LIMIT 10;
    
    # 여기서 inner_query와 outer_query라는 별칭을 사용하면 각 쿼리 단계의 역할을 명확히 구분할 수 있다.
     

    4. 동일 테이블의 다중 참조

    한 쿼리 내에서 동일 테이블을 여러 번 참조할 때, 별칭을 사용하면 각 참조를 구분할 수 있다. 이는 특히 자기 자신과 조인해야 하는 경우 유용하다.

    SELECT a.이름 AS 학생A
          ,b.이름 AS 학생B 
    FROM 학생 a 
    JOIN 학생 b ON a.성적1 = b.성적2
    
    # 여기서 학생 테이블을 두 번 참조하지만, 별칭을 통해 두 참조를 명확히 구분한다.
     

     

    728x90

    'DATABASE > Hive' 카테고리의 다른 글

    UNION과 UNION ALL의 차이점  (0) 2024.09.29
Designed by Tistory.