똑똑! SQL 서브쿼리(인라인뷰) 질문 드립니다. 0 2 1,325

by 토로 [SQL Query] Inline View WHERE JOIN ANSI [2020.12.23 02:29:48]


안녕하세요.

인라인 뷰를 공부하다 의문점이 들어 질문드립니다.

 

SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME, HIRE_DATE,
           (SALARY*(NVL(BONUS,0)+1))*12 보너스연봉,
            RANK() OVER(ORDER BY( (SALARY)*(NVL(BONUS,0)+1))*12 DESC ) 순위
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN JOB USING(JOB_CODE)
WHERE 순위 <6;


--Inline View
SELECT *
FROM (
            SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME, HIRE_DATE,
            ((SALARY)*(NVL(BONUS,0)+1))*12 보너스연봉,
            RANK() OVER(ORDER BY  ((SALARY)*(NVL(BONUS,0)+1))*12 DESC) 순위
            FROM EMPLOYEE
            JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
            JOIN JOB USING(JOB_CODE)
           )
WHERE 순위 <6;

 

JOIN 뒤에도 WHERE을 사용하여 순위를 조회해볼까 했는데,

생각과는 달리 오류가 뜨더라고요...! ORA-00904: "순위": invalid identifier

왜 굳이 FROM구문에 인라인 뷰를 작성하여 WHERE을 검사하는 걸까요? 둘의 차이를 알고 싶습니다.

by 마농 [2020.12.23 08:01:41]

쿼리 구문의 해석 순서가 FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY 입니다.
FROM 절의 테이블 알리아스는 WHERE 절이나 SELECT 절에서 사용 가능하지만
SELECT 절의 알리아스는 ORDER BY 절에서만 사용 가능합니다.


by 토로 [2020.12.23 14:22:31]

별칭이 적힌 위치도 중요한 거였군요! 매번 명쾌한 답변 감사합니다. ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입