2014-01-20 2 views
0

В соответствии с этим link при использовании в запросе rownum он вызывается в следующем порядке операций.Уточняющий порядок операций в Oracle

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? Что, если у WHERE есть rownum, а у AND нет?

+3

В какой 'И' вы имеете в виду? 'AND' не является предложением - это ключевое слово, которое сочетает выражения, составляющие часть предложения. Таким образом, он будет оцениваться как любое условие, которое оно является частью ... – PinnyM

+1

И просто добавляет дополнительные ограничения в предложение WHERE. – OldProgrammer

+0

@OldProgrammer. , , 'AND' также может использоваться в операторе' case', который может отображаться в предложениях 'select',' group by', 'having' и' order by'. –

ответ

1

И не играет здесь роли. Когда результирующий набор строится, rownum присваивается результатам перед внешним упорядочением. Фильтрация на ROWNUM - это жесткая остановка от подачи результатов от более глубокого в плане выполнения. Поэтому, например, такая конструкция, как where rownum > 5, не возвращает строк.

Надеюсь, это поможет. Если нет, пожалуйста, уточните в своем вопросе и/или объясните, почему вы спрашиваете. Существуют альтернативы, которые иногда лучше, например, row_number().

-1

У меня только что было обновление, которое не имело места, где field_value не равно null, а rownum = 1. , поскольку rownum = 1 был для строки, у которой было field_value = null, которая была строкой, которую она устала возвращать, а затем никаких действий не произошло в обновлении.

Таким образом, в предложении Where есть также порядок работы. необходимо поместить() вокруг него или сделать его суб-запросом, чтобы убедиться, что rownum находится на результатах других частей причины.

Для моего случая я использовал отличный вместо rownum = 1.

+0

Пожалуйста, поясните это объяснение, это не очень понятно и касается только одного конкретного случая, а не общего вопроса. – mdurant