DB/MySQL

SELECT문 실행 순서

annovation 2024. 12. 30. 08:52

SQL SELSET 문 예시 

SELECT E.department_id, D.department_name, AVG(E.salary) AS avg_salary
FROM Employees E
JOIN Departments D
ON E.department_id = D.department_id
WHERE E.salary > 50000
GROUP BY E.department_id, D.department_name
HAVING AVG(E.salary) > 60000
ORDER BY avg_salary DESC
LIMIT 3;

SELECT 작성 순서

  1. SELECT
  2. FROM
  3. JOIN
  4. ON
  5. WHERE
  6. GROUP BY
  7. HAVING
  8. ORDER BY
  9. LIMIT

SELECT 실행 순서

  1. FROM
  2. JOIN
  3. ON
  4. WHERE
  5. 2차 테이블 완성
  6. GROUP BY
  7. 그룹함수
  8. 3차 테이블 완성(그룹작업이 있을 경우에만)
  9. HAVING
  10. SELECT
  11. 4차 테이블 완성(HAVING작업이 있을 경우에만)
  12. ORDER BY
  13. LIMIT
  14. 고객(MySQL 클라이언트, 대표적으로 Sequel Pro, SQLYog, JDBC Driver 등)에게 전달

요약 (작성 순서 VS 논리적 순서) 

작성 순서 실제 실행 순서 (논리적 순서)
SELECT FROM
FROM JOIN (필요 시)
JOIN (필요 시) ON (필요 시)
ON (필요 시) WHERE
WHERE GROUP BY
GROUP BY HAVING
HAVING SELECT
ORDER BY ORDER BY
LIMIT LIMIT

 


주의 

 

1. 명확한 조건이 없는 집계함수의 열(Column)

SELECT *, MAX(Salary)
FROM employees;

 

  • MAX(Salary)는 테이블에서 최대 Salary 값을 가져옵니다.
  • 그러나 SELECT *는 테이블의 모든 열(Column)을 포함하므로, 나머지 열의 값은 랜덤하거나 예측할 수 없는 값으로 반환될 수 있습니다.

 

2. 올바른 쿼리

 

(1) 서브쿼리 활용

SELECT *
FROM employees
WHERE Salary = (SELECT MAX(Salary) FROM employees);

 

  • 최대 Salary에 해당하는 모든 행 가져오기
  • 서브쿼리 (SELECT MAX(Salary) FROM employees)는 최대 Salary 값을 계산합니다.
  • WHERE 조건으로 최대 Salary 값에 해당하는 행만 선택합니다.

(2) GROUP BY

SELECT Name, MAX(Salary)
FROM employees
GROUP BY Name;

 

  • GROUP BY는 열을 기준으로 데이터를 그룹화하여, 그룹별 집계 함수의 값을 계산합니다.
  • 이 방식은 SELECT와 MAX 간의 명확한 관계를 설정합니다.

(3) ORDER BY, LIMIT

SELECT *
FROM employees
ORDER BY Salary DESC
LIMIT 1;

 

  • ORDER BY Salary DESC: Salary 기준으로 내림차순 정렬
  • LIMIT 1: 가장 높은 Salary를 가진 첫 번째 행만 반환

출처

OpenAI ChatGPT (https://openai.com)

2024 프로그래머스 백엔드 데브코스 3기 4회차 수업

'DB > MySQL' 카테고리의 다른 글

GROUP BY  (0) 2025.01.02
JOIN  (2) 2025.01.01
AUTO_INCREMENT  (0) 2024.12.29
DBMS를 사용하는 이유 feat. MySQL  (1) 2024.12.27
SQL  (0) 2024.12.26