1. 서브쿼리 Subquery
- 서브 쿼리란 부속질의를 말하는 것으로 내포된 query와 바깥족의 query에서 참조한 table이 서로 다를 경우, 여러개의 table에 걸쳐서 질의를 처리하는 것이다.
- Subquery는 FROM 절과 WHERE 절에 사용이 가능하며, bottom-up(아래에서 위) 방식으로 바깥쪽 query가 실행되기 전에 실행된다.
1) 예시 문항을 살펴보겠다.
SELECT *
FROM RETAIL_ORDER
WHERE OrderTotal > AVG(OrderTotal)
- 아래는 ordertoal 열에서, 평균보다 높은 열을 찾는 SQL 문이다.
- 하지만 위의 열은 error 가 생긴다. AVG()는 하나의 값으로 반환되며, 단일값을 비교할려면 서브쿼리 또는 다른 방식으로 값을 처리해야한다.
SELECT *
FROM RETAIL_ORDER
WHERE OrderTotal > (SELECT AVG(OrderTotal) FROM RETAIL_ORDER)
- 이런식으로 Ordertotal이 [평균보다 많은 주문 품목에 대한 조회] 보다 큰 열을 조회한다. 고 보면된다.
2) 사전캠프에서 준 문제를 살펴보겠다.
26. 각 유저별 최신 피드백 찾기
SELECT *
FROM lol_feedbacks t1
WHERE feedback_date = (
SELECT MAX(feedback_date)
FROM lol_feedbacks t2
WHERE t1.user_name = t2.user_name
);
최신 피드백 하나를 조회하는 것이다.
이 부분을 bottom up 방향으로해석해야한다.
lol_feedbacks 테이블에서
> 피드백 날짜 큰 값을 가져오는데
> t1에 사용되는 각 username에 대해
> t2에 해당 유저의 최대 피드백을 찾아내는 것임.
이런식으로 서브쿼리는 전체피드백에서 최대 날짜만을 계산하게 되며, 모든 유저에 대해 같은 날짜가 적용될 수 있는 것이다.
2. DATEDIFF 와 TIMESTAMPDIFF
1) DATEDIFF() 함수
DATEDIFF(date1, date2)
- 두 날짜 사이의 일수 차이를 계산한다.
- date1, date2 차이를 계산할 두날짜로, date1 에서 date2를 뺀다.
2) TIMESTAMPDIFF
TIMESTAMPDIFF(unit, date1, date2)
// unit = YEAR, MONTH, DAT, HOUR, MINUTE, SECOND 등
- TIMESTEMP는 다르게 생각해야한다. 차이를 계산하는 거라고 생각해야한다. 위에서도 차이가 아니었냐? 하지만. 위에서는 뺀다는 부분에서 이해를 해야하고 여기는 시작점과 종료지점의 차이를 구하는 것이라 위에서와는 다르다.
- 실제로는 date1에서 date2를 빼는 것이고, 시작점과 종료 지점의 차이를 양수로 반환한다.
- 그래서 DATEDIFF와 빼는 건 같은데, DATEDIFF에서는 큰 값이 앞이고 TIMESTEMPDIFF에서는 큰 값(종료값)이 뒤로 와야한다는 것이다.
- 경과된 기간을 계산하는 함수로, 연도, 월, 일 등의 차이를 계산할 때 두 날짜의 순서를 고려하여 반환값을 결정한다. 따라서 UNIT,시작점, 종료점 을 잘 기억하고 사용하도록 하자.
오늘의 회고
- 어제 사전캠프 이후 추가로 SQL 걷기반을 달렸다. 다소 늦게 참여했으니, 빠르게 속도를 내고 싶었다.
- 그리하여 오늘은 [9단계] 까지 완료했다! 저녁먹고 빨리 SQL을 마무리할 생각이다 : >
- 기본을 얼른 마무리 해야지 강의를 들을 수 있기 때문에 최대한 노력 할 것이다 !
+) 생각보다.. 걷기반 문제가 오래 걸린다 ㅠㅡㅠ ..
'백엔드 부트캠프[사전캠프] > TIL' 카테고리의 다른 글
[내일배움캠프-사전캠프 06일차] SQL 3주차, 4주차 강의 (0) | 2025.01.27 |
---|---|
[내일배움캠프-사전캠프 05일차] SQL 수업 듣기 (2) | 2025.01.24 |
[내일배움캠프-사전캠프 04일차] 자바 공부 (1) | 2025.01.23 |
[내일배움캠프-사전캠프 03일차] JAVA 입문 (0) | 2025.01.21 |
[내일배움캠프-사전캠프 01일차] SQL 기초 (0) | 2025.01.17 |