Views – представления
Бывает удобно сохранить результат выборки для дальнейшего использования. Для этих целей в языке 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
Работает он как с виртуальными, так и реальными таблицами:
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
Если после LIMIT указано два числа, то первое обозначает смещение, и только второе – количество выбираемых строк. Кроме того, можно указывать смещение с помощью ключевого слова OFFSET:
sqlite> SELECT * FROM dates LIMIT 3 OFFSET 2; 3|7|2019-05-26 4|8|2019-05-30 5|9|2019-06-01