Создание запросов в СУБД Access
Рефераты >> Программирование и компьютеры >> Создание запросов в СУБД Access

3.2.6. Соединение таблиц с дополнительным условием

При формировании соединения создается рабочая таблица, к которой применимы все операции, рассмотренные в главе 2: отбор нужных строк соединения (WHERE фраза), упорядочение получаемого результата (ORDER BY фраза) и агрегатирование данных (SQL-функции и GROUP BY фраза).

Например, для получения перечня блюд, предлагаемых в меню на завтрак, можно сформировать запрос на основе композиции (п. 3.2.4): SELECT Вид, Блюдо, Основа, Выход, 'Номер -', БЛFROM Меню, Трапезы, Вид_блюд, БлюдаWHERE Меню.Т = Трапезы.ТAND Меню.В = Вид_блюд.ВAND Меню.БЛ = Блюда.БЛAND Трапеза = ’Завтрак’;

Получим

Вид

Блюдо

Основа

Выход

'Номер -'

БЛ

Закуска

Салат витаминный

Овощи

200.

Номер -

3

Закуска

Мясо с гарниром

Мясо

250.

Номер -

6

Горячее

Омлет с луком

Яйца

200.

Номер -

19

Горячее

Пудинг рисовый

Крупа

160.

Номер -

21

Напиток

Молочный напиток

Молоко

200.

Номер -

31

Напиток

Кофе черный

Кофе

100.

Номер -

32

В п.3.6 можно познакомиться с достаточно полным примером соединения таблиц с различными дополнительными фразами.

3.2.7. Соединение таблицы со своей копией

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

Например, при создании списков студентов (таблица Студенты) возможен повторный ввод данных о каком-либо студенте с присвоением ему второго номера зачетной книжки. Для выявления таких ошибок можно соединить таблицу Студенты с ее временной копией, установив в WHERE фразе равенство значений всех одноименных столбцов этих таблиц кроме столбцов с номером зачетной книжки (для последних надо установить условие неравенства значений).

Временную копию таблицы можно сформировать, указав имя псевдонима за именем таблицы во фразе FROM. Так, с помощью фразы FROM Блюда X, Блюда Y, Блюда Z

будут сформированы три копии таблицы Блюда с именами X, Y и Z.

В качестве примера соединения таблицы с ней самой сформируем запрос на вывод таких пар блюд таблицы Блюда, в которых совпадает основа, а название первого блюда пары меньше (по алфавиту), чем номер второго блюда пары. Для этого можно создать запрос с одной копией таблицы Блюда (Копия): SELECT Блюдо, Копия.Блюдо, ОсноваFROM Блюда, Блюда КопияWHERE Основа = Копия.ОсноваAND Блюдо < Копия.Блюдо;

или двумя ее копиями (Первая и Вторая): SELECT Первая.Блюдо, Вторая.Блюдо, ОсноваFROM Блюда Первая, Блюда ВтораяWHERE Первая.Основа = Вторая.ОсноваAND Первая.Блюдо < Вторая.Блюдо;

Получим результат вида

Первая.Блюдо

Вторая.Блюдо

Основа

Морковь с рисом

Помидоры с луком

Овощи

Морковь с рисом

Салат летний

Овощи

Морковь с рисом

Салат витаминный

Овощи

Помидоры с луком

Салат витаминный

Овощи

Помидоры с луком

Салат летний

Овощи

Салат витаминный

Салат летний

Овощи

Бастурма

Бефстроганов

Мясо

Бастурма

Мясо с гарниром

Мясо

Бефстроганов

Мясо с гарниром

Мясо


Страница: