Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы БД.doc
Скачиваний:
141
Добавлен:
02.04.2015
Размер:
390.14 Кб
Скачать

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

R1

N филиала

Район

R2

ФИО клиента

N филиала

N счета

Остаток

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

SELECT DISTINCT FILIAL FROM (SELECT R2.FILIAL, R2.FIO FROM R2 GROUP BY R2.FILIAL, R2.FIO)

GROUP BY FILIAL,FIO HAVING COUNT(*)=1

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

SELECT R3.FIO FROM (SELECT DISTINCT FIO,FILIAL FROM R2 GROUP BY FIO,FILIAL) AS R3

GROUP BY R3.FIO HAVING Count(R3.FIO)=(SELECT COUNT(*) FROM R1)

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

SELECT R2.FIO FROM R2 GROUP BY R2.FIO HAVING COUNT(*)=1

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

SELECT R3.FIO FROM (SELECT R2.FIO, R1.RAION FROM R2 INNER JOIN R1 ON R2.FILIAL = R1.FILIAL

GROUP BY R2.FIO, R2.FILIAL, R1.RAION) AS R3 GROUP BY R3.FIO, R3.RAION HAVING (((Count(*))>1))

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

R1

Филиал

Страна

Город

R2

Клиент

Страна

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

R3

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

Филиал

Дата начала

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

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

SELECT DISTINCT Client FROM(SELECT R2.Client, R3.Filial from R1, R2, R3 WHERE R2.NDog = R3.NDog and R1.Filial = R3.Filial GROUP BY R2.Client, R3.Filial HAVING (Count(distinct R1.Country) = 1) and (Count(*)>1))

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

SELECT FILIAL FROM (SELECT R1.Filial, R1.Country, R2.Country

FROM (R2 INNER JOIN R3 ON R2.NDog = R3.NDog) INNER JOIN R1 ON R3.Filial = R1.Filial

GROUP BY R1.Filial, R1.Country, R2.Country) GROUP BY R1.FILIAL, R1.COUNTRY HAVING COUNT(*)=1

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

SELECT Filial FROM R3 WHERE Filial NOT IN

(SELECT Filial FROM (SELECT R2.Client, R3.Filial FROM R2 INNER JOIN R3 ON R2.NDog = R3.NDog

GROUP BY R2.Client, R3.Filial) GROUP BY Filial HAVING COUNT(*)>1) GROUP BY Filial HAVING COUNT(*)>1

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

SELECT R1.Gorod FROM R1 GROUP BY R1.Gorod HAVING COUNT(*)<=3

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

R1

Филиал

Страна

R2

N заказа

Товар

Количество

R3

Филиал

Заказчик

N заказа

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

SELECT R4.Zak FROM (SELECT R3.Filial, R3.Zak, R2.Tovar FROM R3, R2

WHERE R2.NZak = R3.NZak GROUP BY R3.Filial, R2.Zak HAVING (Count(Distinct Filial) = (SELECT Count(Filial) FROM R1))

AND Count(DISTINCT R2.Tovar) = 1) AS R4

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

SELECT FILIAL FROM(SELECT DISTINCT R3.Filial, R2.Tovar FROM R2 INNER JOIN R3 ON R2.NZak = R3.NZAK GROUP BY R3.Filial, R2.Tovar)GROUP BY FILIAL HAVING COUNT(*)= (SELECT COUNT(DISTINCT TOVAR) FROM R2))

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

SELECT TOVAR FROM(SELECT TOVAR,COUNTRY FROM (R1 INNER JOIN R2 ON R1.FILIAL=R2.FILIAL) INNER JOIN R3 ON R2.NZAK=R3.NZAK GROUP BY TOVAR, COUNTRY)GROUP BY TOVAR, COUNTRY HAVING COUNT(*)=1

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

SELECT ZAK FROM(SELECT R1.FILIAL, R3.ZAK FROM R1 INNER JOIN R3 ON R1.FILIAL= R3.FILIAL GROUP BY R3.ZAK,R1.FILIAL)GROUP BY ZAK HAVING COUNT(*)=1