Back End/DataBase

SQL 구문 순서에 대하여

KoesJin 2024. 12. 18. 00:08

⭐️ 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 문을 사용 할때는 순서가 중요한걸 꼭 기억 하자 ‼️