Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белобжеский_Лекции_по_ББД.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5.5 Mб
Скачать

Внешнее соединение Преподаватель-Изучение-Предмет. Создание в access. Пример

В рамках лаб. работы Учебный Процесс в ACCESS необходимо создать внешний запрос (вернее, внешнее соединение)с перечислением фамилий всех преподавателей (часть из них совсем не ведет занятия в данном семестре), названий предметов, которые они ведут, и видов занятий. Внешнее соединение (в терминологии ACCESS – это «левое объединение») из 3 таблиц приходится делать в 2 этапа. Сначала делается промежуточный внешний запрос Преподаватель –Изучение, приведенный ниже (это левое соединение) :

SELECT ПРЕПОДАВАТЕЛЬ611.ТАБН611, ПРЕПОДАВАТЕЛЬ611.ФИО611, ИЗУЧЕНИЕ611.КП611, ИЗУЧЕНИЕ611.ВИДЗ611

FROM ПРЕПОДАВАТЕЛЬ611 LEFT JOIN ИЗУЧЕНИЕ611 ON ПРЕПОДАВАТЕЛЬ611.ТАБН611 = ИЗУЧЕНИЕ611.ТАБН611;

Затем делается окончательное внешнее соединение Преподаватель-Изучение-Предмет, где берутся все записи из предыдущего запроса (LEFT JOIN):

SELECT [Внешний запрос Промежут_ Препод-Изучение].ТАБН611, [Внешний запрос Промежут_ Препод-Изучение].ФИО611, [Внешний запрос Промежут_ Препод-Изучение].КП611, ПРЕДМЕТ611.НП611, [Внешний запрос Промежут_ Препод-Изучение].ВИДЗ611

FROM [Внешний запрос Промежут_ Препод-Изучение] LEFT JOIN ПРЕДМЕТ611 ON [Внешний запрос Промежут_ Препод-Изучение].КП611 = ПРЕДМЕТ611.КП611;

Операторы exists и not exists

Обработка данных часто состоит из нескольких этапов. Так, снача­ла производится некоторая выборка данных, а затем выполняются какие-то манипуляции с ней. Однако, выполняя запрос на выборку, мы далеко не всегда можем быть уверенными, что ответ содержит хотя бы одну непустую строку. Если ответ на запрос пуст, то бессмысленно производить дальнейшую обработку данных. Таким образом, полезно знать, содержит ли ответ на запрос какие-либо данные. Для этого предназначен предикат exists (существует). Он становится истинным только тогда, кода результатная таблица, полученная в ответ на запрос, содержит хотя бы одну запись. Пример запроса с предикатом exists будет рассмотрен ниже.

Как известно, запрос возвращает одну или несколько записей либо не возвращает ничего. Рассмотрим пример, в котором требуется проверка существования записей. Так, иногда требуется выборка записей из одной таблицы при условии, что в другой таблице существует хотя бы одна соответствующая запись.

Пусть в базе данных имеются:

- таблица продажи, содержащая данные о продажах товаров некоторой фирмы, в том числе столбец ID_клиента (идентификатор клиента);

- таблица контакты, содержащая данные о покупателях (ID__клиента, Имя, Адрес, Телефон), но не содержащая сведений об их покупках.

Требуется получить сведения о клиентах, сделавших хотя бы одну покупку. Далее приведен запрос, выполняющий данное задание:

SELECT Имя, Адрес, Телефон FROM Контакты

WHERE EXISTS

( SELECT DISTINCT ID_клиента FROM Продажи

WHERE Продажи.ID_клиента = Контакты.ID_клиента );

Здесь предикат exists (существует) принимает значение true, если подзапрос возвращает хотя бы одну запись, и тогда внеш­ний запрос возвращает имя клиента и его данные для контакта. Поскольку в запросе требуется проверка существования записей, возвращаемых подзапросом, а не сами записи, то приведенное SQL-выражение можно несколько упростить:

SELECT Имя, Адрес, Телефон FROM Контакты WHERE EXISTS

( SELECT DISTINCT 1 FROM Продажи

WHERE Продажи.ID__клиента = Контакта.ID клиента ) ;

Здесь, чтобы выполнить подзапрос, содержимое результата которого для нас не важно, вместо имени столбца вставлена просто цифра 1. Разумеется, в данном случае можно было бы использо­вать и любое другое число. Это своего рода "фокус-покус".