Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диго С.М. Базы данных проектирование и использование.doc
Скачиваний:
720
Добавлен:
14.05.2016
Размер:
12.04 Mб
Скачать

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

В предложении WHERE указывается условие отбора. При зада­нии условий отбора используются определенные ограничители, за­висящие от типа поля, для которого задается условие отбора. Если при задании запроса на QBE ограничители можно не задавать при вводе запроса (система их введет автоматически), то при задании зап­роса на SQL необходимо самим правильно определить требуемый ограничитель.

Предложение WHERE может содержать до 40 выражений, свя­занных логическими операторами.

Имеются некоторые особенности задания запросов в MS Jet SQL. Так, например, при указании аргумента «Условие Отбора» даты долж­ны вводиться в американском формате8, даже если используется не­американская версия ядра базы данных Jet. Например, дата 23 февра­ля 1946 г. записывается в России как 23.02.46, а в США как 2/23/46. Даты заключаются в символы «решетки» (#).

В QBE допускается ввод дат в европейском формате. Если запрос на QBE преобразовать в запрос на SQL, то изменение формата даты будет проведено автоматически. Так будет выглядеть запрос, изобра­женный на рис. 7.7, в формате SQL:

SELECT сотрудник.ФИО, сотрудник.Дата_рождения

FROM сотрудник

WHERE (((сотрудник.Дата_рождения)<#2/23/1946#));

В Microsoft Access SQL конструкции BETWEEN...AND имеет та­кой же синтаксис, как и в ANSI SQL:

выражение1 [NOT] BETWEEN выражение2 AND выражение3

Но правила, применимые к ним, различаются: в Microsoft Access SQL «выражение2» может быть больше, чем «выражение3», а в ANSI SQL - нет.

В приведенном ниже примере выдаются сведения о зарплате со­трудников, чей оклад находится в диапазоне от 1000 до 2000.

SELECT ФИО, оклад

FROM сотрудник

WHERE оклад Between 1000 And 2000;

Для отбора записей по части значения какого-либо поля исполь­зуется предикат LIKE. В Microsoft Access SQL в предикате LIKE ис­пользуются иные символы шаблона, чем в стандарте:

Символ шаблона

Microsoft Access SQL

ANSI SQL

Любой один символ

?

_ (подчеркивание)

Любая группа любых символов

*

%

Ниже приведен запрос, в котором используется предикат LIKE. Он выводит фамилии и автобиографии тех сотрудников, у которых в поле «Автобиография» встречается упоминание о Москве:

SELECT ФИО, автобиография

FROM сотрудник

WHERE автобиография LIKE "*Москв*";

Следует обратить внимание на то, подобный поиск может дать некоторый «шум».

При использовании режима ANSI SQL-92 обеспечивается поддер­жка подстановочных знаков ANSI, т.е. знак процента (%) и символ подчеркивания (_) также являются частью режима ANSI SQL-92. В одном запросе смешивать знаки нельзя.

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

Предложение GROUP BY позволяет группировать записи по од­ному полю или совокупности полей, указанных в этой фразе. Поря­док следования полей в списке имеет значение, поскольку именно он будет определять старшинство признаков группировки. Допускается до десяти уровней группировки. Нельзя осуществлять группировку по полям, имеющим тип MEMO или объект OLE.

Обычно GROUP BY используется вместе со статистическими функциями, позволяющими проводить вычисления для сформирован­ных групп.

Оператор SELECT, содержащий предложение GROUP BY, обыч­но в качестве полей, выводимых в ответ, включает поля, по которым проводится группировка, и одну (или несколько) статистическую функ­цию SQL. В Access используются следующие статистические функ­ции: Avg, Count, First, Last, Min, Max, StDev, StDevP, Sum, Var, VarP. Статистические функции First, Last, StDev, StDevP, Var, VarP в стан­дарте SQL отсутствуют.

Значения Null, которые находятся в полях, заданных в предложе­нии GROUP BY, группируются и не опускаются. Однако статисти­ческие функции SQL значения Null не обрабатывают.

Ниже приведен пример запроса для определения числа сотрудни­ков на каждой кафедре:

SELECT [код кафедры], Count (ФИО) AS [число_сотрудников]

FROM сотрудник

GROUP BY [код кафедры];