Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
8 семестр / Содержание ПЗ.docx
Скачиваний:
10
Добавлен:
18.02.2023
Размер:
266.33 Кб
Скачать

4 Запись выражений, указанных в варианте задания типов запросов на языке sql

Язык SQL стал фактически стандартным языком доступа к базам данных. Все СУБД, претендующие на название «реляционные», реализуют тот или иной диалект SQL. Многие нереляционные системы также имеют в настоящее время средства доступа к реляционным данным.

Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например, вместо «отношений» используются «таблицы», вместо «кортежей» - «строки», вместо «атрибутов» - «колонки» или «столбцы».

Язык SQL является реляционно полным. Это означает, что любой оператор реляционной алгебры может быть выражен подходящим оператором SQL.

Запишем выражения, указанные в варианте задания типов запросов на языке SQL.

Запрос, возвращающий адрес данного больного, дата последнего посещения поликлиники и диагноз:

SELECT

TOP (1)

patient.address,

visit.date,

visit.diagnosis

FROM visit

INNER JOIN patient

ON visit.patient_id = patient.id

WHERE patient.surname LIKE '%Иванова%'

ORDER BY visit.id DESC

Запрос, возвращающий пациента, который чаще всего посещает врачей, определенной специализации:

SELECT patient.surname,

patient.name,

patient.middlename,

COUNT(visit.patient_id) AS amount

FROM visit

INNER JOIN doctor

ON visit.doctor_id = doctor.id

INNER JOIN patient

ON visit.patient_id = patient.id

WHERE doctor.competence LIKE '%врач-терапевт%'

GROUP BY visit.patient_id,

patient.surname,

patient.name,

patient.middlename

Запрос, возвращающий фамилию, имя и отчество лечащего врача данного больного:

SELECT

doctor.surname,

doctor.name,

doctor.middlename,

visit.sickleave

FROM visit

INNER JOIN patient

ON visit.patient_id = patient.id

INNER JOIN doctor

ON visit.doctor_id = doctor.id

WHERE

patient.surname LIKE '%Печкурова%'

AND visit.sickleave >= GETDATE()

Запрос, возвращающий номер кабинета, дни и часы приема данного врача:

SELECT

timetable.office,

timetable.time

FROM timetable

INNER JOIN doctor

ON timetable.doctor_id = doctor.id

WHERE doctor.surname LIKE '%Есипенок%'

Запрос, возвращающий всех врачей определенной специализации с номером кабинета и временем работы:

SELECT

doctor.surname,

doctor.name,

doctor.middlename,

timetable.time,

timetable.office

FROM doctor

INNER JOIN timetable

ON doctor.id = timetable.doctor_id

WHERE competence LIKE '%терапевт%'

Запрос, возвращающий пациентов, находящихся в данный момент на лечении у данного врача:

SELECT

patient.surname,

patient.name,

patient.middlename,

visit.sickleave

FROM visit

INNER JOIN patient

ON visit.patient_id = patient.id

INNER JOIN doctor

ON visit.doctor_id = doctor.id

WHERE doctor.surname LIKE '%Литвинова%'

AND visit.sickleave > GETDATE()

Запрос, возвращающий последние назначения врача для определенного больного:

SELECT

TOP (1)

doctor.surname,

doctor.competence,

visit.date,

visit.therapy

FROM visit

INNER JOIN patient

ON visit.patient_id = patient.id

INNER JOIN doctor

ON visit.doctor_id = doctor.id

WHERE patient.surname LIKE '%Иванова%'

ORDER BY visit.id DESC

Запрос, возвращающий врача, работающего в данный момент в указанном кабинете:

SELECT

doctor.surname,

doctor.name,

doctor.middlename,

doctor.competence,

timetable.time,

timetable.office

FROM timetable

INNER JOIN doctor

ON timetable.doctor_id = doctor.id

WHERE timetable.office = 601

Запрос, возвращающий количество обращений в поликлинику указанного больного за прошедшие полгода:

SELECT

COUNT(visit.date) AS amount

FROM visit

INNER JOIN patient

ON visit.patient_id = patient.id

WHERE patient.surname LIKE '%Иванова%'

AND visit.date > DATEADD(month, -6, GETDATE())

Запрос, возвращающий количество больных, которое обслужил за прошедший месяц каждый из врачей поликлиники:

SELECT

doctor.surname,

doctor.name,

doctor.middlename,

doctor.competence,

COUNT(visit.id) AS amount

FROM doctor

LEFT JOIN visit

ON visit.doctor_id = doctor.id

WHERE visit.date > DATEADD(month, -1, GETDATE())

GROUP BY

doctor.id,

doctor.surname,

doctor.name,

doctor.middlename,

doctor.competence

Соседние файлы в папке 8 семестр