Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Access_pdf.pdf
Скачиваний:
29
Добавлен:
13.03.2015
Размер:
592.96 Кб
Скачать

Следующая операция возвратит все строки из таблиц Товары и Хранение, для которых совпадают значения в поле КодТовара.

Товары INNER JOIN Хранение ON Товары.КодТовара = Хранение.КодТовара

Операция LEFT JOIN возвратит все строки из таблицы, полученной в результате предыдущей операции INNER JOIN, объединенные с теми строками из [Продажи], для которых выполняется условие объединения. Тогда в строке товара, который не продавался, в поле «количество проданного товара» будет значение Null, что будет являться условием отбора для искомого списка.

8.3Предложение GROUP BY

Винструкции SELECT задает столбцы, используемые для формирования групп из выбранных строк.

Синтаксис

GROUP BY имя–столбца, …

Оператор GROUP BY разделяет рассматриваемую таблицу на такие группы, что внутри любой из этих групп все строки содержат одинаковые значения в указанном столбце.

Пример

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

SELECT Товары.Наименование, Sum(Продажи.Количество) AS [Sum–Количество]

FROM (Товары INNER JOIN Хранение

ON Товары.КодТовара = Хранение.КодТовара) INNER JOIN Продажи ON Хранение.ID=Продажи.ID GROUP BY Товары.Наименование

8.4 Предложение HAVING

HAVING – специальная форма фразы WHERE. Она относится не к отдельным строкам, а к группам: предикат во фразе HAVING всегда ссылается (посредством специальных библиотечных функций, таких как, например, SET) на свойства групп, а не строк, и на основе этого предиката группы целиком либо выбираются, либо отбрасываются.

Синтаксис

HAVING <условие отбора>

В случае отсутствия предложения GROUP BY условие отбора применяется ко всей логической таблице, определенной инструкцией SELECT.

Пример

Следующий запрос отображает общее количество проданного товара по дням с 10 по 20 декабря 2003г.

37

SELECT Продажи.Дата, Sum(Продажи.Количество)AS [Sum–Ко-

личество]

FROM Продажи

GROUP BY Продажи.Дата

HAVING ((Продажи.Дата) Between #10.12.03# AND #20.12.03#);

8.5 Предложение ORDER BY

Задает порядок расположения строк, возвращаемых инструкцией SELECT

Синтаксис

ORDER BY {имя–столбца | номер–столбца [ASC | DESC]}, …

Оператор ORDER BY определяет сортировку результата выборки в порядке возрастания ASC или убывания DESC значений атрибута. В предложении ORDER BY можно указать несколько столбцов. Список сортируется сначала по значениям столбца, имя которого указано первым.

Пример

Следующий запрос отображает список товаров упорядоченных по цене SELECT Товары.Наименование, Товары.Цена

FROM Товары

ORDER BY Товары.Цена DESC;

8.6 Инструкция SELECT

Выполняет операции выбора и объединения для создания логической таблицы (набора записей) на базе других таблиц или запросов.

Синтаксис

SELECT [ALL | DISTINCT | DISTINCTROW | TOP число [PERCENT]] <список–полей>

Предикаты ALL, DISTINCT, DISTINCTROW, TOP n или TOP n PERCENT уточняют окончательный набор записей запроса.

По умолчанию действует предикат ALL, при котором в набор записей включаются все строки, удовлетворяющие условиям отбора, в том числе дубликаты.

Предикат DISTINCT требует, чтобы запрос возвратил только строки, отличающиеся от всех остальных.

Если инструкция SELECT содержит предикат DISTINCTROW, то в набор записей включаются только те строки, в которых конкатенация первичных ключей из всех таблиц, участвующих в формировании возвращаемых столбцов, является уникальной. В зависимости от того, какие столбцы представлены в наборе записей, иногда можно увидеть повторяющиеся строки, но даже в этом случае каждая строка запроса образована из уникальной (DISTINCT) комбинации строк (ROWS) базовых таблиц.

Чтобы результирующий набор содержал только первые n или первые n процентов записей, используйте предикат TOP n или TOP n PERCENT. Параметр n должен быть целым числом, не превышающим 100, если используется ключевое слово PERCENT.

Пример

38

Следующий запрос отображает список 10 самых дорогих товаров SELECT TOP 10 Товары.Наименование, Товары.Цена FROM Товары

ORDER BY Товары.Цена DESC;

8.7 Подчиненный запрос (вложенная выборка)

SQL позволяет использовать в условии отбора результаты другой выборки. Уровней вложенности может быть несколько.

Пример

Необходимо получить список процессоров, цена которых ниже средней цены процессоров.

SELECT Товары.Наименование, Товары.Цена FROM Товары

WHERE ((Товары.Наименование) Like "проц*") AND ((Товары.- Цена)<(SELECT Avg(Товары.Цена) AS СредняяЦена

FROM Товары

WHERE ((Товары.Наименование) Like "проц*")));

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

Упражнение 5

Откройте БД Продажи.

Указание: запросы сохраняйте под именами: Запрос_номерУпражнения (подчеркивание) НомерПунктаУпражнения, по которому строится запрос (например, Запрос2_1).

1)Создайте запрос для отображения десяти самых дорогих товаров. Укажите наименование товара, цену и гарантийный срок.

2)Создайте запрос для отображения трех самых дорогих мониторов.

3)Создайте запрос для отображения мониторов, цена которых выше средней цены мониторов.

4)Создайте запрос для отображения полного списка товаров, указав наименование товара, номер склада, количество проданного товара. (Список должен содержать все товары таблицы Товары, независимо от того, продавался товар или нет. Тогда в строке товара, который не продавался, в столбце «количество проданного товара» будет значение Null).

SELECT Товары.Наименование, Хранение.НомерСклада, Sum(Продажи.Количество) AS [Sum-Количество]

FROM (Товары INNER JOIN Хранение ON Товары.КодТовара = Хранение.КодТовара) LEFT JOIN Продажи ON Хранение.ID = Продажи.ID

GROUP BY Товары.Наименование, Хранение.НомерСклада;

39

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]