ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클 데이터베이스 SQL 33강- 부조회(서브쿼리)
    Data Base/SQL 2022. 2. 5. 15:14

    select절은 순서대로 실행 되어야 한다.

    순서를 바꾸면 오류가 발생한다. 순서를 바꿔야 할때는 옵션이 있어야한다.

     

    서브 쿼리를 사용하는 경우

    구절의 순서를 바꿔야 하는 경우 

    SELECT*FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 10

    ->최신 등록순으로 정렬한 결과에서 상위 열명을 원하는 경우라면?

     

    SELECT*FROM MEMBER ORDER BY REGDATE DESC

    WHERE ROWNUM BETWEEN 1 AND 10

    ->순서 때문에 오류가 발생 

     

    정렬을 하고나서 rownum 을 쓰고 싶은데 이렇게 쓰면 sql문 순서에 맞지 않아서 EEROR가 발생한다.

     

    이럴때 사용할 수 있는 옵션이 서브쿼리이다.

    정렬된 결과물을 우선 가져오고 그걸 바탕으로 다시 정렬할 수 있다.

    SELECT *FROM (SELECT*FROM MEMBER ORDER BY REGDATE DESC)

    WHERE ROWNUM BWTWEEN 1 AND 10;

    괄호안의 결과물이 또 하나의 테이블 같은 형태를 보이기 때문이다. 그것을 다시 FROM 절에 사용할 수 있다.

    FROM절에는 항상 테이블이 와야하는 것이 아니다. 격자형 데이터가 격자형 결과물이 있다면, 그것을 얼마든지 

    FROM절에 사용할 수 있다.

     

    소괄호가 서브쿼리를 나타내는 가장 중요한 키워드이다.

    수학의 연산식 처럼 먼저 연산하고 싶은것을 괄호 안에 묶는 것이다.

    -> 쿼리문 구절은 구절의 순서를 가지고 있는데, 구절의 순서를 바꿘야 할 때 서브 쿼리를 사용하게 된다.

     

    두 번째 페이지는?

    SELECT *

    FROM ( SELECT ROWNUM NUM M.*

    FROM( SELECT*FROM MEMBER ORDER BY REGDATE DESC ) M

    WHERE NUM BETWEEN 11 AND 20

     

    1. 최신글로 정렬하고

    SELECT*FROM MEMBER ORDER BY REGDATE DESC M

     

    2. 일련 번호를 붙여서

    SELECT ROWNUM NUM M.*

    FROM M

     

    3. 그 번호를 기준으로 페이지를 조회한다.

    SELECT S.ID,PWD,NAME

    FROM S WHERE NUM BETWEEN 11 AND 20

     

    나이가 30이상인 회원 목록을 조회하시오.

    SELECT*FROM MEMBER

    WHERE AGE >= 30

    ↓↓↓↓↓↓↓↓↓↓↓↓

    평균나이가 30이상인 회원

    회원이 가입하고 탈퇴하면 서 회원의 평균나이는 항상 바뀐다.

    SELECT * FROM MEMBER

    WHERE AGE >=(                                )

     

    그렇게되면 ~~이상인 회원을 뽑기전에 평균나이가 현재 어떻게 되는식 구해야 한다.

    평균나이를 구하는 쿼리를 해서 그 결과물로 평균을 구하고 상수화된 비교기준을 정해야 한다.

     

    ->평균나이를 알 수 있는 쿼리를 먼저 구해 본다.

    SELECT * FROM MEMBER

    WHERE AGE >=( SELECT AVG(AGE) FROM MEMBER )

    그때도 서브쿼리가 사용된다.

     

    정리

    서브쿼리는 1)퀴리구문의 순서를 바꾸거나,

    2)먼저 수행해서 결과를 남겨야하는경우 사용한다.

     

    [출처 -https://youtu.be/PSf1bFJDBSI]

    댓글

Designed by Tistory.