Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Использование конструкции where

Для ограничения выборки записей из таблицы используется дополнение WHERE.

Например, необходимо отобрать только те записи, в которых имя человека включает строку 'MICHAEL':

REPORT Z_SELECT .

TABLES: UPERS.

SELECT * FROM UPERS WHERE EUNA LIKE '%MICHAEL%'.

WRITE: / UPERS-EUNA.

ENDSELECT.

Результат выполнения запроса:

Рисунок 34

В дополнении WHERE также можно использовать символы сравнения (>=, = и т.п.), оператор включения IN(a,b,c) и другие.

Чтение единственного элемента таблицы

При чтении единственной записи таблицы используется конструкция SELECT SINGLE и дополнение WHERE, в котором указаны все поля первичного ключа. После выполнения системный код возврата SY-SUBRC указывает на успешное (равно 0) или неуспешное (не равно 0) завершения запроса.

REPORT Z_SELECT .

TABLES: UPERS.

SELECT SINGLE * FROM UPERS WHERE EUNR = '00000002'.

IF SY-SUBRC = 0.

WRITE UPERS-EUNA.

ELSE.

WRITE 'not found'.

ENDIF.

В приведенном примере выводится один элемент с кодом '00000002'.

Извлечение ограниченного числа полей

В предыдущих примерах с помощью звездочки (*) выбирались все поля. Часто в этом нет необходимости, а для указания необходимых полей можно с помощью списка, следующего после оператора SELECT. Соответствующие поля программы перечисляются после оператора INTO в круглых скобках:

REPORT Z_SELECT .

TABLES: UPERS.

DATA: NAME LIKE UPERS-EUNA,

ADDRESS LIKE UPERS-ADRE.

SELECT EUNA ADRE INTO (NAME, ADDRESS) FROM UPERS.

WRITE: / NAME, ADDRESS.

ENDSELECT.

Важно помнить, что извлечение ограниченного числа полей является более производительным, чем извлечение всех полей таблицы. Если нет необходимости извлекать все поля, рекомендуется извлекать только необходимые.

Упорядочение результатов запроса

Для сортировки результата запроса применяется конструкция ORDER BY. Например, чтобы отсортировать результат самого простого запроса по полю EUNA необходимо написать:

REPORT Z_SELECT .

TABLES: UPERS.

SELECT * FROM UPERS ORDER BY EUNA.

WRITE: / UPERS-EUNA.

ENDSELECT.

Результат отсортированного списка выглядит следующим образом:

Рисунок 35

Динамическая выборка данных

В простейшем случае известно все, кроме логической структуры условий дополнения WHERE.

Для примера допустим, что необходимо выполнить запрос, в котором выбирались бы имена тех людей, коды которых находились бы в диапазоне, определенным пользователем. Для этих целей используется конструкция SELECT-OPTIONS.

REPORT Z_SELECT .

TABLES: UPERS.

SELECT-OPTIONS NUM FOR UPERS-EUNR.

SELECT * FROM UPERS WHERE EUNR IN NUM.

WRITE: / UPERS-EUNA.

ENDSELECT.

В данном примере программа просит пользователя ввести диапазон кодов, которые потом подставляются в условие конструкции SELECT.

Рисунок 36

Если выбрать диапазон кодов с 2 по 4, то в выборку попадут три записи с кодами (2,3 и 4).

Вложенные циклы select

Допустим нам необходимо вывести на экран список, состоящий из двух колонок: Название курса (UKURS-KNAME) и имя профессора (UKURS-PRFNR-EUNA), читающего этот курс. Причем чтобы узнать имя нужно "проскочить" через 2 таблицы - UKURS (Курсы) и UPERS (Люди).

REPORT Z_SELECT .

TABLES: UKURS, UPERS.

SELECT * FROM UKURS.

SELECT * FROM UPERS WHERE EUNR = UKURS-PRFNR.

WRITE: / UKURS-KNAME, UPERS-EUNA.

ENDSELECT.

ENDSELECT.