
- •Диски, на которых расположено больше всего файлов.
- •Программы, которые работают только с одним файлом, причем он расположен на другом диске.
- •Производителей, которые не выпускают товаров на экспорт.
- •12. Даны отношения, моделирующие работу туристического агентства, имеющего много филиалов в различных странах:
- •4 Актеры, которые участвуют в нескольких спектаклях в течение одного дня.
- •5 Актеры, у которых все спектакли проходят после полудня.
- •42. Даны отношения, моделирующие учебный процесс в школе:
1. Даны отношения, моделирующие работу банка и его филиалов:
R1
ФИО клиента |
N филиала |
N счета |
Остаток |
|
|
|
|
R2
N филиала |
Район |
|
|
Составить запросы , позволяющие выбрать:
Филиалы, клиенты которых не имеют счетов в других филиалах, расположенных в том же районе.
SELECT DISTINCT N филиала
FROM R1 INNER JOIN R2 ON R1.Филиал=R2.Филиал
WHERE NOT EXISTS (SELECT * FROM R1 x INNER JOIN R2 y ON x.Филиал=y.Филиал
WHERE R1.ФИО=x.ФИО AND R1.Филиал<>x.Филиал AND R2.Район=y.Район)
Клиентов, которые имеют счета во всех филиалах данного банка.
SELECT ФИО FROM R1 GROUP BY ФИО HAVING count(DISTINCT N Филиала)= (SELECT count(*) FROM R2)
Клиентов, которые ни в одном филиале не имеют более одного счета.
SELECT DISTINCT ФИО FROM R1 WHERE ФИО NOT IN ( SELECT DISTINCT ФИО FROM R1 GROUP BY ФИО, N Филиала HAVING COUNT(*)>1)
Клиенты, которые имеют счета в нескольких филиалах банка, расположенных только в одном районе.
SELECT ФИО FROM R1,R2 WHERE R1.Филиал = R2.Филиал GROUP BY ФИО HAVING count(DISTINCT Район)=1 AND count(DISTINCT R1.Филиал)>1
Клиентов, которые имеют в каком-либо филиале счет на максимальную сумму в этом филиале.
SELECT DISTINCT ФИО FROM R1 WHERE NOT EXISTS (SELECT ФИО FROM R1 x WHERE R1.ФИО=x.ФИО AND R1.N Филиал=x.N Филиал AND x. Остаток >R1.Остаток)
2. Даны отношения, моделирующие работу туристического агентства, имеющего много филиалов в различных странах:
R1
Филиал |
Страна |
Город |
|
|
|
R2
Номер договора |
Филиал |
Дата начала |
Дата окончания |
|
|
|
|
R3
Клиент |
Страна |
Номер договора |
|
|
|
Составить запросы, позволяющие выбрать:
Клиентов, заключивших договоры с несколькими филиалами, расположенными в той же стране.
SELECT Клиент FROM R1,R2,R3 WHERE R1.Филиал = R2.Филиал AND R2.Договор = R2.Договор GROUP BY Клиент, R1.Страна HAVING count(DISTINCT R2.Филиал)>1
Филиалы, которые работают с клиентами только той страны, в которой расположен филиал.
SELECT DISTINCT R2.Филиала
FROM R2 WHERE R2.Филиала NOT IN
(SELECT R2.Филиал FROM R2 INNER JOIN R1 ON R2.Филиал=R1.Филиал INNER JOIN R3 ON R2.Номер договора = R3.Номер договора WHERE R1.Страна<>R3.Страна)
Филиалы, в которые никто не пожелал обратиться повторно.
SELECT Филиал FROM R3, R2 WHERE R3.Договор = R2.Договор
GROUP BY Филиал
HAVING count(DISTINCT Клиент)=count(Клиент)
Города, в которых расположено не более трех филиалов.
SELECT Город FROM R1 GROUP BY Город HAVING count(Филиал)<=3
Страны, филиалы в которых заключили наибольшее количество договоров
SELECT DISTINCT Страна FROM R2
GROUP BY Филиал
HAVING COUNT(*)=(SELECT COUNT(*) cnt FROM R2 GROUP BY Филиал ORDER BY cnt desc LIMIT 1)
3. Даны отношения, моделирующие работу фирмы, имеющей несколько филиалов:
R1
Филиал |
Страна |
|
|
R2
Филиал |
Заказчик |
N заказа |
|
|
|
R3
N заказа |
Товар |
Количество |
|
|
|
|
Составить запросы , позволяющие выбрать:
Заказчиков, которые работают со всеми филиалами фирмы, но покупают только один товар.
SELECT Заказчик FROM R2, R3 WHERE R2.Заказ=R3.Заказ GROUP BY Заказчик
HAVING count(DISTINCT Филиал)=(SELECT count(*) FROM R1) AND count(DISTINCT Товар)=1
Филиалы фирмы, которые торгуют всеми товарами.
SELECT Филиал FROM R3, R2 WHERE R3.Заказ=R2.Заказ GROUP BY Филиал
HAVING count(DISTINCT Товар) = (SELECT count(DISTINCT Товар) FROM R3)
Заказчиков, которые заказывали один и тот же товар несколько раз.
SELECT DISTINCT Заказчик FROM R3 INNER JOIN R2 ON R3.N Заказа = R2.N Заказа GROUP BY Заказчик. Товар HAVING count(*)>1
Заказчики, которые работают с филиалами фирмы, которые расположены только в одной стране.
SELECT Заказчик FROM R1, R3, R2 WHERE R2.Заказ=R3.Заказ AND R1.Филиал=R2.Филиал
GROUP BY Заказчик
HAVING count(DISTINCT Страна) = 1
Товар, который покупают не во всех странах, где фирма имеет филиалы
SELECT DISTINCT Товар
FROM R3 INNER JOIN R2 ON R3.N Заказа=R2.N Заказа INNER JOIN R1 ON R2.Филиал = R1.Филиал
GROUP BY Товар
HAVING count(DISTINCT Страна) < (SELECT count(DISTINCT Страна) FROM R1)
4. Даны отношения, моделирующие работу фирмы, занимающейся разработкой программных систем:
R1
Название файла |
Размер файла |
Название диска |
|
|
|
R2
Название программы |
Название файла |
|
|
R3
Название программы |
Название диска |
|
|
Составить запросы , позволяющие выбрать:
Диски, на которых расположено больше всего файлов.
SELECT Диск FROM R1 GROUP BY Диск HAVING count(*)=(Select count(*) x FROM R1 GROUP BY Диск ORDER BY x DESC LIMIT 1)
Программы, которые работают только с одним файлом, причем он расположен на другом диске.
SELECT Название Программы
FROM R2 INNER JOIN R1 ON R2.Название Файла=R1.Название Файла
WHERE NOT EXISTS (SELECT * FROM R2 F2 INNER JOIN R1 F1 ON F2.Название Файла=F1.Название Файла
INNER JOIN R3 F3 ON F2.Название Программы = F3.Название Программы
WHERE F1.Название диска=F3.Название диска AND R2.Название Программы = F2.Название Программы)
GROUP BY R2.Название Программы
HAVING count(*)=1
Для каждого диска найти самые большие файлы.
SELECT Название диска,Название файла, Размер файла FROM R1
WHERE NOT EXISTS (SELECT * FROM R1 x WHERE R1.Название диска=x.Название диска AND x.Размер файла>R1.Размер файла)
Файлы, с которыми работают все программы.
SELECT Файл FROM R2 GROUP BY Файл HAVING count(Программа)=(SELECT count(DISTINCT Программа) FROM R2)
Программы, которые работают только с файлами, расположенными на том же диске, что и сама программа.
SELECT DISTINCT Название Программы
FROM R2 AS x
WHERE NOT EXISTS (SELECT * FROM R2 INNER JOIN R1 ON R2.Название файла=R1.Название файла
INNER JOIN R3 ON R2.Название Программы=R3.Название программы)
WHERE x.Название программы=R2.Название программы AND R1.Название диска<>R3.Название диска)
5. Даны отношения, моделирующие работу программных продуктов в фирме:
R1
Имя БД |
Имя сервера БД |
|
|
R2
Название приложения |
Имя БД |
|
|
R3
Имя пользователя |
Название приложения |
Операционная система |
|
|
|
Составить запросы, позволяющие выбрать:
Пользователей, которые работают с несколькими приложениями, но в одной операционной системе.
SELECT DISTINCT Имя пользователя
FROM R3
GROUP BY Имя пользователя
HAVING count(DISTINCT Название приложения)>1 AND count(Операционная система)=1
Серверы БД, которые работают только с одной БД.
SELECT СерверБД FROM R1 GROUP BY СерверБД HAVING count(DISTINCT ИмяБД)=1
Приложения, которые работают со всеми серверами БД.
SELECT DISTINCT Название Приложения
FROM R2 INNER JOIN R1 ON R2.Имя БД=R1.Имя БД
GROUP BY Название Приложения
HAVING count(DISTINCT Имя Сервера БД)=(SELECT count(DISTINCT Имя сервера БД) FROM R1)
Пользователи, которые работают только с одним сервером БД.
Блокнот
SELECT DISTINCT Пользователи
FROM R1 INNER JOIN R2 ON R1.Имя БД=R2.Имя БД INNER JOIN R3 ON R2.Название Приложения=R3.Название приложения
GROUP BY Пользователи
HAVING COUNT (DISTINCT Имя сервера БД) =1
Сервера БД, с которыми работает максимальное количество пользователей.
Блокнот
SELECT DESTINCT Имя сервера БД
FROM R1 INNER JOIN R2 ON R1.Имя БД=R2.Имя БД INNER JOIN R3 ON R2.Название Приложения=R3.Название приложения
GROUP BY Имя сервера БД
HAVING COUNT(*) = ( SELECT COUNT (*) AS cnt FROM R1,R2,R3
GROUP BY Имя сервера БД
ORDER BY cnt desc LIMIT 1)
6. Даны отношения, моделирующие работу программного обеспечения в некоторой организации:
R1
Название программного обеспечения |
Рабочая станция |
|
|
R2
Сервер |
Рабочая станция |
|
|
R3
ФИО оператора |
Рабочая станция |
Название программного обеспечения |
|
|
|
Составить запросы, позволяющие выбрать:
Операторов, работающих с одинаковым программным обеспечением на нескольких рабочих станциях.
SELECT DISTINCT ФИО оператора
FRON R3
GROUP BY ФИО оператора, Название ПО
HAVING COUNT (DISTINCT Рабочая станция) >1
Операторов, которые используют всё программное обеспечение на какой-либо из станций, за которой работают.
SELECT DISTINCT ФИО
FROM R3
WHERE ФИО NOT IN (
SELECT ФИО FROM R3
WHERE NOT EXISTS (
SELECT * FROM R1
WHERE R1.Рабочая станция=R3.Рабочая станция
AND R1.Программное обеспечение=R3.Программное обеспечение
)
)
Программное обеспечение, установленное только на одной рабочей станции.
SELECT Название ПО
FROM R1
GROUP BY Название ПО
HAVING COUNT (*) =1
Серверы, связанные не со всеми рабочими станциями.
SELECT Сервер
FROM R2
GROUP BY Сервер
HAVING COUNT(*) < (SELECT COUNT(DISTINCT Рабочая станция) FROM R3)
Операторов, работающих со всем программным обеспечением (указанным в R1).
SELECT DISTINCT ФИО оператора
FROM R3
GROUP BY ФИО оператора
HAVING COUNT(DISTINCT Название ПО) = (SELECT COUNT(DISTINCT Название ПО) FROM R1)
7. Даны отношения:
R1
Благотворительный фонд |
Город |
|
|
R2
Организация |
Благотворительный фонд |
Размер отчислений |
|
|
|
R3
Организация |
Город |
|
|
Составить запросы, позволяющие выбрать:
Организации, которые перечисляют деньги только в благотворительные фонды, расположенные в том же городе, что и сама организация.
SELECT DISTINCT Организация
FROM R2 AS x
WHERE NOT EXISTS ( SELECT * FROM R1 INNER JOIN R2 ON R1.Благотворительный фонд INNER JOIN R3 ON R2.Организация=R3.Организация
WHERE R2.Организация=х.Организация AND R1.Город<>R3.Город)
Фонды, в которые делают отчисления несколько организаций, находящихся в других городах.
SELECT Благотворительный фонд
FROM R1 INNER JOIN R2 ON R1.Благотворительный фонд INNER JOIN R3 ON R2.Организация=R3.Организация
WHERE R1.Город<>R3.Город
GROUP BY Благотворительный фонд
HAVING COUNT (DISTINCT Организация) >1
Фонды, в которые делают отчисления из всех городов, представленных в отношении R3.
SELECT Благотворительный фонд
FROM R3 INNER JOIN ON R2.Организация=R3.Организация
GROUP BY Благотворительный фонд
HAVING COUNT(DISTINCT Город) = (SELECT COUNT(DISTINCT Город) FROM R3)
Фонды, в которые делают отчисления не все организации, представленные в отношении R3.
SELECT Благотворительный фонд
FROM R3 INNER JOIN ON R2.Организация=R3.Организация
GROUP BY Благотворительный фонд
HAVING COUNT(DISTINCT Организация) < (SELECT COUNT(DISTINCT Организация) FROM R3)
Организации, размер отчислений которых в один благотворительный фонд превышает $10 000.
SELECT DISTINCT Организация
FROM R2
GROUP BY Организация, Благотворительный фонд
HAVING sum(Размер отчислений>10000
8. Даны отношения, моделирующие работу фондовых магазинов:
R1
Акция |
Номинал |
|
|
R2
Фондовый магазин |
Акция |
Цена продажи |
|
|
|
Составить запросы, позволяющие выбрать:
Фондовые магазины, продающие все акции, указанные в R1.
SELECT Магазин FROM r2 GROUP BY Магазин HAVING count(DISTINCT Акция)=(SELECT count(DISTINCT Акция) FROM r1)
Фондовые магазины, которые продают какие-либо акции не по номиналу.
SELECT DISTINCT Магазин FROM r1 x, r2 y WHERE x.Акция=y.Акция AND x.Номинал<>y.Цена
Акции, которые продаются только одним фондовым магазином.
SELECT Акция FROM R2 GROUP BY Акция HAVING count(DISTINCT Магазин)=1
Акции, средняя цена продажи которых выше номинала.
SELECT Акция
FROM R1 INNER JOIN R2 ON R1.Акция=R2.
GROUP BY R1.Акция
HAVING AVG(R2.Цена продажи) > AVG(R1.Номинал)
Акции, для которых есть другие акции с таким же номиналом.
SELECT Акция
FROM R1
WHERE NOT EXISTS ( SELECT * FROM R1 AS x
WHERE R1.Номинал = x.Номинал AND R1.Акция<> x.Акция)
9. Даны отношения, моделирующие проведение выставок:
R1
Название выставки |
Организация - устроитель |
Организация - участник |
|
|
|
R2
Выставка |
Город |
|
|
R3
Организация |
Город |
|
|
Составить запросы, позволяющие выбрать:
Организации, которые устраивали выставки только в одном городе.
SELECT DISTINCT Организация - устроитель
FROM R1 INNER JOIN R2 R1.Название Выставки=R2.Выставка
GROUP BY Организация - устроитель
HAVING COUNT (DISTINCT Город)=1
Города, в которых одна организация устраивала несколько выставок.
SELECT DISTINCT Организация - устроитель
FROM R1 INNER JOIN R2 R1.Название Выставки=R2.Выставка
GROUP BY Организация - устроитель, Город
HAVING COUNT(*)>1
Выставки, в которых принимала участие, помимо устроителя, только одна организация.
SELECT DISTINCT Название выставки
FROM R1
GROUP BY Название выставки
HAVING СOUNT (*) =1
Выставки, в которых принимало участие несколько организаций, но только из одного и того же города.
SELECT Название выставки
FROM R1 INNER JOIN R3 ON R1.Организация – участник=R3. Организация
GROUP BY Название выставки
HAVING COUNT(DISTINCT Организация – участник) >1 AND COUNT(DISTINCT Город)=1
Организации, которые были только участниками выставок и ни разу не были устроителями ни одной выставки.
SELSECT DISTINCT Организация
FROM R1 INNER JOIN R3 ON R1.Организация – участник=R3. Организация
WHERE NOT EXISTS (SELECT *
FROM R1 RS1 INNER JOIN R3 RS3 ON RS1.Организация – участник=RS3. Организация
WHERE R3. Организация=RS3. Организация)
10. Даны отношения, моделирующие производство деталей:
R1
Фирма |
Страна |
|
|
R2
Шифр изделия |
Наименование |
Материал |
Производитель |
|
|
|
|
R3
Номер поставки |
Шифр изделия |
Количество |
Поставщик |
Заказчик |
|
|
|
|
|
Составить запросы, позволяющие выбрать: