Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
44
Добавлен:
02.05.2014
Размер:
115.2 Кб
Скачать

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 Деталь.КодДет=Состав.КодДет)));

Соседние файлы в папке Материалы к экзамену