본문 바로가기

Database/MSSQL

MSSQL : select절의 열이름이 너무 길어져서 alias를 줄 경우 where절에도 또 쓰고 싶다면?

query 문의 select 절에 열이름이 길어서 별칭을 사용하고 그 별칭이 쓰인 열이름을
where 절에도 써야하는 경우는 아주 다반사로 발생을 합니다.

그런데 이놈의 별칭을 하나의 query에서 where절에 쓰려고 하면 DBMS에서 못알아주더군요.
참 답답할 노릇입니다. (바보아냐? 라고 생각하고 싶지만 뭐.... 저도 코드를 작성하는 입장에서 이해해줘야하죠)

꼭 따지듯이 왜 mssql에선 alias를 where절에서 못쓰나요 라고 오늘 대리님께 여쭈자
친절히도 감싸라라는 말을 해주셨습니다.

하나의 질의문을 from절에 넣을 서브쿼리로 작성한 후에
그 감싸고 있는 query에서 select절에서 서브쿼리의 alias를 사용하여주고
where절에서 그 alias를 사용하라는 의미였습니다.

참, 이때 해당 서브쿼리가 되는 FROM절에 감싸지는 녀석은 별칭이 주어져야합니다.
(사실, 왜 그런지는 모르겠습니다. 알고 싶은데.... 이런 또 과제가 생겼군요 하하핫)

예문을 보겠습니다.

SELECT ID, NAME, ADDRESS, ((GRADE * 10)-4) AS JUMSU
FROM SAMPLETBL
WHERE JUMSU > 5

위의 경우는 JUMSU 라는 열이름이 없다며 DBMS가 징징거립니다.

이것을 원하는 방식으로 작성하기 위해서는

SELECT ID, NAME, ADDRESS, JUMSU
FROM (
    SELECT ID, NAME, ADDRESS, ((GRADE * 10)-4) AS JUMSU
    FROM SAMPLETBL 
) AS X
WHERE JUMSU > 5

이렇게 작성이 되어야합니다. ㅎㅎㅎ  


  * 위의 예문은 별칭을 쓰기 위해 작성된 예문으로, 성능에 대한 이슈가 있을 수 있습니다. (댓글을 달아주신 르매님께 감사드립니다.)

    다만 별칭 자체는 성능에 영향을 주지 않는 것으로 알고 있습니다.

    위의 예에서는 이미 별칭을 사용하기 위해 JUMSU 를 구하고 그 결과를 다시 SELECT 하고 있기때문에 성능에 대한 이슈가 있을 수 있습니다.

    실제 프로그램에서는 바깥쪽 FROM 에서 사용중인 내부 SELECT 쿼리에서 WHERE 절을 ((GRADE*10)-4) > 5 과 같이 작성해주어야 합니다.


'Database > MSSQL' 카테고리의 다른 글

ROW_NUMBER()를 이용한 그룹단위 번호부여 및 정렬  (0) 2013.05.20
[링크] MSSQL : CURSOR 기초  (0) 2012.04.03