문법은 대문자로 적는 것을 원칙으로 한다.
1. SQL 작성 순서
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT
2. SQL 실행 및 해석 순서
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
7. LIMIT
3. 예시
- employees 테이블에는 부서 ID(department_id), 직원 ID, 직급(role), 이름, 급여(salary)가 들어있다고 가정한다.
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
WHERE role = 'Staff'
GROUP BY department_id
HAVING AVG(salary) > 30000
ORDER BY avg_salary DESC
LIMIT 3;
작성은 위 순서로 하며 이 쿼리는 각 부서에서 사원(Staff)들의 평균 급여가 30,000 보다 큰 부서들만 조회하며 그 중에서 평균 급여가 가장 높은 상위 3개의 부서를 조회한다.
구체적으로 문법과 실행 순서는 아래와 같다.
1. FROM employees
조회 할 테이블을 employees로 정하고 employees 테이블 내에서 조회를 시작한다.
2. WHERE role = 'Staff'
employees 테이블에서 직위(role)가 사원(Staff)에 해당하는 데이터로 조건을 제한한다.
따라서 직위가 사원에 해당하는 사람만으로 조회 대상이 된다.
3. GROUP BY department_id
사원에 해당하는 데이터를 부서 ID(department_id) 별로 그룹화를 해준다.
4. HAVING AVG(salary) > 30000
그룹화 된 부서 중 평균 급여가 30,000보다 큰 부서만 조회한다.
5. SELECT department_id, AVG(salary) AS avg_salary
조회되는 결과는 부서 ID와 평균 연봉이며 AS를 사용하여 avg_salary라는 컬럼의 이름을 주었다.
만약 이름을 주지 않으면 컬럼 이름은 기본적으로 함수 형태인 AVG(salary)가 된다.
또 한, SELECT 절에 써져있지 않은 컬럼은 조회되지 않는다.
6. ORDER BY avg_salary DESC
평균 급여를 내림차순(높은 값에서 낮은 값으로) 정렬한다.
만약 오름차순(낮은 값에서 높은 값으로) 정렬하고 싶다면 아무것도 쓰지 않거나 ASC를 써주면 된다.
7. LIMIT 3
ORDER BY 절에 의해 내림차순으로 정렬을 하였기 때문에 상위 3개를 조회할 경우 평균 급여가 30,000 이상인 부서들 중에서 가장 평균 급여가 높은 부서부터 3개가 조회된다.