Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция CREATE/ALTER VIEW общие правила

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

CREATE VIEW employees AS
SELECT *
FROM employee_tbl;

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

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

  • Если инструкция SELECT содержит вычисляемые столбцы, например (salary * 1.04).
  • Если инструкция SELECT содержит полностью квалифицированные имена столбцов, например pubs.scott.employee.
  • Если инструкция SELECT содержит несколько столбцов с одинаковыми именами (хотя и из разных схем или с разными префиксами базы данных).

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

С использованием списка столбцов

CREATE VIEW title_and_authors (title, author_order, author, price, avg_monthly_sales, publisher) AS
SELECT
t.title,
ta.au_ord,
a.au_lname,
t.price,
(t, ytd_sales/12),
t.pub_id
FROM authors AS a
JOIN titleauthor AS ta ON a.au_id=ta.au_id
JOIN titles AS t ON t.title_id=ta.title_id
WHERE t.advance>0;

С использованием предложения AS для каждого столбца

CREATE VIEW title_and_authors AS
SELECT
t.title AS title,
ta.au_ord AS author_order,
a.au_lname AS author,
t.price AS price,
(t.ytd_sales/12) AS avg_monthly_sales,
t.pub_id AS publisher
FROM authors AS a
JOIN titleauthor AS ta ON a.au_id=ta.au_id
JOIN titles AS t ON t.title_id=ta.title_id
WHERE t. advance>0;

Вы также, можете изменять заголовки столбцов, используя список столбцов. В следующем примере мы изменим название avg_monthly_sales на avg_sales. Заметьте, что данный код заменяет имена столбцов, заданные по умолчанию в предложениях AS.

CREATE VIEW title_and_authors (title, authorjorder, author, price, avg_sales, publisher) AS
SELECT
t.title AS title,
ta.au_ord AS author_order,
a.au_lname AS author,
t.price AS price,
(t.ytd_sales/12) AS avg_monthly_sales,
t.pub_id AS publisher
FROM authors AS a
JOIN titleauthor AS ta ON a.au_id=ta.au_id
JOIN titles AS t ON t.title_id=ta.titlejd
WHERE t.advance>0;

Представление стандарта ANSI может обновлять содержимое своей основной таблицы (таблиц), если оно удовлетворяет следующим условиям.

  • В представлении нет операторов UNION, EXCEPT или INTERSECT.
  • Создающая представление инструкция SELECT не содержит предложений GROUP BY или НАVING.
  • Создающая представление инструкция SELECT не содержит ссылок на псевдостолбцы, не отвечающие стандарту ANSI, например ROWNUM или ROWGUIDCOL.
  • Создающая представление инструкция SELECT не содержит предложения DISTINCT.
  • Представление не является материализованным.

В следующем примере показано представление с именем california_authors, с помощью которого можно вносить изменения только в записи об авторах из штата Калифорния.

CREATE VIEW california_authors AS
SELECT
au_lname,
au_fname,
city,
state
FROM authors
WHERE state=’CA’
WITH LOCAL CHECK OPTION;

В данном представлении разрешено использование инструкций INSERT, DELETE и UPDATE применительно к базовой таблице и предложение WITH…CHECK гарантирует, что все вставляемые, обновляемые или удаляемые записи будут содержать значение ‘СА’ в столбце state.

Наиболее важное правило, которое нужно запомнить при обновлении базовой таблицы с помощью представления, состоит в том, что все столбцы таблицы, имеющие ограничение NOT NULL, при записи нового или измененного значения должны получать непустое значение. Это можно реализовать явно, вставляя или вводя непустое значение в столбец или используя значение, заданное по умолчанию. Кроме того, представления не должны нарушать ограничений, имеющихся в основной таблице. То есть значения, вставляемые или обновляемые в основной таблице, должны соответствовать всем ограничениям — уникальным индексам, первичным ключам, проверочным ограничениям и тому подобное.

Источник