Создание запросов в СУБД 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 Первая.Блюдо < Вторая.Блюдо;
Получим результат вида
Первая.Блюдо |
Вторая.Блюдо |
Основа |
Морковь с рисом |
Помидоры с луком |
Овощи |
Морковь с рисом |
Салат летний |
Овощи |
Морковь с рисом |
Салат витаминный |
Овощи |
Помидоры с луком |
Салат витаминный |
Овощи |
Помидоры с луком |
Салат летний |
Овощи |
Салат витаминный |
Салат летний |
Овощи |
Бастурма |
Бефстроганов |
Мясо |
Бастурма |
Мясо с гарниром |
Мясо |
Бефстроганов |
Мясо с гарниром |
Мясо |