Предложение WHERE оператора SELECT языка SQL. Проверка на членство во множестве, проверка на соответствие шаблону.

ПРЕДЛОЖЕНИЕ WHERE Предложение WHERE используется для включения в набор данных лишь

нужных записей. В этом случае оператор SELECT имеет следующий формат:

SELECT {* | <Список_полей>}

FROM <Список_таблиц>

WHERE <условие_выборки>

В наборе данных, возвращаемых оператором SELECT, будут включены толь- ко те записи, которые удовлетворяют условиям поиска.

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

сравнение – значение одного выражения сравнивается со значением друго- го выражения. Например, такое условие отбора используется для отбора всех офисов, находящихся в Московской области, или всех служащих, фактические объемы продаж которых превышают плановые;

проверка на принадлежность диапазону – проверяется, попадает ли указан- ное значение в определенный диапазон. Например, такое условие отбора ис- пользуется для нахождения служащих, чей возраст больше 30, но меньше 50 лет;

проверка на членство в множестве – проверяется, совпадает ли значение выражения с одним из значений заданного множества. Например, такое условие отбора используется для выбора офисов, расположенных в городах Москва, Пенза или Самара;

проверка на соответствие шаблону – проверяется, соответствует ли значе- ние, содержащееся в столбце, определенному шаблону. Например, такое усло- вие используется для выбора клиентов, чьи имена начинаются с буквы «А»;

проверка на равенство на значение NULL – проверяется, содержится ли в столбце значение NULL. Например, такое условие отбора используется для на- хождения всех служащих, которым не был назначен руководитель.

Предложения GROUP BY и HAVING оператора SELECT языка SQL. Способы и правила группировки строк.

Предложение GROUP BY используется для определения групп выходных строк, к которым могут применяться агрегатные функции (COUNT, M1N, AVG и т.д.). Если это предложение отсутствует и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции, и эти функции будут применяться ко всему набору строк, которые удовлетворяют запросу. В противном случае все столбцы списка SELECT, не вошедшие в агрегатную функцию, должны быть "сгруппированы" с помощью предложения GROUP BY. Все выходные строки запроса, которые сгруппированы по равенству значений столбцов, образуют единую группу (для GROUP BY все значения NULL трактуются, как равные). Агрегатная функция будет применяться к каждой из таких групп. Рассмотрим простой пример:SELECT snum, AVG (amount), MAX (amount) FROM Salespeople GROUP BY snum;В этом запросе предполагается, что таблица Salespeople имеет, как минимум, два столбца (snum и amount) и, скорее всего, содержит записи с платежными транзакциями. Этa таблица имеет одну строку па каждую транзакцию, содержащую имя продавца и сумму (если это базовая таблица, а не представление, то она должна иметь первичный ключ). Все транзакции с одинаковыми значениями snum (имя продавца) образуют группу, и на выходе SELECT вычисляются максимальные и средние значения для каждой группы. Если бы в SELECT присутствовал столбец с датой, то можно было бы вычислять эти цифры для каждой конкретной латы. Для этого нужно было бы задать дату в качестве группирующего столбца, и тогда агрегатные функции будут вычисляться для каждой комбинации значений (продавец-дата). Такую группировку можно реализовать с помощью соединения, при записи которого необходимо использовать имена таблиц или связанные .префиксы вместе с именами столбцов (чтобы избежать неоднозначности).Если используется предложение COLLATE FROM, то полученная последовательность сортировки будет определена для выходного столбца, полученного с помощью группировки. После COLLATE FROM должен следовать атрибут приведения, сданный и явном виде. Естественно, что предложение COLLATE применимо только к сгруппированному столбцу типа CHARACTER.

Предложение HAVING

Если предложение WHERE определяет предикат для фильтрации строк, то предложение HAVING применяется после группировки для определения аналогичного предиката, фильтрующего группы но значениям агрегатных функции. Это предложение необходимо для проверки значений, которые получены с помощью агрегатной функции не из отдельных строк декартова произведения, определенного к предложении FROM, а из групп таких строк. Поэтому такая проверка не может содержаться в предложении WHERE.

UNION, INTERSECT, EXCEPT, и CORRESPONDINGЭти операторы используют и качестве аргумента весь оператор SELECT (запрос), исключая предложение ORDER BY, в соответствии со следующим синтаксисом:

запрос A{UNION | INTERSECT | EXCEPT} [ALL]запрос ВПредложение TABLE является традиционным способом записи простого запроса:

TABLE SalespeopleЭтот оператор эквивалентен следующему оператору:

SELECT * FROM SalespeopleКроме того, можно использовать конструктор значений таблиц для построения таблиц и памяти. Выходные столбцы каждого из запросов должны быть сравнимы между собой с учетом указанного порядка сравнения: первый столбец запроса А с первым столбцом запроса В, второй со вторым и т.д.. - так как эти столбцы должны быть слиты.

Предложение UNION включает все выходные строки каждого из запросов. Если определен параметр ALL, то сохраняются все дубликаты выходных строк, в противном случае оставляется только одна строка. Если определено предложение EXCEPT, то из результата исключаются все строки второго запроса, а в выходных данных остается только одна из дублированных строк. Если определено EXCEPT ALL, то число дублированных строк запроса В вычитается из числа дублированных строк запроса А, и полученное число строк появляется на выходе, если, конечно, оно не равно 0. Если определено INTERSECT, то нее строки из запросов А и В появляются на выходе в одном экземпляре. Если определено INTERSECT ALL, то дублированные строки будут появляться на выходе то число раз. которое является минимумом числа их дублей в запросах A и В.Оператор CORRESPONDING ограничивает операции со столбцами, имеющими одинаковые имена и сравнимые типы данных, и каждом из предложений SELECT oбоих запросов (Конечно, это можно сделать с помощью предложения AS, которое назначает имена, или с помощью выражения CAST для преобразования типов данных.) Если задан список столбцов, то они должны, как уже было сказано, иметь общие имена и типы данных для обоих запросов. Если список не задан, используются только столбцы с совпадающими именами и типами данных. В любом случае на выходе будут только такие столбцы. Они будут выводиться и порядке, заданном в списке, а если такой список не задан, то в порядке их появления в первом запросе. При использовании оператора CORRESPONDING отпадает необходимость в том, чтобы каждый список SELECT имел одинаковое число столбцов с совпадающими типами данных, расположенными в одном и том же порядке. В противном случае такое условие является обязательным.

Наши рекомендации