Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв БД 2013-03-15.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
12.65 Mб
Скачать

7.1.3. Представления

7.1.3.1. Определите отношение SP из базы данных поставщиков и деталей как представление отношения SPJ из базы данных поставщиков, деталей и изделий.

7.1.3.2. Создайте для базы данных поставщиков, деталей и изделий представление. состоящее из всех изделий (включающее только поля номера изделия и города), которые поставляются поставщиком S1 и используют деталь Р1.

7.1.3.3. Создайте представление, состоящее из номеров поставщиков и номеров деталей, для таких поставщиков и деталей, которые не «соразмещены».

7.1.3.4. Создайте представление, состоящее из записей поставщиков, только для тех поставщиков, которые находятся в Лондоне.

7.1.3.5. При условии, что задано определение представления: CREATE VIEW СВОДКА (НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ, МАКС_КОЛИЧЕСТВО, МИН_КОЛИЧЕСТВО, СРЕДНЕЕ_КОЛИЧЕСТВО) AS SELECT НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ, MAX (КОЛИЧЕСТВО), MIN (КОЛИЧЕСТВО),AVG (КОЛИЧЕСТВО) FROM SPJ GROUP BY НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ HAVING SUM (КОЛИЧЕСТВО) > 50; установите, какие из следующих операций корректны и приведите для них полученный в результате трансляции эквивалент. а) SELECT * FROM СВОДКА; б) SELECT * FROM СВОДКА=WHERE НОМЕР_ПОСТАВЩИКА ‘S1'; в) SELECT FROM СВОДКА WHERE МАКС_КОЛИЧЕСТВО > 250; г) SELECT МАКС_КОЛИЧЕСТВО - МИН_КОЛИЧЕСТВО, НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ FROM СВОДКА WHERE НОМЕР_ПОСТАВЩИКА ='S1' AND НОМЕР_ДЕТАЛИ = 'Р1'; д) SELECT НОМЕР_ПОСТАВЩИКА FROM СВОДКА GROUP BY НОМЕР_ПОСТАВЩИКА; e) SELECT НОМЕР_ПОСТАВЩИКА, МАКС_КОЛИЧЕСТВО FROM СВОДКА GROUP BY НОМЕР_ПОСТАВЩИКА, МАКС_КОЛИЧЕСТВО; ж) SELECT S.НОМЕР_ПОСТАВЩИКА, СВОДКА. СРЕДНЕЕ_КОЛИЧЕСТВО FROM S,CBOДKA WHERE S.HOMEP_ПОСТАВЩИКА = СВОДКА. НОМЕР_ПОСТАВЩИКА; з) UPDATE СВОДКА SET НОМЕР_ПОСТАВЩИКА = 'S2' WHERE НОМЕР_ПОСТАВЩИКА = ‘S1'; и) UPDATE СВОДКА SET МАКС_КОЛИЧЕСТВО = 1000 WHERE НОМЕР_ПОСТАВЩИКА = 'S1'; к) DELETE FROM СВОДКАWHERE НОМЕР_ПОСТАВЩИКА = 'S1';

Ответы к некоторым упражнениям.

7.1.3.1.

CREATE VIEW SP (НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ, КОЛИЧЕСТВО) AS SELECT НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ, SUM (КОЛИЧЕСТВО) FROM SPJ GROUP BY НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ;

7.1.3.2.

CREATE VIEW JC (НОМЕР_ИЗДЕЛИЯ, ГОРОД) AS SELECT DISTINCT J. НОМЕР_ИЗДЕЛИЯ. J.ГОРОД FROM J,SPJ WHERE J.НОМЕР_ИЗДЕЛИЯ = SPJ. НОМЕР_ИЗДЕЛИЯ AND (SP J. НОМЕР_ПОСТАВЩИКА = 'S1' OR SP J. НОМЕР_ДЕТАЛИ = 'PI');

7.1.3.3.

CREATE VIEW НЕ_СОРАЗМЕЩЕННЫЕ AS SELECT НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ

FROM S, Р WHERE S. P.ГОРОД = S.ГОРОД;

7.1.3.4.

CREATE VIEW ЛОНДОНСКИЕ_ПОСТАВЩИКИ AS SELECT НОМЕР_ПОСТАВЩИКА, ФАМИЛИЯ, СОСТОЯНИЕ FROM S WHERE ГОРОД = 'Лондон';

7.1.3.5.

Корректны только операции а), б) и г). В частности, отметим, что операция ж) некорректна, так как представление, определение которого включает фразу GROUP BY, не может соединяться с другими таблицами. Приведем эквивалент, полученный в результате трансляции, только для случая г):

SELECT MAX (КОЛИЧЕСТВО) - MI N (КОЛИЧЕСТВО), НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ FROM SPJ WHERE НОМЕР_ПОСТАВЩИКА ='S1' AND НОМЕР_ДЕТАЛИ = 'Р1’ GROUP BY НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ HAVING SUM (КОЛИЧЕСТВО) > 50;