Обзор — это способ представить
вычисляемую информацию как если бы она хранилась в таблице. Можно, создав обзор,
обращаться к нему как к таблице с помощью запросов SELECT
. Сами по
себе обзоры на содержат данных, однако содержат сведения, как эти данные
вычислить и представить как таблицу. Можно представлять себе обзор как
сохранённый на стороне сервера запрос SELECT
.
Создадим обзор planet_info, включающий все колонки таблицы planet, а также вычисляемую колонку density:
test54=#
CREATE OR REPLACE VIEW planet_info
test54-#
AS SELECT *, 1E-9*6*mass/3.1415926/diameter^3 AS density
test54-#
FROM planet
test54-#
ORDER BY orbit;
CREATE VIEW
test54=#
SELECT * FROM planet_info;
name | token | diameter | mass | orbit | density ----------+-------+----------+------------+--------+------------------ Меркурий | ☿ | 4880 | 3.3e+23 | 0.38 | 5423.20300055831 Венера | ♀ | 12103.6 | 4.869e+24 | 0.72 | 5244.42083382882 Земля | ♁ | 12756.3 | 5.9736e+24 | 1 | 5496.2105803137 Марс | ♂ | 6794 | 6.4219e+23 | 1.52 | 3911.00452011731 Юпитер | ♃ | 142984 | 1.9e+27 | 5.2 | 1241.34547590606 Сатурн | ♄ | 120536 | 5.68e+26 | 9.54 | 619.440218250837 Уран | ♅ | 51118 | 8.683e+25 | 19.218 | 1241.50823272514 Нептун | ♆ | 49532 | 1.0247e+26 | 30.06 | 1610.42514063507 (8 rows)
Обратите внимание, что наличие фразы ORDER BY orbit
при создании
обзора гарантирует, что обращения к обзору planet_info с помощью SELECT
будет
возвращать планеты в их естественном порядке (по мере удаления от Солнца), если
в таком запросе не будет указано иное упорядочение:
test54=#
SELECT name, diameter, density FROM planet_info ORDER BY diameter;
name | diameter | density ----------+----------+------------------ Меркурий | 4880 | 5423.20300055831 Марс | 6794 | 3911.00452011731 Венера | 12103.6 | 5244.42083382882 Земля | 12756.3 | 5496.2105803137 Нептун | 49532 | 1610.42514063507 Уран | 51118 | 1241.50823272514 Сатурн | 120536 | 619.440218250837 Юпитер | 142984 | 1241.34547590606 (8 rows)
Замечание | |
---|---|
В PostgreSQL обзор реализуется как пустая таблица и правило, которое
подменяет клиентский запрос SELECT name, diameter, density FROM planet_info ORDER BY diameter; на запрос SELECT name, diameter, 1E-9*6*mass/3.1415926/diameter^3 AS density ORDER BY diameter;
В других СУБД обзоры могут быть реализованы иначе. |