Outdated version of the documentation. Find the latest one here.

16.5. Lesson: Изгледи

Когато създавате заявка трябва да прекарате доста време и усилия за да я формирате. Със изгледите можете да си спестите създаването на SQL заявка в преизползваемите ‘виртуални таблици’

Целта на този урок е: Да запишем заявка като изглед.

16.5.1. Създаване на Изглед

You can treat a view just like a table, but its data is sourced from a query. Let’s make a simple view based on the above:

create view roads_count_v as
  select count(people.name), streets.name
  from people, streets where people.street_id=streets.id
  group by people.street_id, streets.name;

As you can see the only change is the create view roads_count_v as part at the beginning. We can now select data from that view:

select * from roads_count_v;

Result:

 count |    name
-------+-------------
     1 | Main Road
     2 | High street
     1 | Low Street
(3 rows)

16.5.2. Промяна на Изглед

A view is not fixed, and it contains no ‘real data’. This means you can easily change it without impacting on any data in your database:

CREATE OR REPLACE VIEW roads_count_v AS
  SELECT count(people.name), streets.name
  FROM people, streets WHERE people.street_id=streets.id
  GROUP BY people.street_id, streets.name
  ORDER BY streets.name;

(Този пример показва най добрите практики удобни за използване на UPPER CASE за всички SQL ключови думи)

You will see that we have added an ORDER BY clause so that our view rows are nicely sorted:

select * from roads_count_v;

 count |    name
-------+-------------
     2 | High street
     1 | Low Street
     1 | Main Road
(3 rows)

16.5.3. Изхвърляне на Изглед

If you no longer need a view, you can delete it like this:

drop view roads_count_v;

16.5.4. In Conclusion

Използвайки изгледи, можете да запазите заявка и да достъпите резултатите все едно, че имате таблица.

16.5.5. What’s Next?

ПОнякога, когато променяте данни може да поискате промените да афектират някъде в базата данни. Следващият урок ще ви покаже как да го направите.