bong-u/til

[모각코24동계] 04 : 결과

수정일 : 2024-06-24

Recursive Query

1WITH RECURSIVE CTE AS (
2    SELECT 0 AS A
3    UNION ALL
4    SELECT A+1 AS NUM
5    FROM CTE
6    WHERE A < 10 # 0 부터 10까지 포함
7)
  • 결과 (CTE테이블)
    A NUM
    0 NULL
    10 NULL

성능 비교

  • LIMIT 1 VS 서브쿼리
    1SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, PRICE
    2FROM FOOD_PRODUCT
    3ORDER BY PRICE DESC
    4LIMIT 1;
    
    1SELECT *
    2FROM FOOD_PRODUCT
    3WHERE PRICE IN (
    4    SELECT MAX(PRICE) FROM FOOD_PRODUCT
    5);
    
    • LIMIT 1을 사용하는 쿼리는 모든 COLUMN의 데이터를 가져오고,
    • 서브쿼리는 PRICE의 최대값만 가져와서 구하기 때문에, 테이블이 클수록 서브쿼리가 더 빠르다.

배운 것

GROUP BY 기준이 2개 이상인 경우

  • 예를 들어 GROUP BY 학년, 학기 인 경우
  • 2가지 조건 모두 적용하여 2023-1학기, 2023-2학기, 2024-1학기와 같이 묶인다
  • COLUMN의 순서를 이용하는 방법
1ORDER BY 1, 2, 3
2GROUP BY 1, 2, 3
  • 위 명령어에서 사용된 숫자는 SELECT 명령어에서 각각 1번째, 2번째, 3번째 컬럼을 의미한다.

  • 이렇게도 사용할 수 있으나, 가독성이 좋지 않으므로, 지양하자.

A BETWEEN B AND C의 의미

A ≤ B ≤ C이하라는 의미를 가진다

CASE와 MAX

1MAX (CASE
2        WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
3        ELSE '대여 가능'
4      END) AVAILABILITY
  • 위 쿼리가 GROUP BY랑 같이 사용되는 경우
  • 해당 GROUP 내 ‘대여중’과 ‘대여 가능’이 같이 있을 때,
  • 가나다 순으로 우선한 ‘대여중’이 우선으로 표기된다