SQL의 작성 순서
1. SELCET
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT
SQL의 실행 순서
1. FROM : 어떤 테이블을?
2. WHERE : 어떤 ROW를?
3. GROUP BY : 어떤 그룹으로?
4. HAVING : 어떤 조건의 그룹을?
5. SELECT : 어떤 컬럼들을?
6. ORDER BY : 어떻게 정렬을?
7. LIMIT : 최종 출력할 ROW중 어떤 ROW를?
이 순서를 이해하면 ALIAS를 쓸 수 있는 절과 아닌 절을 구별할 수 있다. 대표적으로 GROUP BY는 SELECT보다 먼저 실행 되기 때문에 ALIAS를 쓸 수 없지만 ORDER BY의 경우 SELECT 이후에 실행 되기 때문에 써도 된다.
서브쿼리의 활용도도 이해할 수 있다. 컬럼과 컬럼을 활용해 새로운 컬럼을 만드는 경우(EX) 매출과 고객수를 활용해 객단가 컬럼 생성) 해당 컬럼을 다른 SELECT에서 바로 쓰고 싶어도 바로 쓸 수 없다. 아래처럼 CUS_PER_BUY를 바로 활용하려 하면 에러가 뜬다.
SELECT
BUY_TOTAL
,CUSTOM_NUM_TOTAL
,BUY_TOTAL/CUSTOM_NUM_TOTAL AS CUS_PER_BUY
,CASE
WHEN CUS_PER_BUY < 10000 THEN '우량 고객'
ELSE '그냥 고객'
END
FROM PD_DE
;
이렇게 고치면 쓸 수 있고, 더 깔끔하게 볼 수 있다. 만약 컬럼간의 연산한 생성된 컬럼이 많거나 CASE WHEN의 경우의 수가 더 많을수록 효과가 더 크다.
SELECT
BUY_TOTAL
,CUSTOM_NUM_TOTAL
,CUS_PER_BUY
,CASE
WHEN CUS_PER_BUY < 10000 THEN '우량 고객'
ELSE '그냥 고객'
END
FROM (SELECT *, BUY_TOTAL/CUSTOM_NUM_TOTAL AS CUS_PER_BUY FROM PD_DE;)
;
'프로젝트(종료) > SQLD 자격증 따기' 카테고리의 다른 글
[SQL]데이터베이스와 DBMS, RDBMS (0) | 2021.05.15 |
---|---|
[SQL] SQLD 10일 독학 합격 후기 (3) | 2021.04.18 |
[SQL] 서브쿼리는 언제 쓰는걸까? (0) | 2021.04.07 |
[SQL]계층형 쿼리 및 셀프 조인 정리 (0) | 2021.03.17 |
[SQL] 날짜형 함수 정리 (0) | 2021.03.13 |
댓글