SQL SUBQUERY

두윤기·2023년 2월 8일
0

> SUBQUERY

  • SUBQUERY 내에 ORDER BY를 사용은 오라클 8i 이상만 작동

예시

  • (Q) 가장 비싼 상품의 이름을 출력(PRODUCT)

사용

SELECT NAME FROM PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM PRODUCT);

> ROWNUM

예시

  • (Q) 가장 최근에 만든 상품 정보

접근 방법

  1. 가장 마지막 시간을 구하고 그와 같은 상품 조회
    SELECT * FROM PRODUCT WHERE MADE = (SELECT MAX(MADE) FROM PRODUCT);
  2. 상품을 최신순으로 정렬하고 첫 번째 조회
    ORDER BY의 순서에 따른 항목 → ROWNUM

잘못된 사용

SELECT PRODUCT.*, ROWNUM FROM PRODUCT ORDER BY MADE DESC;
→ ORDER BY 전에 ROWNUM을 정해져, ROWNUM도 ORDER 된다.

SUBQUERY, ROWNUM 활용 예시

  • ROWNUM이 선언된 곳에서의 Reference는 반드시 1부터 참고할 수 있음
  SELECT TMP.* FROM (
    SELECT * FROM PRODUCT ORDER BY MADE DESC
  ) TMP WHERE ROWNUM BETWEEN 2 AND 10;

→ ROWNUM을 2부터 reference로 설정되어 있어, 데이터 ROWNUM을 조사할 때 모든 행이 차례로 1로 인식되어 사라짐

TOP N QUERY

SELECT * FROM (
  SELECT TMP.*, ROWNUM AS RN FROM (
    SELECT * FROM PRODUCT ORDER BY MADE DESC
  ) TMP
) WHERE RN = 1;
  • paging 활용
SELECT * FROM (
  SELECT TMP.*, ROWNUM AS RN FROM (
    SELECT * FROM MEMBER ORDER BY MEMBER_JOIN DESC
  ) TMP
) WHERE RN BETWEEN page AND size;
profile
programmerD

0개의 댓글