В некоторых случаях полезно сохранить результат запроса, чтобы воспользоваться им впоследствии. Для таких целей в SQL применяется оператор CREATE VIEW, который создает представление — временную таблицу, в которой как бы фиксируется результат запроса.
Этот тип таблицы называется виртуальным, поскольку данные в ней не сохраняются физически в базе данных. В нее невозможно внести изменения, такие как вставка, обновление или удаление данных. Единственное, что доступно — это просмотр информации и выполнение выборок из неё.
С другой стороны, изменения в настоящих таблицах немедленно отображаются в виртуальных. Это происходит потому, что СУБД каждый раз при обращении к представлению использует SQL выражение представления для обновления данных. Рассмотрим пример:
sqlite> CREATE VIEW title_url AS ...> SELECT title, url FROM pages; sqlite> SELECT * FROM title_url; What is Information|information Amount of Information|amount-information Binary System|binary Boolean Lows|boolean sqlite> INSERT INTO pages (title, url, theme) VALUES ...> ('What is Algorithm', 'algorithm', 4); sqlite> SELECT * FROM title_url; What is Information|information Amount of Information|amount-information Binary System|binary Boolean Lows|boolean What is Algorithm|algorithm
Сначала мы создали представление title_url, после чего добавили новую запись в реальную таблицу pages. Обратившись к представлению, мы видим, что новая запись добавлена.
Обычно представления содержат данные, объединенные из разных таблиц:
sqlite> CREATE VIEW change_page AS ...> SELECT pages._id, pages.title, sections.name, dates.date ...> FROM pages JOIN dates JOIN sections ...> ON pages._id = dates.page_id AND sections._id = pages.theme ...> ORDER BY dates.date DESC; sqlite> SELECT * FROM change_page; 8|Boolean Lows|Boolean Algebra|2019-06-04 3|Amount of Information|Information|2019-06-03 9|What is Algorithm|Algorithm|2019-06-01 8|Boolean Lows|Boolean Algebra|2019-05-30 3|Amount of Information|Information|2019-05-26 7|Binary System|Digital Systems|2019-05-26 1|What is Information|Information|2019-05-25
Чтобы удалить представление, используется команда DROP VIEW:
sqlite> DROP VIEW title_url;
Возникает вопрос: как выбрать только пять самых последних измененных страниц? Для этого применяется оператор LIMIT:
sqlite> SELECT * FROM change_page LIMIT 5; 8|Boolean Lows|Boolean Algebra|2019-06-04 3|Amount of Information|Information|2019-06-03 9|What is Algorithm|Algorithm<|2019-06-01 8|Boolean Lows|Boolean Algebra|2019-05-30 3|Amount of Information|Information|2019-05-26
Оператор LIMIT может быть использован как с виртуальными, так и с реальными таблицами:
sqlite> SELECT * FROM dates LIMIT 3; 1|1|2019-05-25 2|3|2019-05-26 3|7|2019-05-26 sqlite> SELECT * FROM dates LIMIT 2, 3; 3|7|2019-05-26 4|8|2019-05-30 5|9|2019-06-01
При использовании двумя числами первым указывается начальное смещение, вторым — количество строк для выборки. Смещение также можно задать с помощью OFFSET:
sqlite> SELECT * FROM dates LIMIT 3 OFFSET 2; 3|7|2019-05-26 4|8|2019-05-30 5|9|2019-06-01