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

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

R1

ФИО клиента

N филиала

N счета

Остаток

R2

N филиала

Район

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

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

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.Район)

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

SELECT ФИО FROM R1 GROUP BY ФИО HAVING count(DISTINCT N Филиала)= (SELECT count(*) FROM R2)

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

SELECT DISTINCT ФИО FROM R1 WHERE ФИО NOT IN ( SELECT DISTINCT ФИО FROM R1 GROUP BY ФИО, N Филиала HAVING COUNT(*)>1)

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

SELECT ФИО FROM R1,R2 WHERE R1.Филиал = R2.Филиал GROUP BY ФИО HAVING count(DISTINCT Район)=1 AND count(DISTINCT R1.Филиал)>1

  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

Клиент

Страна

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

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

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

SELECT Клиент FROM R1,R2,R3 WHERE R1.Филиал = R2.Филиал AND R2.Договор = R2.Договор GROUP BY Клиент, R1.Страна HAVING count(DISTINCT R2.Филиал)>1

  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.Страна)

  1. Филиалы, в которые никто не пожелал обратиться повторно.

SELECT Филиал FROM R3, R2 WHERE R3.Договор = R2.Договор

GROUP BY Филиал

HAVING count(DISTINCT Клиент)=count(Клиент)

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

SELECT Город FROM R1 GROUP BY Город HAVING count(Филиал)<=3

  1. Страны, филиалы в которых заключили наибольшее количество договоров

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 заказа

Товар

Количество

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

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

SELECT Заказчик FROM R2, R3 WHERE R2.Заказ=R3.Заказ GROUP BY Заказчик

HAVING count(DISTINCT Филиал)=(SELECT count(*) FROM R1) AND count(DISTINCT Товар)=1

  1. Филиалы фирмы, которые торгуют всеми товарами.

SELECT Филиал FROM R3, R2 WHERE R3.Заказ=R2.Заказ GROUP BY Филиал

HAVING count(DISTINCT Товар) = (SELECT count(DISTINCT Товар) FROM R3)

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

SELECT DISTINCT Заказчик FROM R3 INNER JOIN R2 ON R3.N Заказа = R2.N Заказа GROUP BY Заказчик. Товар HAVING count(*)>1

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

SELECT Заказчик FROM R1, R3, R2 WHERE R2.Заказ=R3.Заказ AND R1.Филиал=R2.Филиал

GROUP BY Заказчик

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

  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

Название программы

Название диска

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

  1. Диски, на которых расположено больше всего файлов.

SELECT Диск FROM R1 GROUP BY Диск HAVING count(*)=(Select count(*) x FROM R1 GROUP BY Диск ORDER BY x DESC LIMIT 1)

  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

  1. Для каждого диска найти самые большие файлы.

SELECT Название диска,Название файла, Размер файла FROM R1

WHERE NOT EXISTS (SELECT * FROM R1 x WHERE R1.Название диска=x.Название диска AND x.Размер файла>R1.Размер файла)

  1. Файлы, с которыми работают все программы.

SELECT Файл FROM R2 GROUP BY Файл HAVING count(Программа)=(SELECT count(DISTINCT Программа) FROM R2)

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

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

Имя пользователя

Название приложения

Операционная система

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

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

SELECT DISTINCT Имя пользователя

FROM R3

GROUP BY Имя пользователя

HAVING count(DISTINCT Название приложения)>1 AND count(Операционная система)=1

  1. Серверы БД, которые работают только с одной БД.

SELECT СерверБД FROM R1 GROUP BY СерверБД HAVING count(DISTINCT ИмяБД)=1

  1. Приложения, которые работают со всеми серверами БД.

SELECT DISTINCT Название Приложения

FROM R2 INNER JOIN R1 ON R2.Имя БД=R1.Имя БД

GROUP BY Название Приложения

HAVING count(DISTINCT Имя Сервера БД)=(SELECT count(DISTINCT Имя сервера БД) FROM R1)

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

Блокнот

SELECT DISTINCT Пользователи

FROM R1 INNER JOIN R2 ON R1.Имя БД=R2.Имя БД INNER JOIN R3 ON R2.Название Приложения=R3.Название приложения

GROUP BY Пользователи

HAVING COUNT (DISTINCT Имя сервера БД) =1

  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

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

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

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

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

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

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

FRON R3

GROUP BY ФИО оператора, Название ПО

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

  1. Операторов, которые используют всё программное обеспечение на какой-либо из станций, за которой работают.

SELECT DISTINCT ФИО

FROM R3

WHERE ФИО NOT IN (

SELECT ФИО FROM R3

WHERE NOT EXISTS (

SELECT * FROM R1

WHERE R1.Рабочая станция=R3.Рабочая станция

AND R1.Программное обеспечение=R3.Программное обеспечение

)

)

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

SELECT Название ПО

FROM R1

GROUP BY Название ПО

HAVING COUNT (*) =1

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

SELECT Сервер

FROM R2

GROUP BY Сервер

HAVING COUNT(*) < (SELECT COUNT(DISTINCT Рабочая станция) FROM R3)

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

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

FROM R3

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

HAVING COUNT(DISTINCT Название ПО) = (SELECT COUNT(DISTINCT Название ПО) FROM R1)

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

R1

Благотворительный фонд

Город

R2

Организация

Благотворительный фонд

Размер отчислений

R3

Организация

Город

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

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

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.Город)

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

SELECT Благотворительный фонд

FROM R1 INNER JOIN R2 ON R1.Благотворительный фонд INNER JOIN R3 ON R2.Организация=R3.Организация

WHERE R1.Город<>R3.Город

GROUP BY Благотворительный фонд

HAVING COUNT (DISTINCT Организация) >1

  1. Фонды, в которые делают отчисления из всех городов, представленных в отношении R3.

SELECT Благотворительный фонд

FROM R3 INNER JOIN ON R2.Организация=R3.Организация

GROUP BY Благотворительный фонд

HAVING COUNT(DISTINCT Город) = (SELECT COUNT(DISTINCT Город) FROM R3)

  1. Фонды, в которые делают отчисления не все организации, представленные в отношении R3.

SELECT Благотворительный фонд

FROM R3 INNER JOIN ON R2.Организация=R3.Организация

GROUP BY Благотворительный фонд

HAVING COUNT(DISTINCT Организация) < (SELECT COUNT(DISTINCT Организация) FROM R3)

  1. Организации, размер отчислений которых в один благотворительный фонд превышает $10 000.

SELECT DISTINCT Организация

FROM R2

GROUP BY Организация, Благотворительный фонд

HAVING sum(Размер отчислений>10000

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

R1

Акция

Номинал

R2

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

Акция

Цена продажи

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

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

SELECT Магазин FROM r2 GROUP BY Магазин HAVING count(DISTINCT Акция)=(SELECT count(DISTINCT Акция) FROM r1)

  1. Фондовые магазины, которые продают какие-либо акции не по номиналу.

SELECT DISTINCT Магазин FROM r1 x, r2 y WHERE x.Акция=y.Акция AND x.Номинал<>y.Цена

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

SELECT Акция FROM R2 GROUP BY Акция HAVING count(DISTINCT Магазин)=1

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

SELECT Акция

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

GROUP BY R1.Акция

HAVING AVG(R2.Цена продажи) > AVG(R1.Номинал)

  1. Акции, для которых есть другие акции с таким же номиналом.

SELECT Акция

FROM R1

WHERE NOT EXISTS ( SELECT * FROM R1 AS x

WHERE R1.Номинал = x.Номинал AND R1.Акция<> x.Акция)

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

R1

Название выставки

Организация - устроитель

Организация - участник

R2

Выставка

Город

R3

Организация

Город

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

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

SELECT DISTINCT Организация - устроитель

FROM R1 INNER JOIN R2 R1.Название Выставки=R2.Выставка

GROUP BY Организация - устроитель

HAVING COUNT (DISTINCT Город)=1

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

SELECT DISTINCT Организация - устроитель

FROM R1 INNER JOIN R2 R1.Название Выставки=R2.Выставка

GROUP BY Организация - устроитель, Город

HAVING COUNT(*)>1

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

SELECT DISTINCT Название выставки

FROM R1

GROUP BY Название выставки

HAVING СOUNT (*) =1

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

SELECT Название выставки

FROM R1 INNER JOIN R3 ON R1.Организация – участник=R3. Организация

GROUP BY Название выставки

HAVING COUNT(DISTINCT Организация – участник) >1 AND COUNT(DISTINCT Город)=1

  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

Номер поставки

Шифр изделия

Количество

Поставщик

Заказчик

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

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