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 |