레이블이 subquery인 게시물을 표시합니다. 모든 게시물 표시
레이블이 subquery인 게시물을 표시합니다. 모든 게시물 표시

2016년 10월 6일 목요일

52day / DB / Subquery

www.c-sharpcorner.com

Subquery

: Praent Query에 종속되어있는 Inner Query
  • 게시판을 만들다가 Subquery를 배워야하는 이유?
간단히 말하면 페이징 때문이다.
게시판에 글 목록을 보통 10개씩 지정해 놓는다.

만약 그러지 못할 경우?? Subquery를 쓰지 못할 경우??
DB에 게시판의 글이 100개 1000개 10000개가 있을 경우에
비주얼적으로 수많은 글을 한 페이지에 담을 사람은 없을 것이다.
하지만 편법을 쓴다면 일단 DB에서 모든 게시글을 가져온 다음에
Controll이나 View에서 원하는 만큼만 보여줄 수 있다.

이렇게 한다면 당연히 DB에 좋지 않을 것이며 굉장히 무거운 웹사이트가 될 것이 분명하다.

그래서 Subquery로 어떻게?
View -> 원하는 만큼만!! 요청하도록 한다.
Controll -> 원하는 만큼만 전달하도록 한다.
DB -> 당연히 요청한 부분만 조회해온다.

budget 의 최고액을 조회 
SELECT max(amount) FROM budget;
가장 높은 액수(amount)로 지출된 내역(contents)은? 
SELECT contents FROM budget WHERE amount = 25000;
subquery를 이용해서 조회한다 
평균액수(amount)보다 많은 금액과 내역을 조회 
SELECT avg(amount) FROM budget;
SELECT amount,contents FROM budget WHERE amount>17600;
위 두 sql을 Subquery를 이용해 한번에 정의 ( 내림차순 정렬 ) 
SELECT amount,contents FROM budget 
WHERE amount > (SELECT avg(amount) FROM budget)
ORDER BY amount DESC;
연습) 전체 내역의 평균액수보다 낮은 내역 중 가장 높은 액수의 내역은?
SELECT contents,amount FROM budget ORDER BY amount DESC;
1) 평균금액 조회
        SELECT AVG(amount) FROM budget; -- 17600
2) 평균금액보다 작은 내역의 최고액을 조회
        SELECT MAX(amount) FROM budget
        WHERE amount < 17600-- 15000
그 금액에 해당하는 내역을 조회  
        SELECT contents FROM budget 
        WHERE amount = 15000;
위 sql을 Subquery를 이용해 한번에 정의
SELECT contents FROM budget 
    WHERE amount = (
        SELECT MAX(amount) FROM budget
        WHERE amount < (
            SELECT AVG(amount) FROM budget
    )
)
cs