-
오라클 데이터베이스 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)먼저 수행해서 결과를 남겨야하는경우 사용한다.
'Data Base > SQL' 카테고리의 다른 글
오라클 데이터베이스 SQL 36강-Outer Join을 이용한 게시글 목록 쿼리 (0) 2022.02.06 오라클 데이터베이스 SQL 34강-INNER조인(JOIN) (0) 2022.02.06