sql -sec2

select 문 실행순서

image

실행 순서에 맞춰서 쿼리문을 작성하는 게, 튜닝 관점에서 유리하고, 성능 낭비를 방지할 수 있다.

실행 순서 때문에 ROWNUM 순서가 바뀐다.

FROM + JOIN

조회를 하기 위한 테이블을 가져옴. JOIN이 필요하다면 이때 진행

WHERE

받아온 테이블에 조건을 검

GROUP BY

집계 기준으로 사용할 그룹 칼럼 지정.

GROUP BY가 걸려있을 때 실행 순서가 헷갈리긴함.

HAVING

해당 절에서 GROUP에 대한 조건을 검. 이때 select에서 지정한 칼럼을 사용함.

  • HAVING 절의 조건을 WHERE 절에도 사용할 수 있는 경우라면 WHERE절에 사용하는 것이 바람직하다.

  • HAVING 절은 각 그룹에 조건을 걸기 때문에 퍼포먼스가 떨어진다.

  • 하지만 현재는 내부에서 optimizing

SELECT

조건이 걸린 테이블에서 원하는 칼럼만 들고 오는 것.

ORDER BY

행의 순서 정렬

LIMIT

결과 중 몇 개의 행을 보여줄 지 결정


쿼리 쓰는 순서

테이블 -> 조건 -> 칼럼 -> (집계) -> (집계 조건) -> 정렬


주의해야할 쿼리

1. WHERE절이 SELECT보다 먼저 실행되기때문에 full_name변수명을 조건으로 사용할 수 없다.

SELECT CONCAT(first_name, last_name) AS full_name
FROM user
WHERE full_name = 'VioletBeach';
  1. 이때는 문제 없이 돌아감. 실행 순서가 어떻게 되는 걸까

SELECT gender, COUNT(emp_no) as people_cnt
FROM EMPLOYEES
GROUP BY gender
HAVING people_cnt > 130000

GROUP BY에서는 select에서 칼럼명 변경한 칼럼 사용 가능

이유 : mysql에서는 GROUP BY,HAVING을 평가하기 전에 select 절을 일부 평가하기 때문에 alias 사용이 가능하다.

댓글을 작성해보세요.