Операции выборки из представлений
Создав представление Мясные_блюда пользователь может считать, что в базе данных реально существует такая таблица и дать, например, запрос на получение из нее всех данных:
SELECT * FROM Мясные_блюда;
результат которого имеет вид
БЛ Блюдо В Выход 2 Салат мясной З 200 6 Мясо с гарниром З 250 9 Суп харчо С 500 13 Бастурма Г 300 14 Бефстроганов Г 210Поскольку при определении представления может быть использован любой допустимый подзапрос, то выборка данных может осуществляться как из базовых таблиц, так и из представлений:
CREATE VIEW Горячие_мясные_блюда AS SELECT Блюдо, Продукт, Вес FROM Мясные_блюда, Состав, Продукты WHERE Мясные_блюда.БЛ = Состав.БЛ AND Продукты.ПР = Состав.ПР AND В = 'Г';
Если теперь возникла необходимость получить сведения о горячих мясных блюдах, в состав которых входят помидоры, то можно сформировать запрос
SELECT Блюдо, Продукт, Вес FROM Горячие_мясные_блюда WHERE Блюдо IN ( SELECT Блюдо FROM Горячие_мясные_блюда WHERE Продукт = 'Помидоры')
и получить:
Блюдо Продукт Вес Бастурма Говядина 180 Бастурма Помидоры 100 Бастурма Лук 40 Бастурма Зелень 20 Бастурма Масло 5Легко заметить, что данный запрос, осуществляющий выбор данных через два представления, выглядит для пользователя точно так же, как обычный SELECT, оперирующий обычной базовой таблицей. Однако СУБД преобразует его при выполнении в эквивалентную операцию над лежащими в основе базовыми таблицами (перед выполнением проводит слияние выданного пользователем SELECT с предложениями SELECT из описаний представлений, хранящихся в каталоге).
5.4.1 | Содержание | 5.4.3