5.4.2. Операции выборки из представлений

Создав представление Мясные_блюда пользователь может считать, что в базе данных реально существует такая таблица и дать, например, запрос на получение из нее всех данных:

    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