Сортировка записей
Для сортировки используется секция, начинающаяся зарезервированными словами 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
