——————————
Шаг 2. Настройка связей (Схема данных)
Откройте вкладку Работа с базами данных -> Схема данных. Добавьте все три таблицы и соедините их:
1. Перетащите поле ID_Пациента из таблицы Пациенты на поле ID_Пациента в таблице Лечение. Поставьте галочку «Обеспечение целостности данных». Связь: один-ко-многим.
2. Перетащите поле ID_Врача из таблицы Врачи на поле ID_Врача в таблице Лечение. Поставьте галочку «Обеспечение целостности данных». Связь: один-ко-многим.
——————————
Шаг 3. Создание SQL-запросов (Выборки)
Чтобы создать запрос, перейдите в Создание -> Конструктор запросов, закройте окно добавления таблиц, нажмите кнопку SQL в левом верхнем углу и вставьте соответствующий код.
Запрос 1: Случаи, когда заболевание «язва желудка» лечилось невропатологом
SELECT Пациенты.Фамилия, Пациенты.Имя, Врачи.ФИО_Врача, Лечение.Диагноз, Врачи.Специализация
FROM (Пациенты INNER JOIN Лечение ON Пациенты.ID_Пациента = Лечение.ID_Пациента)
INNER JOIN Врачи ON Врачи.ID_Врача = Лечение.ID_Врача
WHERE Лечение.Диагноз = "язва желудка" AND Врачи.Специализация = "невропатолог";
Запрос 2: Имена врачей, которые работают исключительно с пенсионерами
Запрос выбирает врачей, у которых есть пациенты, но при этом среди их пациентов нет никого со статусом, отличным от «пенсионер».
SELECT Врачи.ФИО_Врача
FROM Врачи
WHERE Врачи.ID_Врача IN (SELECT ID_Врача FROM Лечение)
AND Врачи.ID_Врача NOT IN (
SELECT Лечение.ID_Врача
FROM Лечение INNER JOIN Пациенты ON Лечение.ID_Пациента = Пациенты.ID_Пациента
WHERE Пациенты.Социальный_Статус <> "пенсионер"
);
Запрос 3: Процент смертности от заболевания «цирроз печени»
Используется условное суммирование с помощью функции IIf для вычисления процента.
SELECT
(Sum(IIf(Лечение.Текущее_Состояние = "умер", 1, 0)) / Count(*)) * 100 AS [Процент смертности, %]
FROM Лечение
WHERE Лечение.Диагноз = "цирроз печени";
Запрос 4: Пациенты, которые болеют (болели) всеми болезнями
В MS Access нет поддержки конструкции COUNT(DISTINCT), поэтому для выявления пациентов, у которых количество уникальных диагнозов совпадает с общим количеством уникальных диагнозов в клинике, применяется вложенный группирующий запрос:
SELECT Пациенты.Фамилия, Пациенты.Имя
FROM Пациенты
WHERE Пациенты.ID_Пациента IN (
SELECT ID_Пациента
FROM (SELECT DISTINCT ID_Пациента, Диагноз FROM Лечение) AS UniquePatientDiagnoses
GROUP BY ID_Пациента
HAVING Count(Диагноз) = (SELECT Count(*) FROM (SELECT DISTINCT Диагноз FROM Лечение) AS TotalUniqueDiagnoses)
);
-----
0.840044 ₽ · /balance_help