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

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

В секции WHERE можно указывать условное выражение. В нем используются операции сравнения <, >, =, < >, >=, <=, логические операции OR, AND, NOT и круглые скобки. Эти операции SQL совпадают с операциями Object Pascal. В результирующий НД попадают только те записи, значения полей которых удовлетворяют указанному условию. Например:

SELECT NNom, NData, ZNaim, NSumma

FROM Naklad, Zakazcik

WHERE ZKod = NZKod

AND (NSumma>10000 OR NData > = ’22.09.03’)

ORDER BY NNom

В этом примере отбираются только те накладные, для которых сумма отгрузки превышает 10 000 рублей или которые выписаны не ранее 22 сентября 2003 г. Текстовые значения и значения типа «дата-время» в операциях отношения заключаются в апострофы или двойные кавычки.

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

SELECT INaim FROM Izdelie

WHERE IKod IN (‘001’, ‘003’, ‘004’)

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

SELECT ZNaim FROM Zakazcik

WHERE ZKod IN

(SELECT PZKod FROM Plateg

WHERE PSumma > 10000)

ORDER BY ZNaim

6.2.5. Псевдонимы таблиц и комментарии

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

Если бы, например, таблицы Izdelie и Zakazcik содержали одноименные поля Naim, то для исключения неоднозначности имена полей пришлось бы дополнить именами их таблиц:

SELECT NNom, Izdelie.Naim, Zakazcik.Naim

FROM Naklad, Izdelie, Zakazcik

Поскольку совпадающие имена таблиц могут встречаться и в других секциях запроса, для сокращения в SQL разрешено вместо имени таблицы использовать ее псевдоним. Псевдоним указывается за именем таблицы в секции FROM:

SELECT

/* Совпадающие имена полей дополняются псевдонимами таблиц */

NNom, I.Naim, Z.Naim

/* Псевдонимы задаются символами сразу за именем таблицы */

FROM Naklad, Izdelie I, Zakazcik Z

В любом месте запроса может стоять комментарий, который выделяется парой символов «/*».

6.2.6. Агрегатные функции и группировка записей

В секции SELECT можно также использовать одну из агрегатных функций:

  • AVG – возвращает среднее значение аргумента;

  • COUNT – подсчитывает количество вхождений аргумента во все записи НД;

  • MAX – возвращает максимальное значение аргумента;

  • MIN – возвращает минимальное значение аргумента;

  • SUM – суммирует значения аргумента.

В качестве аргумента агрегатной функции может использоваться произвольное выражение, составленное из полей НД. Например, следующий запрос возвращает среднее значение долга заказчиков:

SELECT AVG (NSumma – PSumma)

FROM Naklad, Plateg

Список всех заказчиков с указанием суммы стоимости всех поставленных им изделий дает такой запрос:

SELECT SUM (NSumma), ZNaim

FROM Naklad, Zakazcik

WHERE ZKod = NZKod

GROUP BY ZNaim

Разумеется, интересно получить не только суммы поставок, но и имена партнеров, поэтому в приведенном выше запросе в секции SELECT указана агрегатная функция и поле таблицы Zakazcik.

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

Количество всех накладных, связанных с поставкой изделий, вернет запрос:

SELECT COUNT (NZKod) FROM Naklad

В то же время следующий запрос вернет количество заказчиков:

SELECT COUNT (DISTINCT NZKod) FROM Naklad