- •Создание запросов в субд Access
- •6. Выборка данных в конструкторе запросов
- •6.1. Окно конструктора запросов
- •6.2. Построение условий для выбора записей
- •6.3. Упорядочение данных и группировка полей запроса
- •6.4. Общие сведения о команде select
- •6.5. Интерактивные и перекрестные запросы
- •6.6. Запросы на изменение
- •6.6.1. Виды запросов на изменение
- •6.6.2. Запрос на создание таблицы
- •6.6.3. Запрос на обновление
- •6.6.4. Запрос на добавление записей
- •6.6.5. Запрос на удаление записей
- •6.7. Примеры запросов на sql
- •6.8. Контрольные вопросы
- •6.9. Задания для самопроверки
6.6.5. Запрос на удаление записей
Из всех запросов на изменение запрос на удаление наиболее опасен, он удаляет записи раз и навсегда. Подобно другим запросам на изменение, запрос на удаление работает с группами записей на основании отбора записей.
Запрос на удаление может одновременно удалять записи из нескольких таблиц. Однако для удаления связанных записей из нескольких таблиц необходимо выполнить следующие действия:
-
Определить отношения между таблицами в окне Схема данных (Relationships).
-
Установить опцию Обеспечение целостности данных (Enforce Referenrial Integrity) для межтабличной связи.
-
Установить опцию каскадное удаление связных записей (Cascade Delete Related Records) для межтабличной связи.
Для создания запроса на каскадное удаление данных о визитах пациентов, посещавших врачей ранее 1990 года, выполните перечисленные ниже действия:
-
Создайте новый запрос и включите в него только таблицу VisitTab.
-
Выберите запрос на удаление с верхней панели.
-
Добавьте в бланк запроса поле Data из таблицы VisitTab. В строке Удаления (Delete) этого поля отобразится значение Условие (Where).
-
В строке Условия отбора (Criteria) столбца Data введите: <#01.01.1990#.
-
Выберите в таблице VisitTab поле с символом звездочки и перетащите его в бланк запроса. В строке Удаление столбца VisitTab* отобразится значение Из (From).
-
Перейдите в режим таблицы и убедитесь, что присутствуют только необходимые записи.
-
Вернитесь в режим Конструктора.
-
Щелкните на кнопке Запуск (Run) панели инструментов. На экране отобразится диалоговое окно, запрашивающее подтверждение на удаление записей. Щелкните на кнопке Да (Yes) для удаления записей из таблицы.
6.7. Примеры запросов на sql
Для обобщения рассмотренного материала данной главы далее приведены примеры записи операторов SQL, эквивалентных запросам к БД (рис. 29) "Лечебное учреждение".
Запрос 1. Визиты к специалистам больных, не относящихся к группе риска.
Оператор SQL:
SELECT Врачи.SpecDc, Пациенты.FullNamePt, Пациенты.Пол, Пациенты.GroupRiskPt
FROM Пациенты INNER JOIN (Врачи INNER JOIN Визиты ON Врачи.ID_doc = Визиты.ID_doc) ON Пациенты.ID_pat = Визиты.ID_pat
WHERE (((Пациенты.GroupRiskPt)="Нет"));
Рис. 29 . Структура БД "Лечебное учреждение"
Результат выполнения запроса (рис. 30):
Рис. 30. Вывод результата запроса 1 в режиме BROWSE
Запрос 2. Визиты к специалистам пациентов-мужчин с группой риска.
Оператор SQL:
SELECT Врачи.SpecDc, Пациенты.FullNamePt, Пациенты.Пол, Пациенты.GroupRiskPt
FROM Пациенты
INNER JOIN (Врачи INNER JOIN Визиты ON Врачи.ID_doc = Визиты.ID_doc) ON Пациенты.ID_pat = Визиты.ID_pat
WHERE (((Пациенты.Пол)="М") AND ((Пациенты.GroupRiskPt)<>"Нет"));
Результат выполнения запроса (рис. 31):
Рис. 31. Вывод результата запроса 2 в режиме BROWSE
Запрос 3. Посещения специалистов за период с 1.3.2005. по 1.7.2005.
Оператор SQL:
SELECT Врачи.SpecDc, Пациенты.FullNamePt AS Пациент, Пациенты.Пол, Пациенты.GroupRiskPt, Визиты.DataVisit
FROM Пациенты INNER JOIN (Врачи INNER JOIN Визиты ON Врачи.ID_doc = Визиты.ID_doc) ON Пациенты.ID_pat = Визиты.ID_pat
WHERE (((Визиты.DataVisit) Between #3/1/2005# And #7/1/2005#));
Результат выполнения запроса (рис. 32):
Рис. 32. Вывод результата запроса 3 в режиме BROWSE
Запрос 4. Посещения врачей со стажем работы от 15 до 20 лет.
Оператор SQL:
SELECT Врачи.SpecDc, Пациенты.FullNamePt AS Пациент, Врачи.Exper, Визиты.DataVisit
FROM Пациенты INNER JOIN (Врачи INNER JOIN Визиты ON Врачи.ID_doc = Визиты.ID_doc) ON Пациенты.ID_pat = Визиты.ID_pat
WHERE (((Врачи.Exper) Between 15 And 20));
Результат выполнения запроса (33):
Рис. 33. Вывод результата запроса 4 в режиме BROWSE
Запрос 5. Суммарная зарплата врачей - специалистов.
Оператор SQL:
SELECT Врачи.SpecDc, Sum(Врачи.Salary) AS [Sum-Salary]
FROM Пациенты INNER JOIN (Врачи INNER JOIN Визиты ON Врачи.ID_doc = Визиты.ID_doc) ON Пациенты.ID_pat = Визиты.ID_pat
GROUP BY Врачи.SpecDc
Результат выполнения запроса (34):
Рис. 34. Вывод результата запроса 5 в режиме BROWSE
Запрос 6. Врачи терапевты.
Оператор SQL:
SELECT Врачи.FullNameDc, Врачи.SpecDc, Врачи.Exper, Врачи.Salary
FROM Врачи
WHERE (((Врачи.SpecDc)="Терапевт"));
Результат выполнения запроса (35):
Рис. 35. Вывод результата запроса 8 в режиме BROWSE