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

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

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

SELECT NaklID, Date, Name, Name, Sum, PayedSum

Чтобы исключить неоднозначность, в таких случаях имена полей дополняют име­нами их таблиц:

SELECT NaklID, Date, Firms.Name, TypeNakl.Name, Sum, PayedSum

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

SELECT NaklID, Date, F.Name, T.Name, Sum, PayedSum

FROM Nakls, Firms F, TypeNakl T

Псевдоним указывается сразу за именем таблицы в секции FROM.

В любом месте запроса может стоять комментарий:

SELECT

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

NaklID, Date, F.Name, T.Name, Sum, PayedSum

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

FROM Nakls, Firms F, TypeNakl T

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

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

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

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

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

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

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

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

SELECT AVG(NSum-NPayedSum-NRetSum)

FROM Nakls

WHERE NType in (1, 7)

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

SELECT FName, SUM(NSum)

FROM Nakls, Firms

WHERE FirmID=NFirm AND NType in (0, 6)

GROUP BY FName

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

При использовании агрегатных функций иногда требуется исключить из списка повторяющиеся значения полей. Для этого служит зарезервированное слово DISTINCT.

Например, представленный ниже запрос вернет количество всех накладных, свя­занных с поставкой книг:

SELECT COUNT(NFirm) FROM Nakls

WHERE NType IN (0, 6)

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

SELECT COUNT(DISTINCT NFirm) FROM Nakls

WHERE NType IN (0, 6)

Вставка, удаление и редактирование записей

В таблицу БД запись вставляется с помощью оператора

INSERT INTO Имя_таблицы (Список_полей) VALUES (Список_значений)

Например:

INSERT INTO TypeNakl (TName, TypeID) VALUES ("Брак", 8)

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

INSERT INTO TypeNakl VALUES (8, "Брак")

С помощью оператора INSERT можно вставить сразу группу записей. Пусть, например, таблица создана следующим оператором:

CREATE TABLE NewTable(MoveID INT, MNakl SMALLINT, MBook SMALLINT,

MQuan SMALLINT, MPrice FLOAT);

Тогда следующий оператор вставит в нее список книг для накладной с идентифи­катором 100:

INSERT INTO NewTable

SELECT * FROM MoveBook

WHERE MNakl=100

Примечание.

Таблица MoveBook

Имя поля

Назначение

MoveID

Уникальный идентификатор (первичный ключ)

MNakl

Код накладной из поля NaklID таблицы Nakls (индексное поле)

MBook

Код книги из поля BookID таблицы Books (индексное поле)

MQuan

Количество экземпляров книги

MPrice

Цена одного экземпляра с учетом скидки/наценки

Для удаления записей используется оператор

DELETE FROM Имя_таблицы WHERE Условие_выборки_записей

Например: DELETE FROM TypeNakl WHERE TypeID=8

Если опустить секцию WHERE, из таблицы будут удалены все записи.

Изменение отдельных полей таблицы реализуется оператором

UPDATE Имя_таблицы SET Имя_поля=Значение WHERE Условие_выборки

Например: UPDATE TypeNakl SET TName="Списание в брак" WHERE TypeID=8

За зарезервированным словом SET может стоять произвольное количество полей с указанием их значений; два соседних присваивания Имя_поля=Значение разделяются запятой. Если опустить секцию WHERE, будут изменены значения всех записей таблицы.