5. Построить sql-запрос для выборки сведений из бд, содержащей таблицы:
Пациент (КодПац, ФИОПац, Категория, ДатаРожд)
Врач (КодВрача, ФИОВрача, Спец, Стаж)
Прием (КодПац, КодВрача, ДатаВремя, Кабинет)
Извлечь статистику посещений: категория пациентов, количество приемов пациентов этой категории, количество врачей принявших пациентов этой категории. Не учитывать пациентов, родившихся до 1 января 1913 года и врачей со стажем менее 1 года. Упорядочить по категориям.
РЕШЕНИЕ:
SELECT Пациент.Категория,
COUNT (DISTINCT Прием.КодПац) as ‘КолПац’
COUNT (DISTINCT Прием.КодВрача) as ‘КолВрача’
FROM Пациент, Врач, Прием
WHERE (Пациент.КодПац=Прием.КодПац)
and (Врач.КодВрача=Прием.КодВрача)
and Пациент.КодПац not in
(SELECT КодПац
FROM Пациент
WHERE ДатаРожд<01.01.1913)
and Врач.КодВрача not in
(SELECT КодВрача
FROM Врач
WHERE Стаж<1)
GROUP BY Пациент.Категория
ORDER BY Пациент.Категория
Билет 24
5. Пациент (КодПациента, ФИОПац, Категория, ДатаРождения)
Врач (КодВр, ФИОВр, Спец, Стаж)
Прием (КодПац, КодВр, ДатаВремя, Кабинет)
Извлечь сведения о врачах той же спец., что и врач с кодом ‘123’, но принявших в текущем году больше пациентов: код, ФИО, число принятых пациентов.
РЕШЕНИЕ:
SELECT Врач.КодВр,Врач.ФИОВр, COUNT (Прием.КодПац)
FROM Врач, Прием
WHERE Врач.КодВр=Прием.КодВр
and Прием.ДатаВремя=’2005’
and Врач.Спец=(SELECT Спец
FROM Врач
WHERE КодСпец=’123’)
GROUP BY Прием.КодВр
HAVING COUNT (Прием.КодПац)>(SELECT COUNT (КодПац)
FROM Прием
WHERE КодВр=’123’)
Билет 25.
5. Пациент (КодПац, ФИОПац, Катег, Дата???, )
Врач (КодВр, ФИОВр, Спец, Стаж)
Прием (КодПац, КодВр, Дата/Время, Каб)
Извлечь коды и Фио Вр, принявшие в точности тех пациентов, которых принял врач-терапевт Иванов. Отсортировать в алфавитном порядке ФИО.
РЕШЕНИЕ:
SELECT ???Distinct КодВр, ФИОВр
From Врач
WHERE NOT EXISTS (SELECT*
FROM Прием
WHERE Прием.КодВр=ВР.КодВр
AND КодПац NOT IN (SELECT КодПац
FROM Прием
WHERE КодВр IN
(SELECT КодВр
FROM Врач
WHERE ФИО= «Иванов»
AND Спец= «Терапевт»))
AND (ФИОВр<> «Иванов» And Спец <> «Терапевт»)
AND КодВр IN (SELECT КодВр
FROM Прием
WHERE EXISTS (SELECT* FROM Пац
WHERE КодПац IN (SELECT КодПац
FROM Прием
WHERE КодВр IN (SELECT КодВр
FROM Врач
WHERE ФИО= «Иванов»
Спец = «терапевт»
??????????????????ОТСОРТИРОВАТЬ???
Билет 26
5. Пациент (КодПац, ФИОПац, Катег, ДатаРожд)-справ. пац.
Врач (КодВр, ФИОВр, Спец, Стаж)-спр.вр.
Прием (КодПац, КодВр, ДатаВр, Каб)
Извлечь коды и ФИО пац, посетившего с начала этого года по крайней мере ??? каких посетил пац. ‘Иванов’. Отсорт. Рез. В обратном порядке.
РЕШЕНИЕ:
SELECT Пац. КодПац, Пац.ФИОПац
FROM Пацинет INNER JOIN Прием
ON Пац.КодПац=Прием.КодПац
WHERE Прием.ДатаВр=2005
and NOT EXISTS
(SELECT *
FROM Прием
WHERE КодПац IN (
SELECT КодПац
FROM Пац
WHERE ФИО=’Иванов’)
and КодВр not in (
SELECT КодВр
FROM Прием
WHERE Пац.КодПац=Прием.КодПац))
ORDER BY Пациент.КодПац desk.
Билет 27
5. SQL-запрос
Пациент (КодПац, ФИОПац, Категория, ДатаРожд)
Врач (КодВрача, ФИОВрача, Спец, Стаж)
Приём (КодПац, КодВрача, ДатаВремя, Район)
Извлечь коды и ФИО пациентов, не посетивших в текущем году ни одного врача из тех, которых посетил пациент Иванов С.П.. Отсортировать результат в обратном направлении по коду.
РЕШЕНИЕ:
SELECT КодПац, ФИОПац
FROM Пациент
WHERE not exists (
SELECT *
FROM Прием, Врач
WHERE (Прием. КодВр=Врач.КодВр)
AND (Прием.ДатаВремя=2005)
AND КодПац in (
SELECT КодПац
FROM Пациет
WHERE ФИОПац=’Иванов С.П.’) )
ORDER BY КодПац desc;
Билет 30
5. Изделие (КодИзд, НазвИзд, Вид, Стоим)
Деталь (КодДет, НазвДет, Вес, Цена)
Состав (КодДет, КодИзд, Кол-во)
Извлечь коды и назв изд., для кот. Либо вовсе не указ. Детали, либо указана единств. Дет. Ценой меньше 1 руб в кол-ве меньше 10. Рез. упор. по назв.
РЕШЕНИЕ:
SELECT КодИзд, НазвИзд
FROM Изделие
WHERE КодИзд not in (SELECT КодИзд
FROM Состав)
or КодИзд in
(SELECT КодИзд
FROM Состав
WHERE КодДет in
(SELECT КодДет
FROM Деталь
WHERE Цена<1
and КодДет in
(SELECT КодДет
FROM Состав
WHERE Кол-во<10))
GROUP BY КодИзд
HAVING COUNT (КодДет)=1)
ORDER BY НазвИзд;
Билет 31
5. Изделие (КодИзд, НазвИзд, Вид, Стоимость) - справочник изделия
Деталь (КодДетали, НазвДет, Вес, Цена) – справочник детали
Состав (КодИзд, КодДет, Количество)
Извлечь сведения о деталях, среднее количество которых в изделии превышает 200: код, название, кол-во изд-й, использующих деталь, и суммарное количество дет. Во всех использующих её изделияхю Учитывать изделия стоим. Выше 100 руб. Упорядочить по названию.
РЕШЕНИЕ:
SELECT Изделие.КодИзд, Изделие.НазвИзд,
COUNT (Состав.КодИзд)
SUM (Состав.Количество)
FROM Изделие INNER JOIN Состав
ON (Изделие.КодИзд=Состав.КодИзд)
WHERE Состав.КодДет in
(SELECT КодДет
FROM Состав
GROUP BY КодДет
HAVING AVG (Количество)>200)
GROUP BY Состав.КодДет
ORDER BY Изделие.НазвИзд
Билет 32
5. Изделие ( КодИзд, НазвИзд, Вид, Стоимость)
Деталь (КодДет, НазвДет, Вес, Цена)
Состав (КодИзд, КодДет, Количество)
Извлечь статистику видов изделий: вид, число изделий данного вида, количество различных деталей в них, суммарное количество используемых в них деталей. Не учитывать изделия дешевле 100 рублей и детали дешевле 10 рублей. Упорядочить по видам.
РЕШЕНИЕ:
SELECT Изделие.Вид,
COUNT (*),
COUNT (DISTINCT Состав.КодДет),
SUM (Состав.Количество)
FROM Изделие INNER JOIN Состав
ON Изделие.КодИзд=Состав.КодИзд
WHERE Изделие.КодИзд not in (SELECT КодИзд
FROM Изделие
WHERE Стоимость<100)
And Состав.КодДет not in (SELECT КодДет
FROM Деталь
WHERE Цена<10)
GROUP BY Изделие.Вид
ORDER BY Изделие.Вид
Билет 35
5. Изделие (КодИзд, НазвИзд, Вид, Стоимость)
Деталь (КодДет, Вес, НазвДет, Цена)
Состав (КодИзд, КодДет, Количество)
Извлечь коды и названия деталей, которые используются в количестве более 20 штук, по крайней мере во всех тех изделиях, в которых используется деталь «Шайба».
РЕШЕНИЕ:
SELECT КодДет, НазвДет
FROM Деталь
WHERE КодДет in
(SELECT КодДет
FROM Состав
WHERE Количество>20
And
NOT EXISTS (
SELECT *
FROM Состав
WHERE КодДет in(
SELECT КодДет
FROM Деталь
WHERE НазвДет=”шайба”)
And КодИзд not in (
SELECT КодИзд
FROM Состав
WHERE Деталь.КодДет=Состав.КодДет)));