SQL 통한 Database 관리

select from group by having order by 순서

JBS 12 2024. 8. 29. 18:02

SQL 쿼리에서 SELECT, FROM, GROUP BY, HAVING, ORDER BY 절들은 특정한 순서로 처리됩니다. 이 순서는 SQL 쿼리가 실행되는 과정에서의 논리적인 처리 순서를 의미합니다. SQL 쿼리의 실행 순서는 아래와 같습니다:

1. FROM:
• 쿼리가 참조할 테이블을 지정합니다. JOIN 절도 이 단계에서 처리됩니다.
• 이 단계에서 SQL 엔진은 필요한 테이블에서 데이터를 읽어옵니다.
2. WHERE:
• FROM 단계에서 가져온 데이터 중, 조건을 만족하는 행만 필터링합니다.
• 필터링된 데이터는 다음 단계로 전달됩니다.
3. GROUP BY:
• WHERE 절에 의해 필터링된 데이터를 그룹화합니다.
• 지정된 열을 기준으로 동일한 값을 가진 행들을 하나의 그룹으로 묶습니다.
4. HAVING:
• GROUP BY로 그룹화된 데이터에 대해 조건을 필터링합니다.
• WHERE가 개별 행을 필터링하는 반면, HAVING은 그룹을 필터링합니다.
5. SELECT:
• 이전 단계들에서 처리된 데이터를 바탕으로 출력할 열을 선택합니다.
• 이 단계에서는 집계 함수(SUM, COUNT, AVG 등)가 실행됩니다.
6. ORDER BY:
• SELECT 절에서 반환된 데이터를 정렬합니다.
• 이 단계에서 결과 집합을 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있습니다.
7. LIMIT (또는 FETCH):
• ORDER BY 절에서 정렬된 결과에서 반환할 행의 수를 제한합니다.

예제 쿼리

다음 쿼리를 통해 각 절이 어떻게 동작하는지 살펴보겠습니다:

SELECT department, COUNT(*) AS employee_count
FROM employees
WHERE salary > 5000
GROUP BY department
HAVING COUNT(*) > 10
ORDER BY employee_count DESC;

처리 순서

1. FROM: employees 테이블을 읽어옵니다.
2. WHERE: salary > 5000 조건을 만족하는 행들만 필터링합니다.
3. GROUP BY: department를 기준으로 필터링된 데이터를 그룹화합니다.
4. HAVING: 그룹화된 데이터 중 COUNT(*) > 10 조건을 만족하는 그룹만 남깁니다.
5. SELECT: department와 COUNT(*) 결과를 선택하여 출력합니다.
6. ORDER BY: employee_count 기준으로 결과를 내림차순(DESC)으로 정렬합니다.

결론

• FROM부터 WHERE을 통해 데이터를 읽고 필터링합니다.
• GROUP BY와 HAVING을 통해 데이터를 그룹화하고, 그룹을 필터링합니다.
• SELECT로 최종 결과를 선택한 후, ORDER BY로 정렬합니다.

이 순서를 기억하면 SQL 쿼리의 작동 방식을 이해하고, 복잡한 쿼리를 작성하는 데 큰 도움이 됩니다.