Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_KURS_WIN / Оператор SELECT.doc
Скачиваний:
31
Добавлен:
10.04.2015
Размер:
69.12 Кб
Скачать

Предложение 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 имел одинаковое число столбцов с совпадающими типами данных, расположенными в одном и том же порядке. В противном случае такое условие является обязательным.

Предложение order by

И, наконец, предложение ORDER BY используется для сортировки выходных данных. Строки сортируются в соответствии со значениями столбцов, указанных в списке. Первый столбец имеет наивысший приоритет, второй столбец и задает порядок сортировки дублируемых значений мерного столбца, третий столбец вступает в действие, если совпадают значения но втором столбце, и т.д. Можно задать параметр сортировки ASC (по возрастанию, используется по умолчанию) или DESC (по убыванию) отдельно для каждого столбца. Сортировка набора символов будет осуществляться в соответствии с его упорядочивающей последовательностью. Вместо имен столбцов можно указывать целые числа. Эти числа указывают па местоположение столбца в выходных данных, так что 1 будет указывать на первый столбец, а 5 на пятый столбец и т.д. Если выходные столбцы не имеют имен, то будут использоваться номера.

Пример:

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

SELECT snum, SUM (amount), AVG (amount), odate

FROM Orders

WHERE odate BETWEEN '10-01-1992' AND '10-01-1994'

GROUP BY snum, odate

HAVING SUM (amount) > 100.00;

Соседние файлы в папке BD_KURS_WIN