- •Загальні відомості
- •Поняття відношень
- •Реляційна база даних „успішність”
- •Операції реляційної алгебри
- •Теоретико-множинні операції ра
- •Операції, властиві тільки ра
- •Реляційне числення
- •Квантор існування. З'єднання
- •Квантор загальності. Ділення
- •Типи даних
- •Створення простого запиту в sql
- •Групування даних
- •Багатотабличні запити
- •Природне з'єднання
- •Тета-з'єднання
- •Зовнішнє з'єднання
- •Використання оператора join в інструкції from
- •Операції реляційної алгебри в sql-92
- •Підзапити у sql
- •Способи включення підзапиту в запит
- •Особливості синтаксису включення підзапиту
- •Підзапит в цільовому списку
- •Підзапити в інструкції where. Некорельований підзапит
- •Корельовані підзапити
- •Квантор існування в підзапитах
- •Оператори all, any, some
- •Оператори модицікації даних
- •Мова опису даних
- •Представлення
- •Висновок
- •Лабораторний практикум Лабораторна робота № 1
- •Лабораторна робота № 2
- •Контрольні завдання по sql
- •Бібліографічний список
Представлення
Представлення (View) - це запит на вибірку, який користувач сприймає як деяке віртуальне відношення. Завдання представлень входить в опис схеми РБД. Представлення дозволяють приховати несуттєві або небажані деталі для різних користувачів, модифікувати реальні структури даних в зручному для деякої програми вигляді, розмежовувати права доступу до даних.
Оператор визначення уявлення має наступний вигляд:
Синтаксис:
CREATE VIEW <імя_представлення> [<список_ стовпців>] AS <SQL-запит>
Якщо список стовпців не зазначений, то в представлення увійдуть всі стовпці із запиту, на основі яких вона створена, з відповідними іменами. У SQL-запиті можна використовувати обчислювані поля, угруповання, підзапит, однак при цьому слід враховувати обмеження, що відображають природу представлень. Після створення представлення його можна використовувати в запитах нарівні з таблицями. На основі представлень можна створювати нові представлення.
Як приклад створимо представлення, яке приховує інформацію про адреси студентів (таке представлення прийнято називати вертикальним).
CREATE VIEW NEW _СТУДЕНТ ID, ПІБ, ID_Cons
AS SELECT ID_Stud, СПрізв, Консультант FROM СТУДЕНТ
При роботі з представленнямитреба весь час пам'ятати про їх віртуальноу природу. СУБД не створює ніякої спеціальної структури для зберігання данихпредставлення, а просто виконує запит, зазначений уAS, кожен раз, коли зустрічає ім'я представлення. З одного боку, це зручно. Наприклад, можна постійно підтримувати «таблицю» з середніми балами кожного студента, замість зберігання та періодичного перерахунку цих даних. Однак, з іншого боку, синтаксично правильний запит зпредставленнямможе привести до помилки. Розглянемо наступний приклад.
Нехай визначено представлення, що містить середній бал кожного студента:
CREATE VIEW СЕРЕДНІЙ_БАЛ (СНом, Студент, СерБал)
AS SELECT ID_Stud, СПрізв, AVG (Оцінка)
FROM СТУДЕНТ, УСПІШНІСТЬ GROUP BY ID_Stud, СПрізв
Тепер знайдемо студентів, чий середній бал більше 4.5:
SELECT СНом, Студент, СерБал FROM СРЕДНІЙ_БАЛЛ
WHERE СерБал > 4.5
Цей правильний, на перший погляд, запит буде відкинутий, оскільки насправді сформований невірний запит з умовою на агрегатну функцію в реченні WHERE:SELECT ID_Stud, СПрізв, AVG (Оцінка)
FROM СТУДЕНТ, УСПІШНІСТЬ
WHERE AVG (Оцінка)> 4.5
GROUP BY ID_Stud, СПрізв
Другий випадок, де треба з обережністю використовувати представлення - це модифікація даних. Ось обмеження стандарту на операції модифікації для представлень.
• У запиті, на основі якого створено представлення, повинно бути відсутнім слово DISTINCT.
• У реченні FROM запиту, на основі якого створено уявлення, повинна бути тільки одна таблиця.
• Кожне ім'я в списку стовпців, що повертаються, має бути посиланням на простий стовпець: у списку не повинні зустрічатися обчислювані стовпці, вирази, агрегатні функції.
• У пропозиції WHERE не повинен стояти вкладений запит.
• У запиті не повинно міститися пропозицій GROUP BY і HAVING. Крім того, слід пам'ятати ряд обмежень при використанні групових представлень (заснованих на запитах з угрупуваннями).
• Не можна використовувати вбудовані функції.
• Не можна використовувати оператори JOIN, GROUP BY і HAVING.
• Підзапит не може посилатися на групове представлення.