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

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

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))

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

R1

Филиал

Заказчик

N заказа

R2

Филиал

Страна

R3

N заказа

Товар

Количество

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

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

and Count(DISTINCT R3.Tovar) = 1) AS R4

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

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

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

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

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

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

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

R1

Название файла

Имя владельца файла

R2

Название файла

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

R3

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

Название файла

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

SELECT DISTINCT File FROM (SELECT File, Owner FROM R1 GROUP BY File, Owner HAVING Count(*) > 1)

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

SELECT DISTINCT Pril FROM (SELECT Pril, MAX(CFile) FROM(SELECT Pril, Count(File) as CFile FROM R3 GROUP BY Pril) GROUP BY Pril))

  1. Файлы, которые имеют одно и тоже имя, но расположены, на различных дисках.

SELECT File FROM (SELECT File, Disc FROM R2 GROUP BY File, Disc) GROUP BY File HAVING COUNT(FILE)>1

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

SELECT File, Prog FROM R3 GROUP BY FILE, Prog HAVING COUNT(*) = (SELECT COUNT(DISTINCT Prog) FROM R3)

  1. Файлы, владельцами которых являются все пользователи ПЭВМ.

SELECT File FROM R1 GROUP BY File HAVING COUNT(*)= (SELECT Count(DISTINCT Owner) FROM R1)