예시
SELECT U.name, SUM(S.score) AS totalScore
FROM user U
INNER JOIN subject_scores S ON U.id = S.user_id
WHERE U.id IN (1,2,3,4,5)
GROUP BY U.id
HAVING totalScore > 300
ORDER BY totalScore DESC
LIMIT 2;
위 쿼리는 1~5번 학생의 과목 점수를 모두 합쳐서 300점이 넘는 학생 중 총 점이 높은 2명을 뽑는 쿼리다.
- Select 절 : SELECT U.name, SUM(S.score) AS totalScore
- FROM 절 : FROM user U INNER JOIN subject_scores S ON U.id = S.user_id
- WHERE 절 : WHERE U.id IN (1,2,3,4,5)
- GROUP BY 절 : GROUP BY U.id
- HAVING 절 : totalScore > 300
- ORDER BY 절 : ORDER BY totalScore DESC
- LIMIT 절 : LIMIT 2
실행순서
- FROM : 어느 테이블에 접근해야하는지 정함.(JOIN 포함)
- WHERE : 일치하는 데이터만 접근.
- GROUP BY : 읽어온 데이터를 그룹화.
- HAVING : 그룹화 된 후 필터링.
- 윈도우 함수 : COUNT(), SUM(), AVG() 같은 함수들.
- SELECT : 정제된 데이터에서 어떤 컬럼을 출력할지 선택.
- ORDER BY : 정렬 기준과 순서 선택.
- LIMIT : 총 row에서 몇 row를 보여줄 지 선택.
한 줄평 : 쿼리 구문 순서 그대로 실행 할 줄 알았는데 먼저 데이터를 정제하고 어떤 컬럼을 보여줄 지 선택하는 순서였다.