Управление порядком операций в SQL-запросе
При выполнении SQL-запросов важно понимать порядок оценки условий и управлять им, чтобы получить ожидаемые результаты.
В этом сценарии представьте, что вы работаете с глобальной демографической базой данных и хотите найти все города в Китае, в которых проживает не менее 100 000 человек, или которые являются столицами провинций.
Группировка и разгруппировка условий
В запросе с несколькими условиями вы можете группировать и разгруппировать условия для контроля порядка операций. Чтобы сгруппировать два или более условий, щелкните клавишу Shift при нажатии на условия, чтобы выбрать их, и нажмите кнопку Группировать условия
. Чтобы разгруппировать условия, выберите условие в группе и нажмите кнопку Разгруппировать условия
.
Два приведенных ниже примера относятся к одному и тому же запросу. В первом примере не используется группировка условий, и возвращаемые результаты не соответствуют ожидаемым. Во втором примере условия сгруппированы таким образом, чтобы обеспечить правильный порядок операций для получения ожидаемых результатов.
Разгруппированные условия
Когда вы запускаете этот запрос, он сначала находит все города Китая, а затем отфильтровывает китайские города с населением более 100 000 человек. Затем, на основе оператора Или, он оценивает весь набор данных, чтобы получить данные о столицах провинций. Конечными результатами являются китайские города с населением более 100 000 человек и любой другой город, являющийся столицей провинции, что не является ожидаемым результатом. Это связано с тем, что оператор И имеет более высокий приоритет, чем оператор Или, поэтому И вычисляется первым.

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

При использовании группировки запрос сначала оценивает условия в группе: имеет ли город численность по меньшей мере 100 000 человек или является ли он столицей провинции. Затем он оценивает, находится ли данный город в Китае. Затем оператор And проверяет, что запрос правильно возвращает города, соответствующие обоим критериям: китайские города с населением не менее 100 000 человек или столицы провинций.
Группировка условий эквивалентна заключению их в круглые скобки. В режиме Редактор SQL этот запрос выглядит следующим образом:
CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')
Расстановка приоритетов в атрибутивных условиях
При выполнении запроса к классу объектов корпоративной геоданных клиент (ArcGIS Pro) обращается к базе данных с помощью SQL-запроса, выполняет запрос к источнику данных в базе данных и возвращает результат. Работая с видом карты, вы можете выбрать, выполнять ли пространственное условие в рамках запроса к классу объектов в базе данных (по умолчанию) или откладывать выполнение в клиенте до обработки атрибутных условий запроса. В режиме редактирования запроса нажмите на иконку меню
и выберите опцию Расстановка приоритетов в атрибутивных условиях, чтобы применить пространственное условие в клиенте после фильтрации объектов базой данных. Это может повысить производительность отображения.
Примечание:
Опция доступна только если источником данных для слоя является класс объектов многопользовательской базы геоданных.