Представления в SQL

Представления в SQL


Здравствуйте, в этой статье будут разобраны представления или view в SQL. На простых примерах объясним как создавать представления и как к ним обращаться. Также затронем понятие модифицируемого представления в SQL.

Общее понятие

Итак, представления в SQL являются особым объектом, который содержит данные, полученные запросом SELECT из обычных таблиц. Это виртуальная таблица, к которой можно обратиться как к обычным таблицам и получить хранимые данные. Представление в SQL может содержать в себе как данные из одной единственной таблицы, так и из нескольких таблиц.

Представления нужны для того, чтобы упростить работу с базой данных и ускорить время ответа сервера. Так как представление — это уже результат некой выборки данных с помощью SELECT, то, очевидно, в следующий раз вместо запроса к нескольким таблицам достаточно просто обратиться к уже созданному представлению. Работу этого объекта характеризует следующее изображение:


На изображении — простой вариант использования представления, когда объединяются данные по идентификатору. Но, помимо этого, в представлениях могут быть разные виды условий и ограничений, также вложенные запросы и группировки по каким либо полям. Об этом будет сказано чуть позже.

Создание представления в SQL

Создание представления осуществляется следующей командой:

CREATE VIEW name_view
as

Где name_view — имя, которое задает пользователь при создании. После ключевого слова as идет код запроса SELECT, данные которого и поместятся в представление. Чтобы легче понять разберем простой пример, иллюстрация которого была представлена выше.

CREATE VIEW info_order
AS SELECT onum, amt, cname
FROM orders, customers
WHERE orders.cnum = customers.cnum

С помощью SELECT выбираются данные и помещаются в представление. Еще раз повторим, что когда данные в исходных таблицах изменятся, то они поменяются и в представлении.

Теперь представление практически является таблицей, если вы используете phpmyadmin, то слева в меню можно увидеть такую картину:


Обращение к представлениям в SQL

Чтобы посмотреть данные из представления следует воспользоваться например оператором SELECT в SQL.

SELECT * FROM info_order

Помимо простого SELECT, в SQL к представлениям можно обращаться с различными условиями WHERE, как к обычным таблицам. Также можно использовать данные из этого представления, чтобы сформировать новое представление — хотя это и редко используется, тем не менее, в SQL есть такая возможность.

Примеры представлений

Пока что были рассмотрены самые простые примеры на представления. В целом, следующие примеры также не будут слишком сложными, если были изучены предыдущие статьи, но все равно необходимо познакомиться с возможными применениями.

Представление с вложенным запросом


Рассмотрим такую задачу:

Создайте представление Cust_Rating_Max, которое бы показывало всех покупателей и их город, которые имеют самые высокие рейтинги.

Хорошей практикой является решение задачи запроса SELECT, а затем уже создание самого представления. То есть сначала лучше написать запрос, который вернет на экран то, что нужно. Затем создать представление. Вот итоговый код решения этой задачи:

CREATE VIEW Cust_Rating_Max
as SELECT cname, city, rating
FROM customers
WHERE rating = (SELECT Max(rating)
                FROM customers)

Теперь это представление может использоваться как обычная таблица, но преимущество в том, что данные изменяются автоматически при добавлении или изменении данных в основных таблицах.

Представление с группировкой


Следующая задача:

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

Нужно сделать группировку по имени продавца и следующий код нам в этом поможет:

CREATE VIEW Sale_Amt_Avg
as SELECT sname, AVG(amt)
FROM salespeople, orders
WHERE salespeople.snum = orders.snum
GROUP BY sname

По сути для каждого продавца рассчитывается среднее значение сумм его продаж и заносится в представление.

Представление с сортировкой


Это выделено в отдельный пункт, так как не все СУБД SQL поддерживают представления с сортировкой, но мы рассмотрим такую задачу:

Создайте представление Orders_All, которое бы показывало данные о заказах: сумму, дату, фамилию покупателя и продавца. Отсортировать по сумме заказа.

CREATE VIEW Orders_All
as SELECT amt, odate, customers.cname, salespeople.sname
FROM orders, customers, salespeople
WHERE orders.cnum = customers.cnum and orders.snum = salespeople.snum 
ORDER BY amt

В этом запросе по сути создается представление, которое дублирует таблицу orders, и заменяет в ней идентификаторы на фамилии. Также происходит сортировка по сумме заказа.

На этом с практикой мы закончим и еще немного поговорим о теории представлений.

Понятие модифицируемого представления в SQL


Итак, в SQL есть такое понятие как модифицируемого представление — это означает, что при изменении данных в самом представлении, эти данные изменятся и в таблицах, которые эти данные хранят. То есть при использовании оператора UPDATE/INSERT/DELETE к представлению, данные обновятся и в таблицах.

Очевидно, что не все представления являются такими и на самом деле большая часть является немодифицируемыми. По причине неоднозначности: например в представлении хранятся данные из двух таблиц. Пользователь удаляет одну строку в представлении, и тут возникает вопрос — удалять ли исходные данные в таблицах, а если и удалять, то сразу из двух или только одной… В этом и состоит неоднозначность.

Поэтому выделили специальные критерии по которым можно определенно сказать — является ли представление SQL модифицируемым. Эти критерии вы можете найти по этой ссылке — тут статья на очень полезном ресурсе по SQL языку.

Заключение

На этом все для представлений. В этой статье было много теории, но без этого сложно понять как работают представления в SQL. Если у вас остались вопросы — задавайте их в комментариях и по возможности делитесь данными уроками в социальных сетях.



Report Page