2014-01-20 2 views
0

link에 따르면, rownum을 쿼리에 사용하면 다음과 같은 연산 순서로 호출됩니다.오라클에서 연산의 순서를 명확하게하기

The FROM/WHERE clause goes first. 
ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause. 
SELECT is applied. 
GROUP BY is applied. 
HAVING is applied. 
ORDER BY is applied. 

은 내가 AND이 목록에 분류 될 위치를 알고 싶어요. WHERE과 동시에 평가 될까요? WHERErownum이 있고 AND에없는 경우 어떻게해야합니까?

+3

어떤 AND를 말하고 있습니까? 'AND'는 절이 아닙니다. 절을 결합하는 표현식을 결합한 키워드입니다. 따라서, 그것은 WHERE 절의 일부인 것으로 평가 될 것입니다 ... – PinnyM

+1

그리고 단지 WHERE 절에 추가 제약 조건을 추가합니다. @OldProgrammer. – OldProgrammer

+0

. . 'AND'는'select','group by','having' 및'order by' 절에 나타날 수있는'case' 문에서도 사용할 수 있습니다. –

답변

1

AND에는이 역할이 없습니다. 결과 집합이 구성 될 때 rownum은 가장 바깥 쪽 순서가 지정되기 전에 결과에 할당됩니다. ROWNUM에서의 필터링은 실행 계획에서 더 깊은 곳에서 결과를 얻는 것을 어렵게합니다. 따라서 예를 들어 where rownum > 5과 같은 구조체는 행을 반환하지 않습니다.

이 정보가 도움이되기를 바랍니다. 그렇지 않다면 질문에 정교하게 설명하거나 질문하는 이유를 설명하십시오. row_number()과 같이 때로는 더 좋은 대안이 있습니다.

-1

방금 ​​field_value가 null이 아니고 rownum = 1 인 업데이트가 없었습니다. rownum = 1은 반환 할 피곤한 행이었던 field_value = null을 가진 행 이었으므로 이후 아무런 작업도 발생하지 않았습니다 업데이트에서.

따라서 Where 절에는 조작 순서가 있습니다. 은 그 주위에 put()을하거나 rownum이 where의 다른 부분의 결과에 있는지 확인하기 위해 하위 쿼리로 만들 필요가 있습니다.

내 경우에 rownum = 1 대신 별명을 사용했습니다.

+0

이 설명을 확장하십시오. 명확하지 않으며 일반적인 질문이 아닌 특정 사례 만 처리합니다. – mdurant