Вітаю всіх відвідувачів сайту info-comp.ru! сьогодні ми з вами поговоримо про такі об’єкти microsoft sql server, як “уявлення”, ви дізнаєтеся, що це за об’єкти, для чого вони потрібні, а також як створювати, змінювати і видаляти уявлення на мові t-sql.

Подання (view) в microsoft sql server

представлення (view) – це об’єкт бази даних microsoft sql server, який зберігає в собі запит select і в разі звернення до даного об’єкту буде повернуто результуючий набір даних, який формує запит, зазначений у визначенні подання.

Іншими словами, це віртуальна (логічна) таблиця, вона не містить в собі даних, але до неї можна звертатися як до звичайної таблиці, і вона буде повертати вам дані. Зазвичай такий об’єкт називають «вьюха».

Для чого потрібні подання

Якщо досить часто в своїх sql запитах ви використовуєте однотипні вкладені запити, які повертають табличні дані, тобто є похідними таблицями, то для зручності і скорочення коду ви можете зберегти такі вкладені запити у вигляді подання. І потім, де вам потрібно використовувати саме той набір даних, який ви вказали в запиті, ви будете вказувати назву подання, точно так само як ми вказуємо назву таблиць, погодьтеся-це дуже зручно!

Таким чином, подання потрібні для:

  • спрощення і скорочення коду запиту;
  • підвищення читабельності коду запиту;
  • приховування складності реалізації завдання від користувача;
  • забезпечення ефективних шляхів доступу до даних;
  • забезпечення коректності похідних даних;
  • більш легкого управління. Щоб внести зміни в алгоритм, що формує дані, які повертає подання, не потрібно змінювати код скрізь, де використовується цей алгоритм, досить змінити код в одному визначенні подання.

Як ви розумієте, уявлення ми можемо використовувати не тільки для спрощення і скорочення коду sql запиту, а ще для підвищення безпеки, приховування складності реалізації алгоритмів і для забезпечення коректності похідних даних.

Які бувають подання

Подання бувають:

  • користувальницькі – це ті, які ми самі створюємо;
  • системні-це уявлення, які вже є в sql сервері. Вони повертають нам системну інформацію.

Робота з представленнями на t-sql

Вихідні дані

Спочатку нам необхідно створити тестові дані для наших прикладів.

Припустимо, у нас буде таблиця goods, яка зберігає якусь інформацію про товари, і таблиця categories, яка зберігає дані про категорії товару.

–створення таблиці create table goods (productid int identity (1,1) not null, category int not null, productname varchar (100) not null, price money null,); –додавання даних в таблицю insert into goods(category, productname, price) values (1, ‘клавіатура’, 30), (1, ‘монітор’, 100), (2, ‘смартфон’, 200); –створення таблиці з категоріями create table categories ( categoryid int identity(1,1) not null, categoryname varchar(100) not null ); –додавання даних в таблицю з категоріями insert into categories values (‘комплектуючі комп’ютера’), (‘мобільні пристрої’); select * from goods; select * from categories;

примітка! всім тим, хто тільки починає своє знайомство з мовою sql, рекомендую прочитати книгу «sql код» – це самовчитель з мови sql для початківців програмістів. У ній дуже детально розглянуті основні конструкції мови.

Створення уявлень

Уявімо, що нам постійно потрібно знати, скільки товарів в тій чи іншій категорії, але писати кожен раз sql запит на отримання таких даних нам не хочеться і це не дуже зручно. Тому ми прийняли рішення зберегти запит на отримання таких даних у вигляді подання і, коли нам буде потрібно дізнатися кількість товарів в категорії, ми просто будемо звертатися до цього подання.

Створюється подання за допомогою інструкції create view .

Для вирішення нашого завдання ми можемо створити наступне подання.

Після інструкції create view ми вказали назву подання, потім ми вказали ключове слово as і тільки після цього ми написали запит, результуючий набір якого і буде містити наше уявлення.

примітка! у поданні не можна використовувати секцію order by, тобто сортування, в разі необхідності, відсортувати дані ви можете, коли будете звертатися до цього подання. Використання order by можливо, тільки якщо вказано оператор top.

Тепер, для того щоб отримати дані про кількість товарів в категорії, ми можемо звернутися до цього подання, наприклад, як до звичайної таблиці.

select * from countproducts;

Зміна уявлень

А зараз давайте припустимо, що нам потрібно, щоб це уявлення повертало ще й ідентифікатор категорії, якщо ви звернули увагу, то в попередньому прикладі таких даних немає. Для цього використовуємо інструкцію alter view , яка передбачає зміну подання.

В даному випадку ми написали інструкцію alter view, яка говорить sql серверу, що ми хочемо змінити існуючий об’єкт, потім вказали назву подання, щоб сервер міг визначити, яке саме подання ми хочемо змінити, після ключового слова as ми вказали нове визначення подання, тобто змінений запит select.

Видалення уявлень

Якщо вам подання більше не потрібно, тобто. Ви їм більше не будете користуватися, і воно не використовується в інших уявленнях, функціях або процедурах, іншими словами, на нього ніхто не посилається, то ви його можете видалити, це робиться за допомогою інструкції drop view .

drop view countproducts;

Тепер даного уявлення більше немає, і до нього ви більше звернутися не зможете.

Оновлювані подання в microsoft sql server

Крім того, що до подання можна звертатися і витягувати дані, подання дозволяє ще й змінювати дані базової таблиці, такі подання називаються «оновлювані подання». Однак для цього необхідно виконання наступних умов:

  • будь-яка зміна (update, insert або delete) повинна стосуватися стовпців тільки однієї базової таблиці;
  • стовпці, дані яких ви хочете змінити, повинні прямо посилатися на стовпці таблиці, іншими словами, не можна внести зміни в стовпці, які були сформовані в поданні, наприклад, агрегатної функцією або іншими обчисленнями.

Припустимо, у нас є уявлення, яке повертає список товарів. Для прикладу ми його назвали goodsupdate.

І в даному випадку ми можемо змінити дані, що зберігаються в таблиці goods, через подання, не звертаючись до цієї таблиці безпосередньо.

Ми бачимо, що дані успішно змінені.