Управление порядком операций в SQL-запросе

AllSource 1.4    |

При выполнении SQL-запросов важно понимать порядок оценки условий и управлять им, чтобы получить ожидаемые результаты.

Два приведенных ниже примера относятся к одному и тому же запросу. В первом примере не используется группировка условий, и возвращаемые результаты не соответствуют ожидаемым. Во втором примере условия сгруппированы таким образом, чтобы обеспечить правильный порядок операций для получения ожидаемых результатов.

В этом сценарии представьте, что вы работаете с глобальной демографической базой данных и хотите найти все города в Китае, в которых проживает не менее 100 000 человек или которые являются столицами провинций.

Пример 1: Группировка отсутствует

Вы можете создать этот запрос в режиме дизайнера с тремя условиями, как показано на рисунке ниже. Когда вы запускаете этот запрос, он сначала находит все города Китая, а затем отфильтровывает китайские города с населением более 100 000 человек. Затем, на основе оператора Or, он оценивает весь набор данных, чтобы получить данные о столицах провинций. Конечными результатами являются китайские города с населением более 100 000 человек и любой другой город, являющийся столицей провинции, что не является ожидаемым результатом. Это связано с тем, что оператор And имеет более высокий приоритет, чем оператор Or, поэтому And оценивается первым.

Три условия в запросе, не сгруппированные

Пример 2: Группировка

В этом случае, чтобы вернуть ожидаемые результаты, сначала необходимо выполнить оценку оператора Or. Вы можете сгруппировать условия, чтобы изменить порядок выполнения операций. Условия в группе оцениваются перед условиями за пределами группы.

Три условия в запросе, последние два сгруппированы

Чтобы сгруппировать два или более условий, щелкните клавишу Shift при нажатии условий, чтобы выбрать их, и нажмите кнопку Группировать условия Группировать условия. Чтобы разгруппировать условия, выберите условие в группе и нажмите кнопку Разгруппировать условия Разгруппировать условия.

При использовании группировки запрос сначала оценивает условия в группе: имеет ли город численность по меньшей мере 100 000 человек или является ли он столицей провинции. Затем он оценивает, находится ли данный город в Китае. Затем оператор And проверяет, что запрос правильно возвращает города, соответствующие обоим критериям: китайские города с населением не менее 100 000 человек или столицы провинций.

Группировка условий эквивалентна заключению их в круглые скобки. В режиме Редактор SQL этот запрос выглядит следующим образом:

CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')