Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диго С.М. Базы данных проектирование и использование.doc
Скачиваний:
720
Добавлен:
14.05.2016
Размер:
12.04 Mб
Скачать

6.2.17. Запрос на создание таблицы

Запрос на создание таблицы фактически означает запоминание результата запроса в таблице. Чтобы использовать такую возможность, необходимо создать запрос, результат которого следует поместить в новую таблицу. Затем в режиме конструктора запроса нужно выбрать Тип запроса/Создание таблицы (рис. 6.43).

На экране появится диалоговое окно Создание таблицы (рис. 6.44). В поле «Имя таблицы» необходимо ввести имя таблицы, в которую будут переноситься данные.

6.2.18. Специальные запросы

В Access есть возможность с помощью Мастеров формировать специфические запросы: записи без подчиненных, дублирование зна­чений полей, а также рассмотренные выше перекрестные запросы. Использование этих Мастеров позволяет достаточно просто форму­лировать сложные запросы.

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

Для того чтобы воспользоваться возможностью поиска записей, не имеющих подчиненных, можно выбрать Мастер «Записи без под­чиненных» в окне Новый запрос (см. рис. 6.5).

Затем следует выбрать основную таблицу (рис. 6.45) в паре «ос­новная - подчиненная». В нашем случае это таблица «Сотрудник». Основная и подчиненная таблицы должны быть предварительно свя­заны в схеме данных.

Далее выбирается подчиненная таблица. В нашем случае это таб­лица «Дети» (рис. 6.46).

На следующем шаге определяются поля, по которым связаны выб­ранные таблицы (рис. 6.47).

Затем выбираются поля, которые должны войти в ответ (рис. 6.48). Поскольку необходим просто список сотрудников, в ответ выводится только поле «ФИО».

В завершение следует задать имя созданного запроса (рис. 6.49).

Рассматриваемый запрос можно было задать и не пользуясь Мас­тером. Посмотрим, как выглядит созданный нами запрос в режиме Конструктор (рис. 6.50). Создание подобных запросов и в этом ре­жиме не представляет особых трудностей. Но следует обратить вни­мание, что при связи основной и зависимой таблиц обязательно долж­но быть определено так называемое «левое соединение» (т.е. для свя­зи в «параметрах объединения» необходимо выбрать вторую возможность - «объединение всех записей из первой таблицы и толь­ко тех записей из второй таблицы, в которых связанные поля совпа­дают). В противном случае список окажется пустым.

Повторяющиеся записи. Так же как и в случае «поиска записей, не имеющих подчиненных», необходимость в поиске «повторяющихся записей» возникает не только для проверки целостности базы дан­ных, но и для выполнения специфических поисковых запросов.

Название «повторяющиеся записи» не совсем точно отражает суть этого типа запросов. Имеется в виду поиск записей, имеющих одина­ковое значение в заданных полях. Например, при составлении распи­сания требуется проверить, что для преподавателя не назначили не­сколько занятий в одно и то же время.

Для того чтобы осуществить поиск записей, не имеющих, подчи­ненных, можно выбрать Мастер «Записи без подчиненных» в окне Новый запрос (см. рис. 6.5).

На первом шаге создания данного запроса надо выбрать таблицу или запрос, в которых нужно найти записи с повторяющимися значе­ниями (рис. 6.51). Для нашего примера это таблица «Расписание».

На следующем шаге необходимо определить поля, дублирование значений которых будет выявляться. Для этого следует позициониро­ваться на соответствующее поле и щелкнуть по кнопке. Для нашего примера это «Код_ сотрудника», «Дата», «Время» (рис. 6.52).

На следующем шаге (рис. 6.53) нужно выбрать те поля, которые будут также отображаться в ответе наряду с полями, выбранными на предыдущем этапе. Мы выберем оба оставшихся поля

На последнем шаге (рис. 6.54) следует задать имя создаваемого запроса

Вид полученного запроса в режиме Конструктор представлен на рис. 6.55. В строке «Условие отбора» в поле «Код_сотрудника» запи­сано следующее выражение:

In (SELECT [кодсотрудника] FROM [расписание] As Tmp GROUP BY [код_сотрудника],[дата],[время] HAVING Count(*)>l And [дата] = [расписание].[дата] And [время] = [расписание].[время])

Как видим, этот запрос значительно сложнее рассмотренных ра­нее и включает в себя вложенный запрос, написанный на языке SQL (см. главу 7).