Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФОРМАТИРОВАНИЕ СВОДНОЙ ТАБЛИЦЫ.docx
Скачиваний:
8
Добавлен:
12.04.2015
Размер:
188.49 Кб
Скачать

Обработка неопределенных значений

В операторе SELECT может использоваться специальная функ­ция ISNULL. проверяющая наличие значения NULL в определенном поле. Ее можно использовать в сочетании с логической функцией Ilf, имеющей такбй синтаксис:

IIf(check_expression, value_if_true, value_if_false)

где: check_expression - проверяемое выражение или поле;

value_if_true - замещаемое выражение, если результат про­верки ИСТИНА;

value_if_false - замещаемое выражение, если результат про­верки ЛОЖЬ.

Например, требуется получить информацию о студентах (фа­милия, имя, отчество и телефон), причем для тех студентов, у которых нет домашнего телефона, в соответствующем поле нуж­но отобразить слово «Нет». Тогда вместо поля fPhone нужно ука­зать в запросе функцию Ilf со следующими параметрами: IIf(ISNULL(fPhone), 'Нет', fPhone). Таким образом, если в поле fPhone содержится значение NULL, то отобразится «Нет», иначе - номер телефона.

Запрос будет иметь следующий вид:

SELECT fLastName, fFirstName, fMiddleName,

IIf(ISNULL(fPhone), 'Нет', fPhone)

FROM tbIStudents;

Сортировка данных

Выше были рассмотрены основные возможности выборки данных из таблиц БД при помощи оператора SELECT и входящих в его состав ключевых слов FROM и WHERE. Однако простая вы­борка данных не очень удобна для восприятия в связи с тем, что данные отображаются в том же порядке, в котором они заноси­лись в таблицу, и при просмотре пользователю тяжело сразу об­наружить интересующую его информацию. Поэтому при по­строении запросов удобно использовать предложение ORDER BY для сортировки данных в результирующей выборке, что улучша­ет восприятие таблиц выборки и их анализ. Используя ORDER BY в инструкции SELECT, данные можно сортировать по любому из имеющихся столбцов (как по возрастанию данных, так и по убы­ванию).

Синтаксис предложения ORDER BY можно представить в сле­дующем виде:

SELECT selection_list FROM table_name

[ORDER BY sortingjist [ASC | DESC]];

где: sortingjist - список для указания порядка сортировки вы­бранных данных. Он может включать произвольное количество элементов, разделяемых запятыми;

ASC - ключевое слово для установки режима сортировки дан­ных по возрастанию (используется по умолчанию);

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

Рассмотрим пример, в котором выполняется отображение списка предметов, отсортированного по алфавиту:

SELECT fSubject AS "Предмет"

FROM tbISubjects ORDER BY fSubject;

Теперь составим запрос, отображающий список студентов (фа­милии, имена, отчества) с сортировкой по первым двум полям:

SELECT fLastName, fFirstName, fMiddleName

FROM tbIStudents

ORDER BY fLastName, fFirstName;

Предложение ORDER BY допускает указание, кроме имен столбцов, их порядковых номеров в списке выбора SELECT. Но­мера выбираются в том порядке, в котором столбцы записаны в предложении SELECT. Например, такой же результат, как и для предыдущего запроса, можно получить, если команду выборки переписать в таком виде:

SELECT fLastName, fFirstName, fMiddleName FROM tbIStudents ORDER BY 1, 2;

Здесь в предложении ORDER BY числом 1 обозначено поле fLastName, а числом 2 - поле fFirstName (по порядку их следова­ния после оператора SELECT).

Как видно из рассмотренных выше примеров, по умолчанию сортировка выполняется по возрастанию чисел, дат или в алфа­витном порядке. Для того чтобы управлять направлением сорти-

Ключевое слово ТОР п имеет смысл использовать только в том случае, если установлен порядок сортировки по какому-либо по­лю (предложение ORDER BY, выше).

Рассмотрим пример выборки фамилий и имен студентов с ог­раничением их количества. Чтобы отобразить, например, только первые 10 уникальных сочетаний «фамилия-имя», отсортирован­ных по алфавиту, нужно выполнить такой запрос SQL:

SELECT DISTINCT TOP 10 fLastName, fFirstName

FROM tbIStudents

ORDER BY fLastName;< fFirstName;

Если же требуется вывести ровно половину списка студентов, то запрос будет следующим:

SELECT DISTINCT TOP 50 PERCENT fLastName, fFirstName

FROM tbIStudents

ORDER BY fLastName, fFirstName;