Для выбора информации из базы данных используется оператор SELECT.
1) Вывести информацию о медикаменте, присутствующем в наибольшем количестве рецептур.
Для выполнения задания необходимо использовать запрос SELECT с подзапросом. Подзапрос должен возвращать список количества медикаментов в каждой рецептуре, а основной запрос будет использовать подзапрос в предложении HAVING для отбора только той группы рецептур, в которой количество медикаментов больше или равно всем значений подзапроса.
Обратимся к таблицам: Medikamenty, Receptures. Условие отбора строк - M.ID=R.Name_ID. Отобранные строки сортируем по M.Name_med. В подзапросе группируем по R.Name_ID. Искомые данные находятся в соответствии с условием, указанным в предложении HAVING.
SELECT M.Name_med, count(M.Name_med)
FROM Medikamenty AS M, Receptures AS R
WHERE M.ID=R.Name_ID
GROUP BY M.Name_med
HAVING count(R.Name_ID)>=all(select count(R.Name_ID)
FROM Receptures AS R Group by R.Name_ID);
2) Вывести информацию о рецептуре, использующей наибольшее количество медикаментов.
Для выполнения задания необходимо использовать запрос SELECT с подзапросом. Подзапрос должен возвращать список препаратов, в которых используется наибольшее количество медикаментов, а основной запрос будет использовать подзапрос в предложении HAVING для отбора только тех медикаментов, количество которых больше или равно всем значений подзапроса.
Обратимся к таблицам: Medikamenty, Receptures, Preparat. Условие отбора строк – (M.ID=R.Name_ID and R.Preparat_ID=P.ID). Отобранные строки сортируем по R.Preparat_ID. В подзапросе группируем по
R.Preparat_ID. Искомые данные находятся в соответствии с условием, указанным в предложении HAVING.
SELECT R.Preparat_ID, count(R.Name_ID)
FROM Receptures AS R, Preparat AS P, Medikamenty AS M
WHERE (R.Preparat_ID=P.ID and R.Name_ID=M.ID)
GROUP BY R.Preparat_ID
HAVING count(R.Name_ID)>=all(SELECT count(R.Name_ID)
FROM Receptures R GROUP BY R.Preparat_ID);
3) Вывести список рецептур, в которых используется конкретный медикамент.
Условие отбора строк указано в предложении WHERE. Оператор DISTINCT исключает одинаковые строки.
SELECT DISTINCT R.Preparat_ID
FROM Receptures AS R, Medikamenty AS M, Preparat AS P
WHERE (P.ID=R.Preparat_ID and M.ID=R.Name_ID and
M.Name_med='Метамизол натрия');
ЗАКЛЮЧЕНИЕ
В ходе курсовой работы был проведен анализ предметной области в соответствие с заданием и определены используемые сущности и их основные свойства. После анализа связей между сущностями и определения типа этих связей была разработана схема данных для реляционной базы данных. Разработка схемы включала в себя определение необходимых ключей таблиц и ограничений целостности. Построенная схема данных была реализована при помощи SQL в виде операторов создания таблиц базы данных. Для работы с базой данных - добавления, изменения или удаления информации - приведены типовые SQL-операторы для выполнения необходимых действий. В соответствие с заданием составлены операторы SQL для выполнения запросов на извлечение данных, которые выбирают из базы данных и представляют пользователю указанную в задании информацию.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1 Озкарахан Э. Машины баз данных и управление базами данных. – 1989.
2 Джеймс Р. Грофф, Пол Н. Вайнберью. SQL: полное руководство. – 1998.
3 Диго С.М. Проектирование и использование баз данных. – 1995.