Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-03-15.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
12.65 Mб
Скачать

4.3.6.6. Запросы

Select [All | Distinct | Top n [Percent]] With Ties <список> [Into <таблица>]

From {<таблица>|<представление>} [(<параметры оптимизации>)], …

[Where <условие>] [Group By <поля группировки>] [Having <условие>]

[Order By <поля сортировки>] [Compute <функции>] [For Browse]

Рассмотрим дополнительные возможности (п. 1.3.8.3).

Into <таблица> - формирование таблицы.

<параметры оптимизации> ‑ Nolock (чтение несохраненных данных – данных, на которые могут повлиять другие пользователи), HoldBlock/Tab­Lock (блокировка страницы/таблицы для других пользовате­лей), UpdLock (позволяет пользователям читать данные из таблицы, но не обновлять), TabLockx (блокировка чтения и корректировки таблицы для других пользовате­лей), Paglock (устанавливается в том случае, если установлена блокировка типа TabLockx и вы разрешаете блокировку данных другим пользователям), Index=<имя/номер используемого индекса> (если указать ноль, то сканируется таблица).

Where <условие> ‑ в этой директиве можно дополнительно указать (если не использовать фразу Join (п. 1.3.8.3)) полное (*=*), ле­во­сто­ро­нее (*=), правостороннее (=*) и внутреннее (=) объединение таблиц в ус­ло­­ви­ях свя­зы­вания таблиц (Where Cotrudniki.koddol*=Dolgnosti.koddol) (п. 1.3.8.3).

For Browse - чтение таблицы, которая редактируется другим клиентом.

Compute <итоговые функции Sum(), Avg(), Min(), Max(), Count()>

[By <поля группировки>] ‑ формирование дополнительных строк с проме­жу­точными итогами, аналогичных строкам в подножиях групп отчетов. Поля группировки должны совпадать с полями сортировки.

Пример вывода итоговой суммы продаж товаров в конце запроса.

SELECT Товары.nt AS Товар, --наименование товара

[Продажа товаров].dp AS [Дата продажи], --дата продажи

[Продажа товаров].st AS Сумма --стоимость продажи

FROM [Продажа товаров]

INNER JOIN Товары ON [Продажа товаров].kt = Товары.kt --связывание

COMPUTE Sum([Продажа товаров].st) --вывод строки с итогом по всем товарам

Пример вывода промежуточных итогов продажи товаров в сто­имост­ном выражении за каждый день.

SELECT Товары.nt AS Товар, --наименование товара

[Продажа товаров].dp AS [Дата продажи], --дата продажи

[Продажа товаров].st AS Сумма --стоимость продажи

FROM [Продажа товаров]

INNER JOIN Товары ON [Продажа товаров].kt = Товары.kt --связывание

ORDER BY [Продажа товаров].dp desc --сортировка по дате продажи

COMPUTE Sum([Продажа товаров].st) By [Продажа товаров].dp --итоги

Пример итогового запроса с группировкой с итогами ежедневных про­даж по товарам в натуральном выражении.

SELECT Товары.nt AS Товар, --первая колонка

[Продажа товаров].dp AS [Дата продажи], --вторая колонка

[Единицы измерения].ne AS [Единица измерения], --третья колонка

SUM([Продажа товаров].kol) AS Количество --итоговое количество

FROM [Единицы измерения] INNER JOIN --связывание таблицы

[Продажа товаров] ON [Единицы измерения].ke = [Продажа товаров].ke

INNER JOIN Товары ON [Продажа товаров].kt = Товары.kt --связывание

GROUP BY Товары.nt, [Продажа товаров].dp, [Единицы измерения].ne

Пример запроса с итогами крупных (более 300000 рублей) продаж по товарам в стоимостном выражении.

SELECT Товары.nt AS Товар, --товары

SUM([Продажа товаров].st*[Продажа товаров].kol) AS Сумма --итоги

FROM [Продажа товаров] --исходные таблицы

INNER JOIN Товары ON [Продажа товаров].kt=Товары.k t --связывание

GROUP BY Товары.nt --группировка

HAVING SUM([Продажа товаров].cena*[Продажа товаров].kol)>300000

ORDER BY 2 desc--сортировка по убыванию итоговой суммы (колонка 2)

Пример формирования запроса с фамилиями высокооплачиваемых сотрудников, у которых оклад в два раза выше среднего по предприятию. SELECT s.fam [фамилия сотрудника], oklad оклад --колонки запроса

FROM [Сотрудники] s --исходная таблица и ее псевдоним

WHERE oklad*2>= --условие отбора записей

(SELECT avg (oklad) FROM Сотрудники) --подзапрос - средний оклад

ORDER BY 2 desc --сортировка по убыванию оклада (вторая колонка)

Пример формирования временной таблицы с числом сотрудников в подразделении 30 и более человек и вывод этой таблицы на экран.

DROP table [#Таблица крупных подразделений] --удаление таблицы

SELECT [Подразделение], count(*) [Число сотрудников] --колонки таблицы

Into [#Таблица крупных подразделений] -имя создаваемой таблицы

FROM [Базовое представление] --таблица формируется из базового запроса

GROUP BY [Наименование подразделения] -поле группировки

HAVING count(*)>30 --условие включения группы в таблицу

GO --выполнить предыдущий оператор

SELECT * FROM [#Таблица крупных подразделений] -вывод таблицы