Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Запросы.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
96 Кб
Скачать
☆

Сортировка записей

Для сортировки используется секция, начинающаяся зарезервированными словами ORDER BY (сортировать по). Отсортируем записи по полю NaklID (уникальный иденти­фикатор накладной, первичный ключ).

SELECT

NaklID, NDate, FName, TName, NSum, NPayedSum, NRetSum, NCoeff, NRetDate

FROM Nakls, Firms, TypeNakl

WHERE FirmID=NFirm AND TypeID=NType

ORDER BY NaklID

В БД есть таблица подстановки TypeNakl, содержащая два поля: TypeID (целого типа, первичный ключ) и текстовое поле TName. В поле TypeID указаны возможные зна­чения поля NType (тип накладной) в виде чисел от 0 до 7, а в поле TName – расшифровка смысла типа (0 – покупка у поставщика; 1 – продажа покупателю; 2 – воз­врат поставщику; 3 – возврат от покупателя; 4 – книги получаются по об­мену; 5 – книги передаются по обмену; 6 – покупка с предоплатой; 7 – про­дажа с предоплатой). Другие поля означают: NDate – дата составления накладной; FName – название партнера; NSum – сумма наклад­ной с учетом значения поля NCoeff; NPayedSum – оплаченная сумма (не используется в накладных обмена); NRetSum – сумма возврата (не используется в накладных обмена); NCoeff – величина скидки/наценки; NRetDate – срок возврата нереализованных книг (не используется в на­кладных обмена).

Сортировать можно по любым полям, не обязательно индексным.

Сложные критерии отбора

С помощью секции WHERE можно не только связывать таблицы, но и создавать сложные критерии отбора данных. Для этого в секции указывается произвольное количе­ство операторов вида ПОЛЕ ~ ЗНАЧЕНИЕ, связываемых логическими операциями NOT, AND, OR, где знак тильда (~) означает операцию отношения:

SELECT

NaklID, NDate, FName, TName, NSum, NPayedSum, NRetSum, NCoeff, NRetDate

FROM Nakls, Firms, TypeNakl

WHERE FirmID=NFirm AND TypeID=NType AND (NSum>100000 OR NRetSum>0)

ORDER BY NaklID

В этом примере отбираются только те накладные, сумма которых превышает 100000 рублей или в которых ненулевая сумма возврата.

Приоритет операций отношения в SQL выше приоритета логических операций. Операция OR имеет меньший приоритет, чем операция AND.

Справа от операции отношения указывается значение. Если это значение – тексто­вое или типа дата-время, оно должно заключаться в апострофы или кавычки. Кроме того, к значению текстового поля можно применять операцию LIKE. Тогда значение справа от LIKE представляет не все поле, а лишь его часть:

SELECT BName FROM Books

WHERE BName LIKE ″Я%″

ORDER BY BName

Этот запрос отбирает из таблицы Books названия книг, которые начина­ются с буквы «Я».

Cимвол процента (%) указывает, что на его месте могут стоять любые символы.

Следующий запрос отберет все книги, в названиях которых хотя бы раз встреча­ется буква «я»:

SELECT BName FROM Books

WHERE BName LIKE "%я%"

ORDER BY BName

С помощью зарезервированного слова IN (в [диапазоне]) можно перечислить несколько допустимых значений поля. Следующий запрос отбирает названия 1-й, 3-й и 7-й книг из таблицы Books:

SELECT BName FROM Books

WHERE BookID IN (1, 3, 7)

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

SELECT FName FROM Firms

WHERE FirmID IN

(SELECT NFirm FROM Nakls

WHERE NPayedSum=0 AND NType IN (1, 7))

ORDER BY FName