Учебники

SQL — Использование представлений

Представление — это не что иное, как оператор SQL, который хранится в базе данных со связанным именем. Представление на самом деле представляет собой композицию таблицы в форме предопределенного запроса SQL.

Представление может содержать все строки таблицы или выбирать строки из таблицы. Представление может быть создано из одной или нескольких таблиц, которые зависят от написанного SQL-запроса для создания представления.

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

  • Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.

  • Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть и (иногда) изменять именно то, что ему нужно, и не более.

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

Структурируйте данные так, чтобы пользователи или классы пользователей находили естественные или интуитивно понятные.

Ограничьте доступ к данным таким образом, чтобы пользователь мог видеть и (иногда) изменять именно то, что ему нужно, и не более.

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

Создание видов

Представления базы данных создаются с помощью оператора CREATE VIEW . Представления могут быть созданы из одной таблицы, нескольких таблиц или другого представления.

Чтобы создать представление, пользователь должен иметь соответствующие системные привилегии в соответствии с конкретной реализацией.

Основной синтаксис CREATE VIEW следующий:

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

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

пример

Рассмотрим таблицу CUSTOMERS, имеющую следующие записи:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Ниже приведен пример создания представления из таблицы CUSTOMERS. Это представление будет использоваться для указания имени и возраста клиента из таблицы CUSTOMERS.

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

Теперь вы можете запросить CUSTOMERS_VIEW аналогично запросу реальной таблицы. Ниже приведен пример для того же.

SQL > SELECT * FROM CUSTOMERS_VIEW;

Это дало бы следующий результат.

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  24 |
+----------+-----+

С опцией проверки

Параметр WITH CHECK является параметром оператора CREATE VIEW. Целью ВАРИАНТА WITH CHECK является обеспечение того, чтобы все UPDATE и INSERT удовлетворяли условию (ам) в определении представления.

Если они не удовлетворяют условию (ам), UPDATE или INSERT возвращает ошибку.

В следующем блоке кода приведен пример создания того же представления CUSTOMERS_VIEW с опцией WITH CHECK.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

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

Обновление представления

Представление может быть обновлено при определенных условиях, которые приведены ниже —

  • Предложение SELECT не может содержать ключевое слово DISTINCT.

  • Предложение SELECT может не содержать итоговых функций.

  • Предложение SELECT может не содержать набор функций.

  • Предложение SELECT не может содержать операторы множеств.

  • Предложение SELECT не может содержать предложение ORDER BY.

  • Предложение FROM не может содержать несколько таблиц.

  • Предложение WHERE может не содержать подзапросов.

  • Запрос не может содержать GROUP BY или HAVING.

  • Рассчитанные столбцы могут не обновляться.

  • Все столбцы NOT NULL из базовой таблицы должны быть включены в представление, чтобы выполнялся запрос INSERT.

Предложение SELECT не может содержать ключевое слово DISTINCT.

Предложение SELECT может не содержать итоговых функций.

Предложение SELECT может не содержать набор функций.

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

Предложение SELECT не может содержать предложение ORDER BY.

Предложение FROM не может содержать несколько таблиц.

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

Запрос не может содержать GROUP BY или HAVING.

Рассчитанные столбцы могут не обновляться.

Все столбцы NOT NULL из базовой таблицы должны быть включены в представление, чтобы выполнялся запрос INSERT.

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

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Вставка строк в представление

Ряды данных могут быть вставлены в представление. Те же правила, которые применяются к команде UPDATE, также применимы к команде INSERT.

Здесь мы не можем вставить строки в CUSTOMERS_VIEW, потому что мы не включили все столбцы NOT NULL в это представление, иначе вы можете вставить строки в представление аналогично тому, как вы вставляете их в таблицу.

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

Ряды данных могут быть удалены из представления. Те же правила, которые применяются к командам UPDATE и INSERT, применяются к команде DELETE.

Ниже приведен пример удаления записи, имеющей AGE = 22.

SQL > DELETE FROM CUSTOMERS_VIEW
   WHERE age = 22;

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Отбрасывание просмотров

Очевидно, что там, где у вас есть представление, вам нужен способ отбросить представление, если оно больше не требуется. Синтаксис очень прост и приведен ниже —

DROP VIEW view_name;

Ниже приведен пример удаления CUSTOMERS_VIEW из таблицы CUSTOMERS.