Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
bd2014_-_Kopia_5_22_03_1-1.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
436.22 Кб
Скачать
  1. Производителей, которые не выпускают товаров на экспорт.

SELECT F1.Производитель

FROM R1 AS F1

WHERE EXISTS (SELECT * FROM R2 WHERE F1.Фирма=R2.Производитель)

AND EXISTS (SELECT * FROM R3 INNER JOIN R2 ON R1.Шифр изделия=R2.Шифр изделия INNER JOIN R1 F3 ON R3.Заказчик=F3.Фирма WHERE R2.Производитель=F1.Фирма AND F1.Фирма=F3.Страна)

AND NOT EXISTS (SELECT FROM R3 INNER JOIN R2 ON R3.Шифр=R2.Шифр INNER JOIN R1 F5 ON R3.Заказчик=F5.Фирма WHERE R2.Производитель=F2.Фирма AND F1.Страна <> F5.Страна)

  1. Изделия, которые используются как внутри страны, так и идут на экспорт.

SELECT Шифр изделия

FROM R2 INNER R1 F1 ON R2.Производитель=F1.Страна

WHERE EXISTS ( SELECT * FROM R3 INNER JOIN R1 ON R3.Заказчик=R1.Фирма

WHERE R2.Шифр изделия=R3.Шифр изделия AND R1.Страна=F1.Страна

)

EXISTS ( SELECT * FROM R3 INNER JOIN R1 ON R3.Заказчик=R1.Фирма

WHERE R2.Шифр изделия=R3.Шифр изделия AND R1.Страна<>F1.Страна

)

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

SELECT DISTINCT Заказчик

FROM R2 INNER JOIN R3 ON R2.Шифр изделия= R3.Шифр изделия

WHERE Материал = ‘Поликарбонат’

GROUP BY Заказчик

HAVING SUM(Количество) = (SELECT SUM(Количество) AS cnt

FROM R3 INNER JOIN R2 ON R1.Шифр изделия=R2.Шифр изделия

WHERE Материал = ‘Поликарбонат’

GROUP BY Заказчик

ORDER BY cnt DESC

LIMIT 1)

  1. Поставщиков, которые работают только с одним производителем.

SELECT Поставщик

FROM R2 INNER JOIN R3 ON R2.Шифр изделия= R3.Шифр изделия

GROUP BY Поставщик

HAVING COUNT (DISTINCT Производитель) = 1

  1. Фирмы, которые выступают как в роли поставщика, так и в роли заказчика.

SELECT Фирма

FROM R1

WHERE EXISTS (SELECT * FROM R3 WHERE Поставщик=R1.Фирма)

AND NOT EXISTS (SELECT * FROM R3 WHERE Заказчик=R1.Фирма)

11. Даны отношения, моделирующие обмен жилплощади:

R1

ФИО

Старый адрес

Новый адрес

Дата обмена

R2

ФИО

Адрес места работы

Название предприятия

R3

Адрес

Район

Составить запросы, позволяющие выбрать:

  1. Предприятия, все сотрудники которых живут в других районах (не в том, где предприятие).

  2. Людей, которые живут в том районе, где работают.

  3. Людей, которые при переезде сохранили район проживания.

SELECT DISTINCT ФИО

FROM R1 INNER JOIN R3 А1 ON R1.Старый адрес= A1.Адрес INNER JOIN A2 ON R1.Новый адрес= A2.Адрес

WHERE A1.Район=A2.Район

  1. Людей, переезжавших несколько раз в один и тот же район.

SELECT DISTINCT ФИО

FROM R1 INNER JOIN R3 А1 ON R1.Старый адрес= A1.Адрес

GROUP BY ФИО, Район

HAVING COUNT (*) > 1

  1. Предприятия, ни один сотрудник которых ни разу не менял свой адрес проживания.

12. Даны отношения, моделирующие работу туристического агентства, имеющего много филиалов в различных странах:

R1

Филиал

Страна

Город

R2

Клиент

Страна

Номер договора

R3

Номер договора

Филиал

Дата начала

Дата окончания

Составить запросы, позволяющие выбрать:

  1. Страны, в каждом городе которых расположено не более одного филиала.

SELECT DISTINCT Страна

FROM R1

WHERE Страна NOT IN (SELECT DISTINCT Страна FROM R1

GROUP BY Город HAVING COUNT (*) >1)

  1. Филиалы, которые работают с клиентами только одной страны.

SELECT DISTINCT Филиал

FROM R3 INNER JOIN R2 ON R3.Номер договора=R2. Номер договора

GROUP BY Филиал

HAVING COUNT (DISTINCT Страна) = 1

  1. Клиентов, которые заключили несколько договоров с одним филиалом.

SELECT DISTINCT Клиент

FROM R3 INNER JOIN R2 ON R3.Номер договора=R2. Номер договора

GROUP BY Клиент, Филиал

HAVING COUNT(*) > 1

  1. Филиалы, которые заключили договоры только с клиентами из той же страны, в которой расположен этот филиал.

SELECT DISTINCT Филиал

FROM R1

WHERE Филиал NOT IN (SELECT R1.Филиал

FROM R1 INNER JOIN R3 ON R1.Филиал=R3.Филиал INNER JOIN R2 ON R2.Номер договора=R3. Номер договора

WHERE R1.Страна<>R2. Страна)

  1. Филиалы, заключившие наибольшее число договоров с клиентами из России и Украины.

SELECT DISTINCT Филиал

FROM R3 INNER JOIN R2 ON R2. Номер договора=R3. Номер договора

WHERE (Страна=’ Россия’) OR (Страна=’ Украина’)

GROUP BY Филиал

HAVING COUNT (*) = (SELECT COUNT(*) cnt

FROM R3 INNER JOIN R2 ON R2. Номер договора=R3. Номер договора

WHERE (Страна=’ Россия’) OR (Страна=’ Украина’)

GROUP BY Филиал

ORDER BY cnt DESC

LIMIT 1)

13. Даны отношения:

R1 R2

ВУЗ

Город

ФИО

ВУЗ

R3

ВУЗ, где проводится конференция

Название конференции

R4

ФИО

Конференция

Занятое место

Составить запросы, позволяющие выбрать:

  1. ВУЗы, студенты которых принимали участие только в одной (какой-либо) конференции.

SELECT DISTINCT ВУЗ FROM R2 INNER JOIN R4 ON R2.ФИО=R4. ФИО

GROUP BY ВУЗ

HAVING COUNT(DISTINCT Конференция) = 1

  1. ВУЗы, студенты которых занимали призовые места только на конференциях этого же ВУЗа или не занимали вообще.

SELECT DISTINCT ВУЗ

FROM R1

WHERE NOT EXISTS ( SELECT * FROM R2 INNER JOIN R4 ON R2.ФИО=R4. ФИО INNER JOIN R3 ON R4.Конференция=R3.Название конференции

WHERE R1.ВУЗ=R2.ВУЗ AND R2.ВУЗ<>R3.ВУЗ, где проводится конференция AND Занятое место < 4)

  1. ВУЗы, студенты которых заняли призовые места на всех конференциях.

SELECT DISTINCT ВУЗ

FROM R2 INNER JOIN R4 ON R2.ФИО=R4. ФИО

WHERE Занятое место < 4

GROUP BY ВУЗ

HAVING COUNT(DISTINCT Конференция) = (SELECT COUNT(*) FROM R3)

  1. ВУЗы, студенты которых участвовали в конференциях, но не заняли ни одного призового места.

SELECT DISTINCT ВУЗ FROM R1

WHERE EXISTS (SELECT * R2 INNER JOIN R4 ON R2.ФИО=R4. ФИО

WHERE R2.ВУЗ=R1.ВУЗ) AND NOT EXISTS ( SELECT * FROM R2 INNER JOIN R4 ON R2.ФИО=R4. ФИО WHERE R2.ВУЗ=R1.ВУЗ AND Занятое место < 4)

  1. Города, где проводилось наибольшее количество конференций.

SELECT DISTINCT Город

FROM R1 INNER JOIN R3 ON R1.ВУЗ=R3.ВУЗ, где проводится конференция

GROUP BY Город

HAVING COUNT (*) = (SELECT COUNT (*) cnt

FROM R1 INNER JOIN R3 ON R1.ВУЗ=R3.ВУЗ, где проводится конференция

GROUP BY Город

ORDER BY cnt desc LIMIT 1)

14. Даны отношения:

R1

ФИО преподавателя

Кафедра

R2

ФИО преподавателя

Дисциплина

Тип занятия

R3

Дисциплина

Курс

Составить запросы, позволяющие выбрать:

  1. Преподавателей, которые могут вести все дисциплины на 3-м курсе.

SELECT DISTINCT ФИО

FROM R2 INNER JOIN R3 ON R2 Дисциплина.=R3.Дисциплина

WHERE Курс = 3

GROUP BY ФИО

HAVING COUNT (DISTINCT Дисциплина) = (SELECT COUNT(DISTINCT Дисциплина)

FROM R2 INNER JOIN R3 ON R2 Дисциплина.=R3.Дисциплина

WHERE Курс = 3)

  1. Преподавателей, которые могут вести дисциплины только на одном курсе.

SELECT DISTINCT ФИО

FROM R2 INNER JOIN R3 ON R2 Дисциплина.=R3.Дисциплина

GROUP BY ФИО

HAVING COUNT (DISTINCT Курс) = 1

  1. Преподавателей, которые ведут все типы занятий, по всем преподаваемым ими дисциплинам.

SELECT DISTINCT ФИО

FROM R2

WHERE ФИО NOT IN ( SELECT DISTINCT ФИО FROM R2 INNER JOIN R3 ON R2 Дисциплина.=R3.Дисциплина GROUP BY ФИО, Дисциплина HAVING COUNT (DISTINCT Дисциплина) < ( SELECT COUNT(DISTINCT Дисциплина) FROM R2))

  1. Кафедры, преподаватели которых работают только на старших курсах (начиная с 3-го).

SELECT DISTINCT Кафедра

FROM R1

WHERE Кафедра NOT IN (SELECT DISTINCT Кафедра

FROM FROM R2 INNER JOIN R3 ON R2 Дисциплина.=R3.Дисциплина INNER JOIN R1 ON R1.ФИО=R2.ФИО

WHERE Курс < 3)

  1. Кафедры, не ведущие курсового проектирования.

SELECT DISTINCT Кафедра

FROM R1

WHERE NOT EXISTS (SELECT * FROM R1 RS1 INNER JOIN R2 ON R1.ФИО преподавателя=R2. ФИО преподавателя

WHERE RS1.Кафедра=R1.Кафедра AND Дисциплина = ‘Курсовое проектирование’)

15. Даны отношения, моделирующие текущий учебный процесс. Считать, что студент может делать несколько попыток сдачи лаб. работы, т.е. в R4 может стоять незачет по ряду лаб. работ. Если студент не делал ни одной попытки сдачи, то в R4 просто отсутствует соответствующая запись.

R1

ФИО студента

группы

R2

Название дисциплины

Номер лаб. работы

R3

Название дисциплины

группы

R4

ФИО студента

Название дисциплины

Номер лаб. работы

Отметка о зачете по работе

Составить запросы, позволяющие выбрать:

  1. Студентов, которые хотя бы по одной дисциплине сдали более одной лабораторной работы.

SELECT DISTINCT ФИО

FROM R4

WHERE Отметка о зачете по работе = ‘Зачет’

GROUP BY ФИО, Дисциплина

HAVING COUNT (*) > 1

  1. Студентов, которые сдали все лабораторные работы по всем дисциплинам, из тех, по которым это необходимо.

SELECT ФИО FROM 1

WHERE ФИО NOT IN

(

SELECT R1.ФИО FROM R1 INNER JOIN R3 ON R1.Номер группы=R3.Номер группы

INNER JOIN R2 ON R3.Дисциплина=R2.Дисциплина

LEFT OUTER JOIN (

SELECT * FROM R4 WHERE Отметка=’Зачет’) R4 ON R1.ФИО=R4. ФИО AND R2.Номер работы=R4. Номер работы

AND R3.Дисциплина==R4. Дисциплина

WHERE Отметка IS NULL

)

  1. Группы, в которых нет студентов, не сдавших ни одной лабораторной работы.

SELECT DISTINCT Группа

FROM R1

WHERE NOT IN

(

SELECT Группа

FROM R1

WHERE NOT EXISTS

(

SELECT * FROM R4

WHERE R1.ФИО=R4.ФИО AND Отметка="Зачет"

)

)

  1. Дисциплины, по которым имеются задолженности.

SELECT DISTINCT R2.Дисциплина

FROM R1 INNER JOIN R3 ON R1.Номер группы=R3.Номер группы

INNER JOIN R2 ON R3.Дисциплина=R2.Дисциплина

LEFT OUTER JOIN (

SELECT * FROM R4 WHERE Отметка=’Зачет’) R4 ON R1.ФИО=R4. ФИО AND R2.Номер работы=R4. Номер работы

AND R3.Дисциплина==R4. Дисциплина

WHERE Отметка IS NULL

  1. Группы, в которых есть только один хвостист.

SELECT DISTINCT R4.ФИО

FROM R1 INNER JOIN R3 ON R1.Номер группы=R3.Номер группы

INNER JOIN R2 ON R3.Дисциплина=R2.Дисциплина

LEFT OUTER JOIN (

SELECT * FROM R4 WHERE Отметка=’Зачет’) R4 ON R1.ФИО=R4. ФИО AND R2.Номер работы=R4. Номер работы

AND R3.Дисциплина==R4. Дисциплина

WHERE Отметка IS NULL

GROUP BY R1.Группа

HAVING count(DISTINCT R4.ФИО)=1

16. Даны отношения, моделирующие работу конкурса студенческих работ. Необходимо учитывать следующие ограничения: одна работа может быть подготовлена несколькими студентами разных групп и даже разных факультетов. Количество видов работ ограничено, но заранее неизвестно, в R1 приведен пример заполнения таблицы.

R1

Название работы

ФИО автора

Вид работ

Алмаз

Иванов

УИРС

Квант

Сидоров

Статья

Рубин

Петров

Программа

R2

Вид работ

Количество баллов

R3 R4

ФИО студента

группы

группы

Факультет

Составить запросы, позволяющие выбрать:

  1. Работы, подготовленные студентами разных групп одного факультета.

SELECT Название работы

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R4 ON R3.Группа=R4.Группа

GROUP BY Название работы

HAVING count(DISTINCT группа)>1 AND count(DISTINCT Факультет)=1

  1. Факультеты, студенты которых подготовили только УИРС.

SELECT DISTINCT Факультет

FROM R4

WHERE EXISTS (

SELECT * FROM R4 RS4 INNER JOIN R3 ON R4.Группа=R3.Группа

INNER JOIN R1 ON R1.ФИО=R3.ФИО

WHERE RS4.Факультет=R4.Факультет AND Вид Работы="УИРС"

) AND NOT EXISTS (

SELECT * FROM R4 RS4 INNER JOIN R3 ON R4.Группа=R3.Группа

INNER JOIN R1 ON R1.ФИО=R3.ФИО

WHERE RS4.Факультет=R4.Факультет AND Вид Работы<>"УИРС")

  1. Студентов, которые представили более одной статьи (вид работы — «Статья»).

SELECT DISTINCT ФИО

FROM R1

WHERE Вид работы="Статья"

GROUP BY ФИО

HAVING count(*)>1

  1. Студентов, которые подготовили все виды работ.

SELECT DISTINCT ФИО

FROM R1

GROUP BY ФИО (DISTINCT Вид работы)=(SELECT count(DISTINCT Вид работы) FROM R1)

  1. Факультеты, студенты которых не подготовили ни одной работы.

SELECT DISTINCT Факультет

FROM R4

WHERE NOT IN(

SELECT Факультет

FROM R3 LEFT JOIN R1 ON R3.ФИО=R1.ФИО

INNER JOIN R4 ON R3.Группа=R4.Группа

WHERE Название работы IS NULL

)

17. Даны отношения, моделирующие конкурс исследовательских работ студентов. Необходимо учитывать следующие ограничения: Номер группы однозначно определяет выпускающую кафедру. Студенты не обязательно могут готовить работы по своей выпускающей кафедре. В общем случае одна работа может быть подготовлена несколькими студентами и один студент может подготовить несколько работ. Не все студенты готовят исследовательские работы.

R1 R2

Название работы

Вид работы

ФИО студента

Представляющая кафедра

Вид работы

Баллы

R3

ФИО

группы

Курс

R4 R5

группы

Выпускающая кафедра

Кафедра

Факультет

Составить запросы, позволяющие выбрать:

  1. Кафедры, студенты которых подготовили все виды работ.

SELECT DISTINCT Выпускающая кафедра FROM R1

GROUP BY Выпускающая кафедра

HAVING count(DISTINCT Вид работы)=(SELECT count(DISTINCT Вид работы) FROM R1)

  1. Факультеты, на которых не было подготовлено ни одной студенческой работы.

SELECT DISTINCT Факультет FROM R5

WHERE Факультет NOT IN(

SELECT Факультет

FROM R1 INNER JOIN R5 ON R1.Представляющая кафедра=R5.Кафедра)

  1. Студентов, подготовивших работ на максимальное количество баллов.

SELECT DISTINCT ФИО

FROM R1 INNER JOIN R2 ON R1.Вид работы=R2.Вид работы

GROUP BY ФИО

HAVING SUM(Баллы)=(

SELECT SUM(Баллы) as bl

FROM R1 INNER JOIN R2 ON R1.Вид работы=R2.Вид работы

GROUP BY ФИО ORDER BY bl desc LIMIT 1)

  1. Студентов 1-го курса, подготовивших несколько работ на своей выпускающей кафедре.

SELECT R3.ФИО

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R4 ON R3.Группа=R4.Группа

WHERE Курс=1 AND Представляющая кафедра=Выпускающая кафедра

GROUP BY R3.ФИО

HAVING count(*)>1

  1. Кафедры, на которых было подготовлено несколько работ, но только одного типа.

SELECT DISTINCT Представляющая кафедра

FROM R1

GROUP BY Представляющая кафедра

HAVING count(*)>1 AND count(DISTINCT Вид работы)=1

18. Даны отношения, моделирующие получение студентами стипендии. Не все студенты получают стипендию; отсутствие стипендии может быть отмечено 0% или отсутствием записи в R1:

R1

ФИО

Вид стипендии

R2

Сидоров

75%

ФИО

группы

Петров

150%

Иванов

0%

R3

Федоров

100%

группы

Факультет

Васильев

125%

Составить запросы, позволяющие выбрать:

  1. Группы, все студенты которых получают стипендию.

SELECT Группа FROM R3

WHERE Группа NOT IN(

SELECT Группа

FROM R2 LEFT JOIN R1 ON R2.ФИО=R1.ФИО WHERE (Вид стипендии IS NULL) OR (Вид Степендии = "0%"))

  1. Факультеты, на которых есть студенты, не получающие стипендию.

SELECT DISTINCT Факультет

FROM R2 INNER JOIN R3 ON R2.Группа=R3.Группа LEFT JOIN R1 ON R2.ФИО=R1.ФИО

WHERE (Вид стипендии IS NULL) OR (Вид Степендии = "0%"))

  1. Группы, все студенты которых получают только один (любой, не считая 0%) вид стипендии.

SELECT Группа

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО

WHERE Вид Степендии <> "0%"

GROUP BY Группа

HAVING count(*)=1

  1. Факультеты, на которых не учится ни один отличник (стипендия 150%).

SELECT DISTINCT Факультет FROM R3 T3

WHERE NOT EXISTS (

SELECT * FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО INNER JOIN R3 ON R2.Группа=R3.Группа

WHERE T3.Факультет=R3.Факультет AND Вид Степендии = "150%"

  1. Группы, студенты которых получают все виды стипендии (не считая 0%).

SELECT DISTINCT Группа

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО

WHERE NOT EXISTS (

SELECT Группа

FROM R2 Т2 LEFT JOIN R1 Т1 ON Т2.ФИО=Т1.ФИО

WHERE (Вид стипендии IS NULL) OR (Вид Степендии = "0%")) AND Т2.Группа=R2.Группа

)

GROUP BY Группа

HAVING count (SELECT count(DISTINCT Вид Степендии) FROM R1 WHERE Вид стипендии <> "0%")

19. Даны отношения:

R1

День недели

пары

ФИО преподавателя

группы

Аудитория

R2

Аудитория

Корпус

R3

ФИО преподавателя

Должность

Кафедра

R4

ФИО студента

группы

КП

Оц.№1

Оц.№2

Оц.№3

Оц.№4

Оц.№5

Составить запросы, позволяющие выбрать:

  1. Группы, студенты которых ни в один день недели не переезжают в несколько корпусов.

SELECT DISTINCT Группа

FROM R1

WHERE Группа NOT IN (

SELECT Группа

FROM R1 INNER JOIN R2 ON R1.Аудитория=R2.Аудитория

GROUP BY Группа, День недели

HAVING count(DISTINCT Корпус)>1

)

  1. Группы, у которых ведут занятия преподаватели только одной кафедры.

SELECT DISTINCT Группа

FROM R1 INNER JOIN R3 ON R1.ФИО преподавателя=R3.ФИО преподавателя

GROUP BY Группа

HAVING count(DISTINCT Кафедра)=1

  1. Кафедры, ни один профессор которых не ходит к первой паре.

SELECT DISTINCT Кафедра

FROM R3 T3

WHERE Должность="Профессор" AND EXISTS (

SELECT *

FROM R1 INNER JOIN R3 ON R1.ФИО преподавателя=R3.ФИО преподавателя

WHERE T3.ФИО преподавателя=R3.ФИО преподавателя AND пара=1

)

  1. Группы, студенты которых сдали сессию только на отлично и хорошо (включая КП).

SELECT DISTINCT Группа

FROM R4

WHERE Группа NOT IN(

SELECT Группа FROM R4

WHERE (КП NOT IN (4,5)) OR (ОЦ.№1 NOT IN (4,5)) OR (ОЦ.№2 NOT IN (4,5)) OR (ОЦ.№3 NOT IN (4,5)) OR (ОЦ.№4 NOT IN (4,5)) OR (ОЦ.№5 NOT IN (4,5))

)

  1. Группы, в которых не учится ни один отличник (отличник - все пятерки по сессии).

SELECT DISTINCT Группа

FROM R4 T4

WHERE NOT EXISTS (

SELECT * FROM R4 WHERE T4.Группа=R4.Группа AND (КП=5) AND (ОЦ.№1=5) AND (ОЦ.№2=5) AND (ОЦ.№3=5) AND (ОЦ.№4=5) AND (ОЦ.№5=5)

)

20. Даны отношения:

R1

Название журнала

Страна

Издательство

R2

ФИО автора

Название статьи

Область знаний

Название журнала

выпуска

Год издания

Составить запросы, позволяющие выбрать:

  1. Страны, которые издают несколько журналов по одной области знаний.

SELECT DISTINCT Страна

FROM R1 INNER JOIN R2 ON R1.Название журнала=R2.Название журнала

GROUP BY Страна, Область знаний

HAVING count(DISTINCT Название журнала)>1

  1. Журналы, у которых в 2013 году было максимальное количество выпусков.

SELECT DISTINCT Название журнала

FROM R2

WHERE Год издания="2013" AND NOT EXISTS (

SELECT * FROM R2 T2

WHERE T2.№ выпуска>R2.№ выпуска AND Год="2013"

)

  1. Специализированные журналы за 2013 год, т.е. содержащие статьи только по одной области знаний.

SELECT DISTINCT Название журнала

FROM R2

WHERE Год издания="2013"

GROUP BY Название журнала

HAVING count(DISTINCT Область знаний)=1

  1. Издательства, публикующие статьи по всем областям знаний.

SELECT DISTINCT Издательство

FROM R1 INNER JOIN R2 ON R1.Название журнала=R2.Название журнала

GROUP BY Издательство

HAVING count(DISTINCT Область знаний)=(

SELECT count(DISTINCT Область знаний) FROM R2

)

  1. Автор, который публиковал статьи по одной и той же области знаний во всех выпусках журнала «Популярная механика» за 2013 год.

SELECT DISTINCT ФИО

FROM R2

WHERE Название журнала="Популярная механика" AND Год издания="2013"

GROUP BY ФИО автора, Область знаний

HAVING count(DISTINCT № выпуска)=(

SELECT max(№ выпуска) FROM R2 WHERE Название журнала="Популярная механика" AND Год издания="2013"

)

21. Даны отношения:

R1

ФИО преподавателя

Дисциплина

Тип занятия

R2

Дисциплина

Курс

R3

ФИО преподавателя

Кафедра

Составить запросы, позволяющие выбрать:

  1. Преподавателей, которые могут только читать лекции.

SELECT DISTINCT ФИО преподавателя

FROM R1

WHERE NOT EXISTS (

SELECT * FROM R1 T1

WHERE R1.ФИО преподавателя=T1.ФИО преподавателя AND Тип занятия<>"Лекция"

)

  1. Кафедры, преподаватели которых ведут не все типы занятий.

SELECT DISTINCT Кафедра

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО

GROUP BY Кафедра

HAVING count(DISTINCT Тип занятия)=(SELECT count(DISTINCT Тип занятия) FROM R1)

  1. Курсы, на которых ведут занятия преподаватели кафедры 33.

SELECT DISTINCT Курс

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

WHERE Кафедра=33

  1. Кафедры, преподаватели которых работают только на младших курсах (1-ом или 2-ом).

SELECT DISTINCT Курс

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО

WHERE Кафедра NOT IN (

SELECT Кафедра

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

WHERE Курс NOT IN (1,2)

)

  1. Дисциплины, лекции по которым читают преподаватели разных кафедр.

SELECT DISTINCT Кафедра

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

GROUP BY R1.Дисциплина

HAVING count(DISTINCT Кафедра)>1

22. Даны отношения:

R1

Название работы

ФИО студента

Представляющая кафедра

R2

ФИО студента

группы

Курс

R3 R4

группы

Выпускающая кафедра

Кафедра

Факультет

Составить запросы, позволяющие выбрать:

  1. Студентов, представивших работы более чем от одной кафедры.

SELECT DISTINCT ФИО

FROM R1

GROUP BY ФИО

HAVING count(DISTINCT Представляющая кафедра)>1

  1. Кафедры, на которых подготовили работы студенты 3-го курса.

SELECT DISTINCT Представляющая кафедра

FROM R1 INNER JOIN R2 ON R1.ФИО=R2.ФИО

WHERE Курс=3

  1. Группы, все студенты которых подготовили хотя бы одну работу.

SELECT Группа

FROM R3

WHERE Группа NOT IN(

SELECT Группа

FROM R2 LEFT JOIN R1 ON R2.ФИО=R1.ФИО

WHERE Название работы IS NULL

)

  1. Работы, совместно подготовленные студентами различных факультетов.

SELECT DISTINCT Название работы

FROM R1 INNER JOIN R2 ON R1.ФИО=R2.ФИО INNER JOIN R3 ON R2.Группа=R3.Группа

INNER JOIN R4 ON R3.Выпускающая кафедра=R4.Кафедра

GROUP BY Название работы

HAVING count(DISTINCT Факультет)>1

  1. Кафедры, представляющие работы только своих студентов.

SELECT Кафедра

FROM R4

WHERE Кафедра NOT IN (

SELECT Выпускающая кафедра

FROM R1 INNER JOIN R2 ON R1.ФИО=R2.ФИО INNER JOIN R3 ON R2.Группа=R3.Группа INNER JOIN R4 ON R3.Выпускающая кафедра=R4.Кафедра

WHERE Представляющая кафедра <> Выпускающая кафедра

) AND EXISTS (

SELECT * FROM R1 WHERE Выпускающая кафедра = R4.Кафедра)

23. Даны отношения, моделирующие планируемый учебный процесс:

R1

группы

Название дисциплины

Вид занятий

R2

группы

Курс

R3

ФИО преподавателя

Название дисциплины

Вид занятий

Составить запросы, позволяющие выбрать:

  1. Преподавателей, которые могут вести все виды занятий.

SELECT DISTINCT ФИО преподавателя

FROM R3

GROUP BY ФИО преподавателя

HAVING count(DISTINCT Вид занятий)=(SELECT count(DISTINCT Вид занятий) FROM R3)

  1. Дисциплины, по которым различные виды занятий ведет один преподаватель.

SELECT DISTINCT Название дисциплины

FROM R3

GROUP BY ФИО преподавателя, Название дисциплины

HAVING count(DISTINCT Вид занятий)>1

  1. Курсы, на которых нет занятий вида курсовое проектирование.

SELECT DISTINCT Курс

FROM R2

WHERE Курс NOT IN (

SELECT Курс

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

WHERE Вид занятий = "Курсовое проектирование")

  1. Дисциплины, лекции по которым читаются нескольким курсам.

SELECT DISTINCT Название дисциплины

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

WHERE Вид занятий="Лекция"

GROUP BY Название дисциплины

HAVING count(DISTINCT Курс)>1

  1. Преподавателей, которые ведут занятия на всех старших курсах (начиная с 3-го).

SELECT DISTINCT ФИО преподавателя

FROM R1 INNER JOIN R3 ON R1.Название дисциплины=R3.Название дисциплины AND R1.Вид занятий=R3.Вид занятий INNER JOIN R2 ON R1.Группа=R2.Группа

WHERE Курс>=3

GROUP BY ФИО преподавателя

HAVING count(DISTINCT Курс)=(SELECT count(DISTINCT Курс) FROM R2 WHERE Курс>=3)

24. Даны отношения, которые моделирует планируемый учебный процесс:

R1

ФИО преподавателя

Дисциплина

Тип занятия

R2

Дисциплина

Курс

R3

ФИО преподавателя

Кафедра

Составить запросы, позволяющие выбрать:

  1. Преподавателей, которые не могут читать лекции.

SELECT DISTINCT ФИО

FROM R1 T1

WHERE NOT EXISTS (

SELECT *

FROM R1

WHERE R1.ФИО=T1.ФИО AND Тип занятий="Лекция")

  1. Кафедры, преподаватели которых не ведут лабораторных.

SELECT DISTINCT Кафедра

FROM R3 T3

WHERE NOT EXISTS (

SELECT *

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО

WHERE R3.Кафедра=T3.Кафедра AND Тип занятий="Лабораторная работа”)

  1. Курсы, на которых не читают лекции преподаватели кафедры 44.

SELECT DISTINCT Курс FROM R2

WHERE Курс NOT IN(

SELECT Курс

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

WHERE Кафедра=44 AND Вид занятий="Лекция")

  1. Кафедры, преподаватели которых работают только на одном и том же курсе.

SELECT DISTINCT Кафедра FROM R3

WHERE Кафедра NOT IN(

SELECT Кафедра

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

GROUP BY R1.ФИО

HAVING count(DISTINCT Курс)>1)

  1. Типы занятий, которые ведутся всеми преподавателями.

SELECT DISTINCT Тип занятия FROM R3

GROUP BY Тип занятия

HAVING count(DISTINCT ФИО преподавателя)=(SELECT count(DISTINCT ФИО преподавателя FROM R1))

25. Даны отношения, которые моделируют представление студенческих работ на международные конкурсы:

R1

Название работы

ФИО студента

Представляющая кафедра

R2

ФИО студента

группы

Курс

R3 R4

группы

Выпускающая кафедра

Кафедра

Факультет

Составить запросы, позволяющие выбрать:

  1. Студенты, не подготовившие ни одной работы

SELECT ФИО студента

FROM R2 LEFT JOIN R1 ON R2.ФИО=R1.ФИО

WHERE Название работы IS NULL

  1. Кафедры, на которых подготовили работы студенты только младших курсов (1-го или 2-го).

SELECT DISTINCT Выпускающая кафедра

FROM R1

WHERE Выпускающая кафедра NOT IN(

SELECT Кафедра

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО

WHERE Курс NOT IN (1,2)

)

  1. Группы, студенты которых представили работы на нескольких кафедрах

SELECT DISTINCT Группа

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО

GROUP BY ФИО

HAVING count(DISTINCT Представляющая кафедра)>1

  1. Работы, совместно подготовленные несколькими студентами одного факультета.

SELECT Название работы

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО INNER JOIN R3 ON R2.Группа=R3.Группа INNER JOIN R4 ON R3.Выпускающая кафедра = R4.Кафедра

GROUP BY Название работы

HAVING count(*)>1 AND count(DISTINCT Факультет)=1

  1. Факультеты, на которых все работы подготовлены студентами, которые на нем учатся.

SELECT DISTINCT Представляющая кафедра

FROM R1 T1

WHERE NOT EXISTS (

SELECT *

FROM R2 INNER JOIN R1 ON R2.ФИО=R1.ФИО INNER JOIN R3 ON R2.Группа=R3.Группа

WHERE R1.Представляющая кафедра = T1.Представляющая кафедра AND R1.Представляющая кафедра<>R3.Выпускающая кафедра

)

26. Даны отношения, моделирующие научно-исследовательскую работу студентов (НИРС)

R1

ФИО студента

Группа

Кафедра НИРС

R2

Группа

Курс

Специальность

Выпускающая кафедра

R3

Кафедра

Факультет

Составить запросы, позволяющие выбрать:

  1. Кафедры, на которых работают по НИРС студенты только одной специальности.

SELECT DISTINCT Кафедра НИРС

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

GROUP BY Кафедра НИРС

HAVING count(DISTINCT Специальность)=1

  1. Группы, студенты которых работают по НИРС на всех факультетах (необязательно один и тот же студент).

SELECT R2.Группа

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа INNER JOIN R3 ON R1.Кафедра НИРС=R3.Кафедра

GROUP BY R2.Группа

HAVING coun(DISTINCT Факультет)=(SELECT count(DISTINCT Факультет) FROM R3)

  1. Группы, студенты которых работают только на своей выпускающей кафедре.

SELECT DISTINCT Группа

FROM R2 T2

WHERE NOT EXISTS (

SELECT R2.Группа

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

WHERE R2.Группа=T2.Группа AND Кафедра НИРС <> Выпускающая кафедра)

  1. Кафедры, на которых работают по НИРС студенты всех курсов.

SELECT DISTINCT Кафедра НИРС

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

GROUP BY Кафедра НИРС

HAVING count(DISTINCT Курс)=(SELECT count(DISTINCT Курс) FROM R2)

  1. Кафедры, на которых работают по НИРС студенты максимального количества различных специальностей.

SELECT DISTINCT Кафедра НИРС

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

GROUP BY Кафедра НИРС

HAVING count(DISTINCT Специальность)=(

SELECT count(DISTINCT Специальность) as cnt

FROM R1 INNER JOIN R2 ON R1.Группа=R2.Группа

GROUP BY Кафедра НИРС

ORDER BY cnt desc LIMIT 1)

27. Даны отношения:

R1

Название работы

ФИО студента

Представляющая кафедра

R2 R3

группы

Выпускающая кафедра

Кафедра

Факультет

R4

ФИО студента

группы

Курс

Составить запросы, позволяющие выбрать:

  1. Студентов, представивших работы более чем от одной кафедры.

SELECT DISTINCT ФИО FROM R1

GROUP BY ФИО

HAVING count(DISTINCT Представляющая кафедра)>1

  1. Кафедры, на которых подготовили работы студенты 4-го курса.

SELECT DISTINCT Выпускающая кафедра

FROM R1 INNER JOIN R4 ON R1.ФИО=R4.ФИО INNER JOIN R2 ON R4.Группа=R2.Группа

WHERE Курс=4

  1. Кафедры, на которых не было представлено ни одной работы студентами, которые на ней обучаются.

SELECT DISTINCT Представляющая кафедра

FROM R1 T1

WHERE NOT EXISTS (

SELECT *

FROM R1 INNER JOIN R4 ON R1.ФИО=R4.ФИО INNER JOIN R2 ON R4.Группа=R2.Группа

WHERE R2.Выпускающая кафедра=T1.Представляющая кафедра AND R2.Выпускающая кафедра=R1.Представляющая кафедра)

  1. Работы, совместно подготовленные студентами различных факультетов.

SELECT DISTINCT Название работы

FROM R1 INNER JOIN R4 ON R1.ФИО=R4.ФИО INNER JOIN R2 ON R4.Группа=R2.Группа INNER JOIN R3 ON R2.Выпускающая кафедра=R3.Кафедра

GROUP BY Название работы

HAVING count(DISTINCT Факультет)>1

  1. Кафедры, на которых учится максимальное количество студентов.

SELECT DISTINCT Выпускающая кафедра

FROM R4 INNER JOIN R2 ON R4.Группа=R2.Группа

GROUP BY Выпускающая кафедра

HAVING count(*)=(

SELECT count(*) as cnt

FROM R4 INNER JOIN R2 ON R4.Группа=R2.Группа

GROUP BY Выпускающая кафедра

ORDER BY cnt desc LIMIT 1)

28. Даны отношения:

R1

ФИО преподавателя

Дисциплина

Тип занятия

R2

Дисциплина

Курс

R3

ФИО преподавателя

Кафедра

Оклад

Составить запросы, позволяющие выбрать:

  1. Преподавателей, которые читают лекции только на первом курсе.

SELECT DISTINCT ФИО преподавателя

FROM R1 T1

WHERE EXISTS (

SELECT * FROM R1

WHERE R1.ФИО=T1.ФИО AND Тип занятия="Лекция"

) AND EXISTS (

SELECT * FROM R1 INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

WHERE R1.ФИО=Т1.ФИО AND Тип занятия="Лекция" AND Курс NOT IN (1)

)

  1. Кафедры, преподаватели которых ведут лабораторные по нескольким предметам.

SELECT DISTINCT ФИО FROM R1

WHERE Тип занятия="Лабораторная работа"

GROUP BY ФИО

HAVING count(DISTINCT Дисциплина)>1

  1. Курсы, на которых ведут занятия преподаватели трех разных кафедр.

SELECT DISTINCT Курс

FROM R1 INNER JOIN R3 ON R1.ФИО=R3.ФИО INNER JOIN R2 ON R1.Дисциплина=R2.Дисциплина

GROUP BY Курс

HAVING count(DISTINCT Кафедра)=3

  1. Преподавателей 33-й кафедры с минимальным окладом среди преподавателей этой кафедры.

SELECT ФИО

FROM R3 T3

WHERE Кафедра=33 AND NOT EXISTS (

SELECT * FROM R3

WHERE Кафедра=33 AND R3.Оклад<T3.Оклад

)

  1. Кафедры, где у всех преподавателей одинаковые оклады.

SELECT Кафедра

FROM R3

GROUP BY Кафедра

HAVING count(DISTINCT Оклад)=1

29. Даны отношения, моделирующие подачу заявок на международные гранты студентами некоторого ВУЗа:

R1

Название гранта

Страна - учредитель

R2

группы

Факультет

R3

ФИО студента

группы

R4

ФИО студента

Название работы

Название гранта

Составить запросы, позволяющие выбрать:

  1. Студентов, некоторые гранты которых учреждены совместно тремя странами.

SELECT DISTINCT ФИО студента

FROM R1 INNER JOIN R4 ON R1.Название гранта = R4.Название гранта

GROUP BY ФИО студента, Название гранта

HAVING COUNT (DISTINCT Страна – учредитель) = 3

  1. Страны, на гранты которые претендуют студенты 4 факультета.

SELECT DITINCT Страна – учредитель

FROM R2 INNER JOIN R3 ON R2. № группы= R3. № группы INNER JOIN R4 R3. ФИО студента=R4. ФИО студента INNER JOIN R1 ON R1. Название гранта=R4. Название гранта

WHERE Факультет = 4

  1. Факультеты, студенты которых принимают участие во всех грантах.

SELECT DISTINCT Факультет

FROM R2 INNER JOIN R3 ON R2. № группы= R3. № группы INNER JOIN R4 R3. ФИО студента=R4. ФИО студента

GROUP BY Факультет

HAVING COUNT(DISTINCT Название гранта) = (SELECT COUNT(DISTINCT Название гранта) FROM R1)

  1. Работы, представленные несколькими студентами одного факультета.

SELECT DISTINCT Название работы

FROM R2 INNER JOIN R3 ON R2. № группы= R3. № группы INNER JOIN R4 R3. ФИО студента=R4. ФИО студента

GROUP BY Название работы

HAVING COUNT(DISTINCT Факультет) = 1 AND COUNT(DISTINCT ФИО студента) > 1

  1. Факультеты, подававшие заявки на гранты только одной страны.

SELECT DISTINCT Факультет

FROM R2 INNER JOIN R3 ON R2. № группы= R3. № группы INNER JOIN R4 R3. ФИО студента=R4. ФИО студента INNER JOIN R1 ON R1. Название гранта=R4. Название гранта

GROUP BY Факультет

HAVING COUNT(DISTINCT Страна – учредитель) =1

30. Даны отношения, моделирующие работу цехов:

R1 R2

Шифр детали

Цех

Материал

Количество на складе

R3

Шифр детали

Шифр заготовки

Материал

Составить запросы, позволяющие выбрать:

  1. Детали, которые являются сборочными единицами (состоят из нескольких заготовок).

SELECT DISTINCT Шифр детали

FROM R3

GROUP BY Шифр детали

HAVING COUNT(*) > 1

  1. Детали, которые изготавливаются во всех цехах.

SELECT DISTINCT Шифр детали

FROM R1

GROUP BY Шифр детали

HAVING COUNT(DISTINCT Цех) = (SELECT COUNT(DISTINCT Цех) FROM R1)

  1. Цеха, производящие детали только из одного материала.

SELECT DISTINCT Цех

FROM R1 INNER JOIN R3 ON R1.Шифр детали=R3.Шифр детали

GROUP BY Шифр детали

HAVIMG COUNT(DISTINCT Материал) =1

  1. Детали, которые в данный момент можно запускать в производство (т.е. для которых есть на складе материал).

SELECT DISTINCT Шифр детали

FROM R3

WHERE NOT EXISTS (SELECT DISTINCT Шифр детали

FROM R2 INNER JOIN R3 ON R2.Материал=R3.Материал

WHERE Количество на складе = 0)

  1. Материалы, использующиеся во всех цехах.

SELECT DISTIBCT Материал

FROM R1 INNER JOIN R3 ON R1.Шифр детали=R3.Шифр детали

GROUP BY Материал

HAVING COUNT (DISTINCT Цех) = (SELECT COUNT(DISTINCT Цех) FROM R1)

31. Даны отношения:

R1

ФИО оператора

Рабочая станция

Название программного обеспечения

R2

Сервер

Рабочая станция

R3

Название программного обеспечения

Рабочая станция

Составить запросы, позволяющие выбрать:

  1. Операторов, работающих с одинаковым программным обеспечением на нескольких рабочих станциях.

SELECT DISTINCT T1.ФИО оператора

FROM R1 T1 CROSS JOIN R1 T2 ON T1.ФИО оператора=T2.ФИО оператора AND T1.Название программного обеспечения=T2.Название программного обеспечения

  1. Рабочие станций, связанные с тремя серверами.

SELECT DISTINCT Рабочая станция

FROM R2

GROUP BY Рабочая станция

HAVING COUNT(DISTINCT Сервер) = 3

  1. Программное обеспечение, установленное только на одной рабочей станции.

SELECT DISTINCT Название программного обеспечения

FROM R3

GROUP BY Название программного обеспечения

HAVING COUNT(DISTINCT Рабочая станция) = 1

  1. Попарно без повторений и перестановок вывести рабочие станции с одинаковым количеством установленных программ.

SELECT Т1.Рабочая станция, Т2.Рабочая станция, count(DISTINCT Т1.ПО)

FROM R3 Т1, R3 Т2

WHERE Т1.Рабочая станция>Т2.Рабочая станция

GROUP BY Т1.Рабочая станция, Т2.Рабочая станция

HAVING count(DISTINCT Т1.ПО)=count(DISTINCT Т2.ПО)

  1. Операторов, работающих со всем программным обеспечением (указанным в R3).

SELECT DISTINCT ФИО оператора

FROM R1

GROUP BY ФИО оператора

HAVING COUNT(DISTINCT Название программного обеспечения) = (SELECT COUNT(DISTINCT Название программного обеспечения) FROM R3)

32. Даны отношения:

R1

Акция

Номинал

R2

Фондовый магазин

Акция

Цена продажи

Составить запросы, позволяющие выбрать:

  1. Фондовые магазины, продающие не все акции, указанные в R1.

SELECT DISTINCT Фондовый магазин

FROM R2

GROUP BY Фондовый магазин

HAVINGCOUNT (DISTINCT Акция) < (SELECT COUNT(DISTINCT Акция) FROM R1)

  1. Акции с самым высоким номиналом.

SELECT DISTINCT Акция

FROM R1

WHERE Номинал = (SELECT MAX(Номинал) FROM R1)

  1. Акции, которые продаются только одним фондовым магазином.

SELECT DISTINCT Акция

FROM R2

GROUP BY Акция

HAVING COUNT(DISTINCT Фондовый магазин)=1

  1. Акции, которые продаются по ценам как ниже, так и выше номинала.

SELECT DISTINCT Акция

FROM R1 INNER JOIN R2 ON R1. Акция=R2. Акция

WHERE Номинал<>Цена продажи

  1. Фондовые магазины, которые продают уникальные акции, отсутствующие в других магазинах.

SELECT DISTINCT Фондовый магазин

FROM R2

WHERE Акция NOT IN (SELECT DISTINCT T1.Акция

FROM R1 T1 CROSS JOIN R1 T2 ON T1. Фондовый магазин<>T2. Фондовый магазин

AND T1. Акция=T2. Акция)

33. Даны отношения, моделирующие работу проектной организации:

R1

ФИО исполнителя

Название проекта

Номер этапа

Отметка о сдаче этапа

R2

Название проекта

Номер этапа

R3

Название проекта

отдела

R4

ФИО исполнителя

отдела

В R1 содержатся сведения о назначенных исполнителям этапах. После сдачи ставится соответствующая пометка.

Составить запросы, позволяющие выбрать:

  1. Исполнителей, которые хотя бы по одному проекту сдали более одного этапа.

SELECT DISTINCT ФИО исполнителя

FROM R1

WHERE ФИО исполнителя IN (SELECT DISTINCT ФИО исполнителя

FROM R1

GROUP BY ФИО исполнителя, Название проекта

HAVING COUNT (DISTINCT Номер этапа) > 1)

  1. Исполнителей, которые сдали все этапы по всем проектам.

SELECT DISTINCT ФИО исполнителя

FROM R1

WHERE ФИО исполнителя NOT IN (SELECT DISTINCT ФИО исполнителя

FROM R1 WHERE Отметка о сдаче <> ‘Не сдано’

  1. Отделы, в которых имеются исполнители, не сдавшие ни одного этапа какого-либо проекта.

SELECT DISTINCT № отдела

FROM R4

WHERE ФИО исполнителя NOT IN (SELECT DISTINCT ФИО исполнителя

FROM R1

WHERE Отметка о сдачи = ‘Сдано’)

  1. Проекты, по которым имеются исполнители, не сдавшие ни одного этапа.

SELECT DISTINCT Название проекта

FROM R1

WHERE ФИО исполнителя NOT IN (SELECT DISTINCT ФИО исполнителя

FROM R1

WHERE Отметка о сдачи = ‘Сдано’)

  1. Отделы, в которых ведутся несколько проектов.

SELECT DISTINCT № отдела

FROM R3

GROUP BY № отдела

HAVING COUNT (DISTINCT Название проекта) > 1

34. Даны отношения, моделирующие работу поликлиники:

R1

Врач

Дата

Кабинет

R2

Врач

Специальность

R3

Пациент

Номер статталона

Дата

Врач

Составить запросы, позволяющие выбрать:

1 Врачей, которые не переходят из одного кабинета в другой в течение дня.

SELECT DISTINCT Врач

FROM R1

GROUP BY Врач, Дата

HAVING COUNT (DISTINCT Кабинет) = 1

2 Пациентов, которые были у врачей не всех специальностей.

SELSECT DISTINCT Пациент

FROM R2 INNER JOIN R3 ON R2.Врач=R3.Врач

GROUP BY Пациент

HAVING COUNT (DISTINCT Специальность) < (SELECT COUNT (DISTINCT Специальность) FROM R2)

3 Кабинеты, в которых дежурит только один врач, причем он терапевт.

SELECT DISTINCT Кабинет

FROM R1 INNER JOIN R2 ON R1.Врач= R2.Врач

WHERE Специальность = "Терапевт" AND R1. Врач IN (SELECT DISTINCT R1. Врач

FROM R1 INNER JOIN R2 ON R1.Врач= R2.Врач

GROUP BY Кабинет

HAVING COUNT (DISTINCT R1. Врач) =1)

4 Даты, когда посещали только отоларингологов.

SELECT DISTINCT Дата

FROM R2 INNER JOIN R3 ON R2 Врач=R3.Врач

WHERE Специальность = "Отоларинголог" AND Дата IN (SELECT DISTINCT Дата

FROM R2 INNER JOIN R3 ON R2.Врач= R3.Врач

GROUP BY Дата

HAVING COUNT (DISTINCT R2. Врач) =1)

5 Пациентов, которые побывали во всех кабинетах.

SELECT DISTINCT Пациент

FROM R1 INNER JOIN R3 ON R1.Врач=R3.Врач AND R1.Дата= R3.Дата

GROUP BY Пациент

HAVING COUNT (DISTINCT Кабинет) = (SELECT COUNT(DISTINCT Кабинет) FROM R1)

35. Даны отношения, моделирующие информацию о текущей успеваемости студентов

Если студент не сдавал контрольную работу, то его нет в отношении R5.

R1

Название дисциплины

контр. Работы

R2

ФИО студента

группы

R3

группы

Факультет

R4

группы

Название дисциплины

R5

ФИО студента

Название дисциплины

контр. работы

Оценка

Составить запросы, позволяющие выбрать:

  1. Группы, в которых все студенты сдали все из требующихся контрольных работ.

SELECT № группы

FROM R2

WHERE № группы NOT IN ( SELECT R2. № группы

FROM R2 INNER JOIN R4 ON R2. № группы=R4. № группы INNER JOIN R1 ON R1. Название дисциплины=R4.Название дисциплины LEFT OUTER JOIN R5 ON R2. ФИО студента=R5. ФИО студента AND R5. Название дисциплины=R4. Название дисциплины AND R5. № контр. Работы=R1. № контр. Работы

WHERE Оценка IS NULL)

  1. Факультеты, на которых нет студентов, не сдавших ни одной контрольной работы на неудовлетворительную оценку.

SELECT DISTINCT Факультет

FROM R3

WHERE Факультет NOT IN ( SELECT DISTINCT Факультет

FROM R3 INNER JOIN R4 ON R3. № группы=R4. № группы INNER JOIN R5 ON R4.Название дисциплины=R5. Название дисциплины

WHERE Оценка=2)

  1. Студентов, которые получили по всем сданным контрольным оценку не ниже 4.

SELECT DISTINCT ФИО студента

FROM R5

WHERE Оценка> =4

  1. Студентов, которые по одной и той же дисциплине сдали несколько контрольных работ на отлично.

SELECT DISTINCT ФИО студента

WHERE Оценка=5

FROM R5

GROUP BY ФИО студента, Название дисциплины

HAVING COUNT(DISTINCT № контр. Работы) > 1

  1. Дисциплины, по которым нет ни одной контрольной работы.

SELECT DISTINCT Название дисциплины

FROM R4

WHERE Название дисциплины NOT IN (SELECT DISTINCT Название дисциплины FROM R1)

36. Даны отношения, моделирующие работу оптового склада:

R1

Поставщик

Город

R2

поставки

Товар

Количество

Цена за ед.

Дата

Поставщик

Составить запросы, позволяющие выбрать:

  1. Поставщиков, поставившие товаров на наибольшую сумму.

SELECT DISTINCT Поставщик

FROM R2

GROUP BY Поставщик

HAVING SUM(Количество* Цена за ед.) = (SELECT SUM(Количество* Цена за ед.) AS x

FROM R2

GROUP BY Поставщик

ORDER BY x DESC

LIMIT 1)

  1. Товары, которые поставляются только одним поставщиком.

SELECT DISTINCT Товар

FROM R2

GROUP BY Товар

HAVING COUNT(DISTINCT Поставщик) =1

  1. Города, в которых зарегистрированы поставщики, поставляющие ноутбуки Samsung R220X.

SELECT DISTINCT Город

FROM R1 INNER JOIN R2 ON R1. Поставщик=R2. Поставщик

WHERE Товар= ‘Samsung R220X’

  1. Товары, которые поставляются поставщиками, зарегистрированными в разных городах.

SELECT DISTINCT Товар

FROM R1 INNER JOIN R2 ON R1. Поставщик=R2. Поставщик

GROUP BY Товар

HAVING COUNT (Город ) > 1

  1. Товары, которые поставлялись всегда только по одной и той же цене

SELECT DISTINCT Товар

FROM R2

GROUP BY Товар

HAVING COUNT (DISTINCT * Цена за ед.) =1

37. Даны отношения, моделирующие работу проектной организации:

R1

Отдел

Сотрудник

R2

Проект

Номер этапа

Исполнитель

Дата

Составить запросы, позволяющие выбрать:

  1. Проекты, которые выполняются сотрудниками только одного отдела.

SELECT DISTINCT Проект

FROM R1 INNER JOIN R2 ON R1. Сотрудник=R2. Исполнитель

GROUP BY Проект

HAVING COUNT(DISTINCT Отдел) = 1

  1. Проекты, по которым один и тот же этап выполняют сотрудники разных отделов.

SELECT DISTINCT Проект

FROM R1 INNER JOIN R2 ON R1. Сотрудник=R2. Исполнитель

GROUP BY Проект, Номер этапа

HAVING COUNT(DISTINCT Отдел) > 1

  1. Сотрудников, которые участвуют в нескольких этапах, но только одного проекта.

SELECT DISTINCT Исполнитель

FROM R2

GROUP BY Исполнитель

HAVING COUNT(DISTINCT Номер этапа) > 1 AND COUNT(DISTINCT Проект) = 1

  1. Отделы, все сотрудники которых работают только над одним проектом.

SELECT DISTINCT Отдел

FROM R1 INNER JOIN R2 ON R1. Сотрудник=R2. Исполнитель

GROUP BY Отдел

HAVING COUNT(DISTINCT Проект) = 1

  1. Отделы, сотрудники которых работают над всеми проектами. Не обязательно, чтобы каждый сотрудник работал над всеми проектами, но в совокупности отдел участвует во всех проектах.

SELECT DISTINCT Отдел

FROM R1 INNER JOIN R2 ON R1. Сотрудник=R2. Исполнитель

GROUP BY Отдел

HAVING COUNT(DISTINCT Проект) = (SELECT COUNT(DISTINCT Проект) FROM R2)

38. Даны отношения, моделирующие работу Интернет-магазина:

R1

Заказчик

Город

R2

заказа

Товар

Цена

Количество

Дата

Заказчик

Составить запросы, позволяющие выбрать:

  1. Заказчиков, которые заказывали только один товар, но несколько раз.

SELECT DISTINCT Заказчик

FROM R2

GROUP BY Заказчик

HAVING COUNT(DISTINCT Товар)=1 AND COUNT(DISTINCT № заказа) > 1

  1. Товары, которые были заказаны в августе 2009 года (синтаксис записи даты произвольный).

SELECT DISTINCT Товар

FROM R2

WHERE Дата=’ август 2009’

  1. Товары, которые заказывают только заказчики, проживающие в Санкт-Петербурге.

SELECT DISTINCT Товар

FROM R1 INNER JOIN R2 ON R1.Заказчик=R2. Заказчик

GROUP BY Товар

HAVING Город = ‘Санкт-Петербург’

  1. Города, из которых заказываются все товары.

SELECT DISTINCT Город

FROM R1 INNER JOIN R2 ON R1.Заказчик=R2. Заказчик

GROUP BY Город

HAVING COUNT (DISTINCT Товар) = (SELECT COUNT(DISTINCT Товар) FROM R2)

  1. Товары, которых было продано на наибольшую стоимость.

SELECT DISTINCT Товар

FROM R2

GROUP BY Товар

HAVING SUM(Цена* Количество) = (SELECT SUM(Цена* Количество) AS BB FROM R2

GROUP BY Товар

ORDER BY BB DESC

LIMIT 1)

39. Даны отношения, моделирующие работу учреждения дополнительного образования:

R1

Учащийся

Курс

Год обучения

R2

Педагог

Курс

Лет обучения

R3

Педагог

Отдел

Составить запросы, позволяющие выбрать:

1 Курсы, которые ведутся несколькими педагогами, но только одного отдела.

SELECT DISTINCT Курс

FROM R2

WHERE Курс NOT IN (SELECT DISTINCT Курс

FROM R2 INNER JOIN R3 ON R2.Педагог=R3.Педагог

GROUP BY Отдел, Курс

HAVING COUNT (*)=1)

AND Курс IN (SELECT DISTINCT Курс

FROM R2 INNER JOIN R3 ON R2.Педагог=R3.Педагог

GROUP BY Курс

HAVING COUNT (DISTINCT Отдел) =1)

2 Самые длительные курсы.

SELECT DISTINCT Курс FROM R2

WHERE Лет обучения = (SELECT MAX(Лет обучения) FROM R2)

3 Курсы, у которых нет учащихся на последнем году обучения.

SELECT DISTINCT Курс FROM R1

WHERE Курс NOT IN (SELECT DISTINCT R1.Курс FROM R1 INNER JOIN R2 ON R1.Курс=R2. Курс WHERE Лет обучения=Год обучения)

4 Отделы, где есть только двухгодичные курсы.

SELECT DISTINCT Отдел

FROM R2 INNER JOIN R3 ON R2.Педагог=R3.Педагог

WHERE Отдел NOT IN (SELECT DISTINCT Отдел

FROM R2 INNER JOIN R3 ON R2.Педагог=R3.Педагог

WHERE Лет обучения <> 2)

5 Учащихся, которые в один и тот же год записались на несколько курсов.

SELECT DISTINCT T1.Учащийся

FROM R1 T1 CROSS JOIN R1 T2 ON T1. Учащийся=T2. Учащийся AND T1. Курс<>T2. Курс

WHERE T1. Год обучения=T2. Год обучения

40. Даны отношения, моделирующие работу магазинов по продаже автомобилей:

R1

Название модели

Фирма - изготовитель

R2

Фирма

Страна

R3

Магазин

Название модели

Фирма - поставщик

Составить запросы, позволяющие выбрать:

1 Магазины, в которых продаются модели, поставляемые фирмами-поставщиками только одной страны.

SELECT DISTINCT Магазин

FROM R2 INNER JOIN R3 ON R2.Фирма=R3.Фирма-поставщик

GROUP BY Магазин

HAVING COUNT (DISTINCT Страна) = 1

2 Магазины, в которых продаются одинаковые модели, поставляемые различными фирмами.

SELECT DISTINCT Магазин

FROM R3 AS x

WHERE Магазин IN (SELECT DISTINCT Магазин FROM R3 WHERE R3. Название модели=x. Название модели AND R3. Фирма-поставщик<>x. Фирма-поставщик)

3 Магазины, в которых продаются модели, поставляемые всеми фирмами-поставщиками.

SELECT DISTINCT Магазин

FROM R3

GROUP BY Магазин

HAVING COUNT(DISTINCT Фирма поставщик) = (SELECT COUNT(DISTINCT Фирма поставщик) FROM R3)

4 Магазины, в которых продаются все модели из имеющихся в отношении R1.

SELECT DISTINCT Магазин

FROM R3

GROUP BY Магазин

HAVING COUNT(DISTINCT Название модели) = (SELECT COUNT(DISTINCT Название модели) FROM R1)

5 Фирмы, поставляющие только иностранные (для них) модели.

SELECT DISTINCT Фирма - поставщик

FROM R2 F1 INNER JOIN R3 ON F1.Фирма =R3.Фирма - поставщик

WHERE NOT EXISTS

(SELECT * FROM R3 INNER JOIN R1 ON R1. Название модели =R3. Название модели INNER JOIN R2 F2 ON R1.Фирма - изготовитель =F2. Фирма

WHERE F1. Страна =F2. Страна)

41. Даны отношения, моделирующие работу театра:

R1

Название спектакля

Дата спектакля

Название роли

ФИО актера

R2

Название спектакля

Дата спектакля

Время начала

Составить запросы, позволяющие выбрать:

1 Спектакли, в которых одну и ту же роль играют разные актеры.

SELECT DISTINCT Название спектакля

FROM R1

GROUP BY Название спектакля, Название роли

HAVING COUNT(DISTINCT ФИО актера) > 1

2 Актеры, которые играют во всех спектаклях.

SELECT DISTINCT ФИО актера

FROM R1

GROUP BY ФИО актера

HAVING COUNT (DISTINCT Название спектакля) = (SELECT COUNT(DISTINCT Название спектакля) FROM R1)

3 Спектакли, которые начинаются только в утреннее время (< 12 часов).

SELECT DISTINCT Название спектакля

FROM R2

WHERE Название спектакля NOT IN ( SELECT DISTINCT Название спектакля

FROM R1INNER JOIN R2 ON R1.Название спектакля= R2.Название спектакля AND R1.Дата спектакля= R2.Дата спектакля WHERE Время начала >12.00)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]