기본 select문 형식
select문은 기본적으로
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
순서대로 작성하게 된다.
그렇지만 각각 구문이 작성한 순서(select -> from -> where -> ... -> order by)대로 수행되는 것은 아니다.
쿼리 순서
1. FROM절 수행
- 접근할 테이블이 존재하는 테이블인지 확인한다.
- select 권한이 있는지 체크한다.
- select 권한이 없는데 select문을 날린 경우 semantic error가 발생한다.
- 오타가 있거나, 쉼표가 있어야 하는데 빠진 경우는 문법 오류라 해서 syntax error가 발생한다.
2. WHERE절 수행
- 어떤 조건들이 있는지 체크한다.
- 테이블에서 이 조건들에 해당하는 row들을 가져온다.
3. GROUP BY절 수행
- 가져온 row들을 어떤 방식으로 group by할 지 체크한다.
4. HAVING절 수행
- group by한 데이터들 중에 버려야 할 데이터가 있는지 체크한다.
5. SELECT절 수행
- 가져온 row들에 대해 어떤 column을 출력해야 할 지 정한다.
- 이미 데이터를 들고 온 후에 select를 하기 때문에
select * from
과 특정 컬럼만 select
하는 것은 io 비용이 같다.(단, 인덱스의 경우는 제외)
6. ORDER BY절 수행
- 정렬 수행
- select절이 먼저 수행되기 때문에 select문에서 지정한 alias를 order by절에서 사용할 수 있다.
- group by절은 select보다 먼저 수행되기 때문에 group by절에서는 사용할 수 없다.
Reference
https://www.youtube.com/watch?v=eeq0wDl3bLs