[82일차] SELECT문의 수행순서

저요·2022년 12월 13일

2022 100th day challenge

목록 보기
81/97

SELECT문의 수행순서

SELECT문을 작성할때 우리는 다음과 같은 순서로 SQL을 작성한다.

SELECT ~
FROM ~
WHERE ~
GROUP BY ~
HAVING ~
ORDER BY ~

하지만 과연 데이터베이스 내부에서는 위와 같은 순서대로 실행이 될까? 답은 그렇지 않다는 것이다.
과연 데이터베이스 내부에서는 어떤 순서대로 SQL을 작성하는지 알아보도록 하겠다.

본론

결론부터 이야기 하자면 SQL SELECT문은 FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY 순으로 시행된다.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

제일 먼저 실행되는 것은 FROM절이다.
먼저, FROM 절에 기재된 테이블이 존재하는지를 가장 먼저 확인하고, 조회하는 테이블에 대한 조회 권한이 있는지를 확인한다.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

그 다음에 실행되는 것은 WHERE절이다.
이 부분에서 걸어 놓은 조건을 확인하고 그에 맞는 ROW를 테이블에서 가져온다.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

세 번째로 어떤식으로 GROUP BY할 것인지를 체크한다.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

그리고 나서 조건에 따라 버릴 ROW를 체크한 뒤에

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

드디어 처음의 SELECT로 돌아와서 출력할 ROW를 체크한다.
여기서 알 수 있는 것은 SELECT절에서 ROW를 몇 개 가져오든 IO비용이 같다는 점이다.
결국엔 그 데이터 모두를 읽으며 갖은 조건들을 체크하고 마지막에 SELECT로 출력할 것들을 골라내기 때문에 SELECT절의 ROW 수가 달라지더라도 검색 비용은 달라지지 않는다.

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

마지막으로 조회한 데이터를 ORDER BY 해준다. 우리는 SELECT절에서 ALIAS를 사용해서 COLUM이름을 정리하곤 하는데, ORDER BY는 맨 마지막에 시행되기 때문에 SELECT 지정한 ALIAS를 사용해서 정렬을 지정 할 수 있다. (다른 곳에서는 사용할 수 없다!)

참고

https://youtu.be/eeq0wDl3bLs
https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=360

profile
웹개발

0개의 댓글