Where 절이 Select 절보다 먼저이기 때문에
Select 절의 Alias 를 Where 절에서 사용할 수는 없습니다.
표현식 자체를 조건절에서 직접 사용하거나
1 2 3 4 5 6 | SELECT empno , ename , decode(round(dbms_random.value(0,1)), 0, 'man' , 'woman' ) gender FROM emp WHERE decode(round(dbms_random.value(0,1)), 0, 'man' , 'woman' ) = 'man' ; |
인라인뷰를 사용하면 밖에서 알리아스를 사용할 수 있습니다.
1 2 3 4 5 6 7 8 | SELECT * FROM ( SELECT empno , ename , decode(round(dbms_random.value(0,1)), 0, 'man' , 'woman' ) gender FROM emp ) WHERE gender = 'man' ; |
음.. 일반적인 함수 생각해서 테스트 없이 답변 드렸는데...
테스트 해보니 렌덤 함수는 좀 다른 결과를 내놓는 군요.
첫번째 제시한 방법을 쓰면 안되네요.
렌덤함수를 Where 절에 사용했더니
결과가 모 아니면 도 형태로 나타나네요.(테스트 환경 11g)
결과는 항상 0건 아니면 14건 이 나오며
14건이 나오는 경우 Select 결과는 man 과 woman 이 섞여 나오네요.
이는, 렌덤 함수가 Where 절에서는 단 한번만 수행됨을 의미하며
Where 절과는 별개로 Select 절에서 행수만큼 다시 수행됨을 의미하네요.
원하는 결과를 얻으려면 두번째 방법을 사용하세요.