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

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

R1

Организация

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

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

R2

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

Город

R3

Организация

Город

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

SELECT R1.Org FROM R1, R2, R3 WHERE R1.Org=R3.Org and R2.Fond=R1.Fond and R2.Gor=R3.Gor and (R1.Org not in (SELECT R1.Org FROM R1, R2, R3 WHERE R1.Org=R3.Org and R2.Fond=R1.Fond and R2.Gor<>R3.Gor))

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

SELECT R1.Fond FROM R1, R3, R2 WHERE R2.Fond=R1.Fond and R1.Org=R3.Org and R2.Gor<>R3.Gor and R1.Fond not in (SELECT DISTINCT R1.Fond FROM R1, R3, R2 WHERE R2.Fond=R1.Fond and R1.Org=R3.Org and R3.Gor=R2.Gor)

GROUP BY R1.Fond HAVING COUNT(*)>1

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

SELECT Fond FROM (SELECT R1.Fond, R3.Gor FROM R1,R3 WHERE R1.Org=R3.Org GROUP BY R1.Fond, R3.Gor) GROUP BY Fond HAVING COUNT(R3.Gor)=(SELECT Count(DISTINCT R3.Gor) FROM R3)

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

SELECT Fond FROM R1, R3 WHERE R1.Org=R3.Org GROUP BY Fond HAVING count(R1.Org)=(SELECT count(*) FROM R3)

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

R1

Акция

Номинал

R2

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

Акция

Цена продажи

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

SELECT DISTINCT Mag FROM R2 GROUP BY Mag HAVING Count(*) = (SELECT Count(DISTINCT Act) FROM R1)

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

SELECT DISTINCT R2.MAG FROM R1, R2 WHERE R1.Act = R2.Act and R1.NOM <> R2.Cash

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

SELECT R1.Act FROM R1 WHERE R1.Act in (SELECT R2.Act FROM R2 GROUP BY ACT HAVING (Count(Mag) = 1))

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

SELECT DISTINCT R1.Act FROM R1, R2 WHERE R1.Act = R2.Act and R1.Nom > R2.Cash

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

SELECT Mag FROM (SELECT Mag, Act FROM R2 GROUP BY Mag, Act HAVING Count(DISTINCT Act) = 1)

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

R1

Выставка

Город

R2

Организация

Город

R3

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

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

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

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

SELECT DISTINCT R3.Org_Ustr FROM R3, R3 AS a WHERE R3.Vist<>a.Vist And R3.Org_Ustr=a.Org_Ustr

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

SELECT Org_Ustr FROM (SELECT DISTINCT Org_Ustr, Gor FROM R1,R3 WHERE R1.Vist=R3.Vist) GROUP BY Org_Ustr, Gor HAVING COUNT(*)=1

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

SELECT Gor FROM (SELECT DISTINCT Org_Ustr, Gor, R1.Vist FROM R1, R3 WHERE R1.Vist=R3.Vist GROUP BY Org_Ustr, Gor, R3.Vist)

GROUP BY Gor, Org_ustr HAVING COUNT (R1.Vist)>1

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

SELECT Vist FROM R3 GROUP Vist HAVING COUNT(*)=1

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

SELECT R1.Vist FROM R3, R2 AS a, R2 AS b WHERE a.Org=R1.Org_Ustr And b.Org=R1.Org_Uch And a.Gor=b.Gor GROUP BY Vist, Org_Uch HAVING count(*)>1