CREATE OR REPLACE VIEW seats_by_fare_cond
AS
SELECT aircraft_code,
fare_conditions,
count( * ) AS num_seats
FROM seats
GROUP BY aircraft_code, fare_conditions
ORDER BY aircraft_code, fare_conditions;
Однако СУБД выдаст сообщение об ошибке:
ОШИБКА: изменить имя столбца "count" на "num_seats" в представлении
нельзя
В чем дело? А дело в том, что при первоначальном создании этого представления
третий столбец уже получил имя count (такое имя ему дала СУБД). Поэтому если
мы хотим воспользоваться вариантом команды с фразой OR REPLACE, мы не должны
изменять названия столбцов ни путем указания псевдонимов, ни с помощью спис-
ка имен столбцов, приводимого в начале команды. Так что если мы все же захотим
124
5.4. Представления
изменить имя столбца в представлении, нам придется сначала удалить это представ-
ление, а затем создать его заново.
DROP VIEW seats_by_fare_cond;
CREATE OR REPLACE VIEW seats_by_fare_cond
AS
SELECT aircraft_code,
fare_conditions,
count( * ) AS num_seats
FROM seats
GROUP BY aircraft_code, fare_conditions
ORDER BY aircraft_code, fare_conditions;
А вот и второй способ задания имен столбцов в представлении — с помощью списка
их имен, заключенного в скобки:
DROP VIEW seats_by_fare_cond;
CREATE OR REPLACE VIEW seats_by_fare_cond ( code, fare_cond, num_seats )
AS
SELECT aircraft_code,
fare_conditions,
count( * )
FROM seats
GROUP BY aircraft_code, fare_conditions
ORDER BY aircraft_code, fare_conditions;
Представления позволяют облегчить развитие и модификацию базы данных, потому
что они могут позволить сохранить интерфейс неизменным, но сам запрос, кото-
рый лежит в основе конкретного представления, может измениться. При этом для
прикладного программиста представление останется неизменным, поэтому не по-
требуется переделывать запросы к этому представлению в прикладной программе.
В базе данных «Авиаперевозки» создано представление «Рейсы» (flights_v), скон-
струированное на основе таблицы «Рейсы» (flights), но содержащее дополнитель-
ную информацию, а именно:
– подробные сведения об аэропорте вылета
(departure_airport, departure_airport_name, departure_city);
– подробные сведения об аэропорте прибытия
(arrival_airport, arrival_airport_name, arrival_city);
125
|