SQL 구문 순서에 대하여
⭐️ SELECT / FROM / WHERE / ORDER BY 순서에 대하여
🧐 데이터 베이스에 처음 접하다 보니 순서가 헷갈릴때가 있다.
SELECT EMP_ID , EMP_NAME , SALARY
FROM EMPLOYEE e
WHERE DEPT_CODE = 'D2';
위 코드의 경우 실행되는 순서가 어떻게 될까 ?
⭐️ 분석
1. 위 코드는 EMPLOYEE 테이블에서 DEPT_CODE가 'D2' 인 사원의 사번, 사원명, 연봉을 구하는것이다.
2. 첫번째로 테이블에 접근 , 그다음 DEPT_CODE가 'D2'인 사원을 찾음 , 그다음 EMP_ID, EMP_NAME , SALARY에
접근 .
3. 그렇다면 순서는 FROM절 -> WHERE절 -> SELECT절 순으로 간다
SELECT EMP_ID , EMP_NAME , SALARY -- 3
FROM EMPLOYEE e -- 1
WHERE DEPT_CODE = 'D2'; -- 2
다음과 같은 순서가 나온다 . 여기서 주의 사항이 있다 ‼️
🧐 만약 , 컬럼의 별칭을 SELECT 절에서 사용하면 WHERE 절에서 사용할 수 있을까 ?
결과는
SELECT 절에서 AS로 별칭을 주었을 시 , WHERE 절에서 사용이 불가능하다 ‼️
이유가 무엇일까 ?
아래 코드를 보자.
SELECT EMP_ID , EMP_NAME , SALARY , BONUS
FROM EMPLOYEE e
WHERE SALARY * 12 AS '연봉' >= 30000000 AND BONUS IS NULL;
이 코드가 정상 작동을 할까 ? -> ❌
SELECT EMP_ID , EMP_NAME , SALARY , BONUS -- 3
FROM EMPLOYEE e -- 1
WHERE SALARY * 12 AS '연봉' >= 30000000 AND BONUS IS NULL;-- 2
위 코드와 같은 경우
1. FROM 절 실행 -> 정상작동
2. WHERE 절 실행 -> 오작동
3. SELECT 절 실행 -> 오작동
⭐️ WHERE 절의 경우 SELECT 절에서 SALARY만 정의 했지 , SALARY * 12 를 '연봉' 으로 정의 하지 않았기 때문 ‼️
-> WHERE 절에서 '연봉'을 인식할수 없는 것 이다.
그렇다면 ORDER BY 절은 순서가 어떻게 될까 ?
아래 코드를 보자.
SELECT EMP_NAME , SALARY * 12 AS "연봉"
FROM EMPLOYEE e
--ORDER BY 연봉 DESC;
ORDER BY 2 DESC;
이 코드의 경우는 정상 작동을 할까 ? -> 🙆
SELECT EMP_NAME , SALARY * 12 AS "연봉" -- 2
FROM EMPLOYEE e -- 1
ORDER BY 연봉 DESC ; -- 3
ORDER BY 절의 경우는 순서가 위와 같다.
1. FROM 절을 실행 한다. -> 정상작동
2. SELECT 절을 실행 한다. -> 정상작동
3. ORDER BY 절 실행 -> 정상작동
ORDER BY 절은 별칭 OR 순서(순번)으로 컬럼명을 대신 할 수 있다 ‼️
SELECT 문을 사용 할때는 순서가 중요한걸 꼭 기억 하자 ‼️