Приветствую всех, сегодня рассмотрим тему о представлениях, а также разберем их применении.
Представления — это виртуальные таблицы. В отличие от таблиц, содержащих данные, представления содержат запросы, которые динамически выбирают данные, когда это необходимо.
Представление используют в следующих случаях:
- Для повторного использования операторов SQL;
- Для упрощения выполнения сложных операций. После того как запрос подготовлен, его можно с легкостью использовать повторно, для этого не нужно разбираться в особенностях его работы;
- Для вывода частей таблицы вместо вывода ее полностью;
- Для защиты данных. Пользователям можно предоставить доступ к определенному поднабору таблиц, а не ко всем таблицам;
- Для изменения форматирования и отображения данных. Представления могут
- возвращать данные, отформатированные и отображенные иначе, чем они хранятся
- в таблицах.
После того как представления созданы, их можно использовать точно так же, как таблицы. Вы можете выполнять операции SELECT, фильтровать и сортировать данные, объединять представления с другими представлениями или таблицами и, возможно, даже добавлять в них данные либо обновлять их.
Создание представлений
Представления создаются с помощью оператора CREATE VIEW. Аналогично оператору CREATE TABLE, оператор CREATE VIEW можно использовать только для создания представления, которого до сих пор не существовало.
Для удаления представления используется оператор DROP . Его синтаксис прост: DROP VIEW имя_представления;.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
-- Представления это способ вывода ограниченного набора столбцов из реальной таблицы в виде виртуальной таблицы. DROP TABLE InfoPerson GO CREATE TABLE InfoPerson ( FirstName nvarchar(50) null, LastName nvarchar(50)null, BirthDate date null, AddressLine1 nvarchar(50) null, AddressLine2 nvarchar(50) null, EmailAddress nvarchar(50) null, ) GO INSERT InfoPerson -- пререносим данные из одной таблицы в другую SELECT pc.FirstName, pc.LastName, CAST(he.BirthDate as DATE), pa.AddressLine1, pa.AddressLine2, pea.EmailAddress FROM AdventureWorks2012.Person.Person as pc -- базаДанных.Схема.Таблица AS алиас JOIN AdventureWorks2012.HumanResources.Employee as he ON pc.BusinessEntityID = he.BusinessEntityID JOIN AdventureWorks2012.Person.BusinessEntityAddress as hea ON he.BusinessEntityID = hea.BusinessEntityID JOIN AdventureWorks2012.Person.Address as pa ON hea.AddressID = pa.AddressID JOIN AdventureWorks2012.Person.EmailAddress as pea ON pea.BusinessEntityID = pc.BusinessEntityID GO SELECT * FROM InfoPerson; GO ----------------------------------------------------------- /* Создание представления - CREATE VIEW */ ----------------------------------------------------------- CREATE VIEW BthPerson -- Создание представления AS SELECT FirstName, LastName, BirthDate, EmailAddress FROM InfoPerson; GO SELECT * FROM BthPerson; -- выборка из представления SELECT * FROM InfoPerson; -- выборка из таблицы GO ------------------------------------------------------------ CREATE VIEW BthPerson2 WITH SCHEMABINDING -- Запрещает удаление таблицы для которой создано представление. AS SELECT FirstName, LastName, BirthDate, EmailAddress FROM dbo.InfoPerson; -- Двухкомпонентная структура имени таблицы с которой связано представление. GO SELECT * FROM BthPerson2; DROP TABLE InfoPerson; -- Будет ошибка. GO ------------------------------------------------------------ CREATE VIEW BthPrsn2Addres -- Создаем представление для выборки данных по условию. AS SELECT FirstName, LastName, BirthDate, AddressLine1, AddressLine2 FROM InfoPerson WHERE AddressLine2 is not null; -- Представление будет выводить информацию о тех людях которые имеют 2 адреса GO SELECT * FROM BthPrsn2Addres; -- выборка из представления SELECT FirstName, LastName, BirthDate, AddressLine1 FROM BthPrsn2Addres; -- как и при выборке из таблицы можно задавать определенный набор столбоцов для вывода GO -- Вместо таблицы InfoPerson, в которую записана информация из других таблиц -- можно создать представление, при этом будет сэкономленна физическая память базы данных. CREATE VIEW InfoPerson2 AS SELECT pc.FirstName, pc.LastName, he.BirthDate, pa.AddressLine1, pa.AddressLine2, pea.EmailAddress FROM AdventureWorks2012.Person.Person as pc -- базаДанных.Схема.Таблица AS алиас JOIN AdventureWorks2012.HumanResources.Employee as he ON pc.BusinessEntityID = he.BusinessEntityID JOIN AdventureWorks2012.Person.BusinessEntityAddress as hea ON he.BusinessEntityID = hea.BusinessEntityID JOIN AdventureWorks2012.Person.Address as pa ON hea.AddressID = pa.AddressID JOIN AdventureWorks2012.Person.EmailAddress as pea ON pea.BusinessEntityID = pc.BusinessEntityID SELECT * FROM InfoPerson; SELECT * FROM InfoPerson2; -------------- Вставка данных с помощю представления. SELECT * FROM BthPerson; INSERT INTO BthPerson (BirthDate, EmailAddress, FirstName, LastName) VALUES ('02/03/1990', 'adgkj@mail.ru', 'Andrew', 'Test1'); -- Выборка из представления. SELECT * FROM BthPerson WHERE LastName = 'Test1'; -- Выборка из таблицы. -- На самом деле данные записались в таблицу InfoPerson. SELECT * FROM InfoPerson WHERE LastName = 'Test1'; ------------------------------------------------------------ -- Обновление данных с помощью представления. UPDATE BthPerson SET EmailAddress = 'testmail1@mail.ru' WHERE LastName = 'Test1'; SELECT * FROM BthPerson WHERE LastName = 'Test1'; SELECT * FROM InfoPerson WHERE LastName = 'Test1'; -- Так же данные возможно обновлять и в таблице UPDATE InfoPerson SET EmailAddress = 'testmail2@mail.ru' WHERE LastName='Test1'; SELECT * FROM BthPerson WHERE LastName='Test1'; SELECT * FROM InfoPerson WHERE LastName='Test1'; -----------------------ИЗМЕНЕНИЕ ПРЕДСТАВЛЕНИЙ-------------- SELECT * FROM BthPerson; ALTER VIEW BthPerson -- Изменение представления. AS SELECT FirstName, LastName, BirthDate, EmailAddress , AddressLine1 FROM InfoPerson; GO SELECT * FROM BthPerson; ----------------------- УДАЛЕНИЕ ПРЕДСТАВЛЕНИЙ --------------- DROP VIEW BthPerson; -- Представления больше нет. SELECT * FROM BthPerson WHERE LastName = 'Test1'; -- Данные которые добавлялись через представление остаются в таблице. SELECT * FROM InfoPerson WHERE LastName = 'Test1'; |
Представления — это виртуальные таблицы. Они не содержат данных, вместо данных представления содержат запросы, посредством которых данные выбираются в случае необходимости. Представления обеспечивают должный уровень инкапсуляции SQL- операторов SELECT и могут быть использованы для упрощения манипулирования данными, а также для переформатирования данных и ограничения доступа к ним.