SQL Server: оператор WHERE. Укороченная операция
Содержание:
1. WHERE для фильтрации, ON для сопоставления;
2. Аргументы поиска и равенство против отличия. Часть I;
3. Аргументы поиска и равенство против отличия. Часть II;
4. Аргументы поиска и равенство против отличия. Часть III;
5. Укороченная операция (Вы читаете данный раздел);
6. WHERE и псевдонимы столбцов.
Один из сложных для понимания аспектов логической обработки запросов связан с тем обстоятельством, что все выражения в одном логическом шаге вычисляются как набор, а поскольку набор неупорядоченный, отсутствует гарантия, что SQL Server обрабатывает выражения в порядке их появления. Рассмотрим это на примере.
С помощью программного кода в листинге выше создадим и заполним таблицу с именем Properties. Таблица содержит различные свойства; столбцы предназначены для имени свойства, имени типа данных и значения. Последнее хранится в виде строки символов. Предположим, требуется отфильтровать только целочисленные свойства, превышающие 10. Для этого предпринимается следующая попытка (см. листинг ниже).
В этом запросе предполагается, что предикаты будут вычисляться в порядке их появления слева направо, а если свойство не целочисленное, произойдет закорачивание. Но, поскольку все выражения в одном логическом шаге воспринимаются как набор, нет гарантии, что они будут обработаны в том порядке, в котором записаны. При попытке выполнить этот запрос на моем компьютере было получено сообщение об ошибке (см. экран выше).
Взглянув на свойство Predicate оператора Clustered Index Scan в плане выполнения запроса, можно выяснить, что предикаты фильтрации реорганизованы таким образом, как показано в листинге выше. Хотя SQL Server поддерживает метод закорачивания, не гарантируется, что ваши предикаты фильтрации будут вычислены в том порядке, в котором они записаны. Это соответствует принципу логической обработки запросов и не должно вызывать удивления. Можно попытаться обойти проблему, инкапсулировав запрос, который фильтрует только целочисленные свойства в табличном выражении (CTE, производная таблица, представление), и применив запрос с преобразованием для табличного выражения, например, как в листинге ниже.
Приступите к изучению возможностей оператора WHERE в среде SQL Server завтра, а сегодня планируете наконец-то приобрести теплую зимнюю куртку, которой так не хватает в вашем гардеробе? В этом случае, я настоятельно советую вам перейти на страничку https://megaturnik.ua/sportivnaya-odezhda/kurtki/a (https://megaturnik.ua/sportivnaya-odezhda/kurtki/alfa-indastriz/). Магазин "Мега Турник" предлагает роскошные куртки от именитого бренда Alpha Industries по самым низким ценам в Интернете.
1. WHERE для фильтрации, ON для сопоставления;
2. Аргументы поиска и равенство против отличия. Часть I;
3. Аргументы поиска и равенство против отличия. Часть II;
4. Аргументы поиска и равенство против отличия. Часть III;
5.
6. WHERE и псевдонимы столбцов.
Один из сложных для понимания аспектов логической обработки запросов связан с тем обстоятельством, что все выражения в одном логическом шаге вычисляются как набор, а поскольку набор неупорядоченный, отсутствует гарантия, что SQL Server обрабатывает выражения в порядке их появления. Рассмотрим это на примере.
С помощью программного кода в листинге выше создадим и заполним таблицу с именем Properties. Таблица содержит различные свойства; столбцы предназначены для имени свойства, имени типа данных и значения. Последнее хранится в виде строки символов. Предположим, требуется отфильтровать только целочисленные свойства, превышающие 10. Для этого предпринимается следующая попытка (см. листинг ниже).
В этом запросе предполагается, что предикаты будут вычисляться в порядке их появления слева направо, а если свойство не целочисленное, произойдет закорачивание. Но, поскольку все выражения в одном логическом шаге воспринимаются как набор, нет гарантии, что они будут обработаны в том порядке, в котором записаны. При попытке выполнить этот запрос на моем компьютере было получено сообщение об ошибке (см. экран выше).
Взглянув на свойство Predicate оператора Clustered Index Scan в плане выполнения запроса, можно выяснить, что предикаты фильтрации реорганизованы таким образом, как показано в листинге выше. Хотя SQL Server поддерживает метод закорачивания, не гарантируется, что ваши предикаты фильтрации будут вычислены в том порядке, в котором они записаны. Это соответствует принципу логической обработки запросов и не должно вызывать удивления. Можно попытаться обойти проблему, инкапсулировав запрос, который фильтрует только целочисленные свойства в табличном выражении (CTE, производная таблица, представление), и применив запрос с преобразованием для табличного выражения, например, как в листинге ниже.
Приступите к изучению возможностей оператора WHERE в среде SQL Server завтра, а сегодня планируете наконец-то приобрести теплую зимнюю куртку, которой так не хватает в вашем гардеробе? В этом случае, я настоятельно советую вам перейти на страничку https://megaturnik.ua/sportivnaya-odezhda/kurtki/a (https://megaturnik.ua/sportivnaya-odezhda/kurtki/alfa-indastriz/). Магазин "Мега Турник" предлагает роскошные куртки от именитого бренда Alpha Industries по самым низким ценам в Интернете.