Oracle view что это
Для пользователя представления выглядят как таблицы: двумерная структура из строк и столбцов, к которой пользователь может писать SELECT и DML запросы. Программист знает правду: представление это всего лишь команда SELECT с именем. Любой SELECT запрос возвращает двумерный набор данных. Когда SELECT запрос сохранен как представление, то когда бы пользователь не читал или обновлял данные в представлении (думая что это таблица) запрос выполняется и результат представляется пользователя как будет это таблица. Команда SELECT на которой базируется представление может быть чем угодно. Объединением таблиц, результатом после аггрегации, сортировки. Абсолютно любой валидный запрос может быть основой для представления.
Views share the same namespace as tables: anywhere that a table name can be used, a view name is also syntactically correct.
Зачем нужны представления
Возможными причинами могут быть: безопасность, упрощение пользовательских запросов, предотвращение ошибок, улучшение производительности и преобразование данных в более понятный вид. Таблица и название столбцов обычно имеют длинные и неонпятные названия. Представление и его столбцы могут быть более понятными.
Представления для безопасности
Иногда пользователь должен видеть только определённые строки или столбцы таблицы. Доступно несколько способов для достижения этой цели, но создание представления обычно наиболее лёгкий. К примеру таблица HR.EMPLOYEES содержит личную информацию которая не должна быть видна никому кроме отдела персонала. Но финансовый отдел должен видеть информацию о затратах. Такое представление может убрать личную информацию
create view hr.emp_fin as select hire_date,job_id,salary,commission_pct,department_id from hr.employees;
Обратите внимание на название схемы для таблицы источника и схемы представления: представления это объекты схемы и могут получать данные из таблицы той же схемы, или другой. Если схема не указана явно используется текущая схема.
Финансовый отдел может получить доступ к представлению но не к таблице и тогда сотрудники смогут выполнять запросы вида
select * from emp_fin where department_id=50;
Будет доступно всего пять столбцов вместо всех столбцов таблицы EMPLOYEES. Представление можно объединять с другими таблицами или использовать функции аггрегация как будто это таблица
select department_name, sum(salary) from departments natural join emp_fin group by department_name;
Хорошо продуманный набор представлений может реализовывать всю систему безопасности в БД, предоставляя пользователям доступ к данным которые им необходимы и сокрывая всё остальное.
Представления для упрощения запросов
Для пользователя будет гораздо проще выбирать данные если сложная работа (такая как объединения таблиц или группировка данных с аггрегацией) сделано за них в коде запроса который определяет представление. В предыдущем примере сотрудникам финансового отдела необходимо было объединять представление EMP_FIN с таблицей DEPARTMENTS и суммировать зарплату по департаменту. Но можно создать новое представление
create view dept_sal as select d.department_name, sum(e.salary) from departments d left outer join employees e on d.department_id=e.department_id group by department_name order by department_name;
И тогда сотрудники смогут писать запросы к представлению DEPT_SAL без необходимости знать ою объединениях или о том как сортировать результат
select * from dept_sal;
В частности, пользователям даже не надо знать как убедиться что все департаменты отображены, даже в которых нет сотрудников. Представление созданное в примере выше отобразит все департаменты.
Представления для предотвращения ошибок
Пользователи всегда допускают ошибки, но хорошо-спроектированные представления могут предотвратить некоторые из них, возникающие из-за отсустствия понимания как надо понимать данные. В прерыдущем примере мы посмотрели пример когда представление отображает все департаменты, даже в которых нет сотрудников.
Представление помогает представить данные в недвусмысленном виде. Например многие приложения в реальности не удаляют данные. Рассмотрим таблицу
Столбец ACTIVE это флаг показывающий нанят ли сотрудник в текущий момент и при добавлении строки будет выставлен в ‘Y’. Когда пользователь, через пользовательский интерфейс “удалит” сотрудника, на самом деле выполнится запрос который обновит значение ACTIVE в ‘N’. Если пользователь не знает о структуре таблицы и такой особенности то результат “удаления” будет не очень понятен. Поэтому лучше дать пользователю доступ к представлению
Запросы к такому представлению не отображат “удалённых” сотрудников.
Представления чтобы сделать данные понятными
Структуры базы данных это нормализованные таблицы. Нет смысла ожидать от пользователя понимания нормализованных данных. Таблицы связываются между собой первчиными ключами и вторичными ключами, но ключи ограничений обычно не видны пользователю, значения ключей генерируются автоматически из сиквенсов. Пользователю нет нужды знать как объединять родительские таблицы с дочерними, он хочет видеть данные в окнах приложения или отчёты содержащие понятную ему информацию. Для этого можно использовать представления.
Помимо удобства предоставления данных пользователю, использование представлений добавляет уровень абстракции между объектами пользователя и объектами БД что может быть полезно при разработке и поддержке. Возможно изменить структуру данных без переписывания приложения. Если изменились таблицы достаточно просто изменить определение таблицы без изменений кода SQL или PL/SQL. Также представления можно использовать для добавления приложению совместимости между разными базами данных.
Представления для производительности
Команда SELECT являющаяся основой для представления может быть оптимизирована программистами, и пользователям не надо переживать об оптимизации кода. Существует много способов получения одного и того же результата, но некоторые способы гораздо медленнее чем другие. Например при объединении двух таблиц обычно происходи выбор между nested loop объединением и hash join объединением. Nested loop использует индекса для поиска конкретной строки, hash join считывает всю таблицу в память. Выбор между методами основывается на данных и необходимых ресурсах.
Теоретически кто-то всегда полагается на результат работы оптимизатора Oracle, но иногда оптимизатор совершает ошибки. Если программист понимает какой метод лучше использовать в конкретном случае то можно дать необходимые иснтрукции оптимизатору. Например этот запрос заставит использовать hash join
create view dept_emp as select /*+USE_HASH (employees departments)*/ department_name, last_name from departments natural join employees;
Когда бы пользователь не выполнил запрос к представлению DEPT_EMP объединение будет осуществляться поиском совпадений в подсоединяемой таблице в памяти (hash join). Пользователям не нужно знать как заставить базу использовать метод объединения. Мы тоже не будем детально обсуждать оптимизацию но необходимо знать принцип оптимизации при помощи представлений.
Простые и сложные представления
С практической точки зрения, классификация между простыми и сложными представлениями основана на возможности выполнять DML команды к представлению: простые представления могут (обычно) выполнять DML запросы; сложные – не могут. Определим какие представления простые, а какие сложные
- Простые представления используют данные из одной таблицы, без использваония функций и аггрегации
- Сложные представления могут использовать объединениям, функции и аггрегацию.
Согласно этим определениями первое и третье представления из прошлой подглавы являютяс простыми, а второе и четвертое сложные.
Команды INSERT, UPDATE или DELETE нельзя выполнить к сложным представлениям. Соотношение строк в представлении к исходной таблице неможет всегда быть один-к-одному, что необходимо для DML операций. Обычно возможно выполнять DML команды к простым представлениям, но не всегда. Например если представление не включает в себя столбец с ограничением обязательности, тогда INSERT к представление не выполнится успешно (выполнится если у столбца есть значение по умолчанию). Выполнение такого запроса вернет странную ошибку так как ошибка ссылается на таблицу и столбец которого нет в запросе, как показано на примере в рисунке 7-5.
Превое представление RNAME_V на рисунке удовлетворяет определению простого представления, однаго команда INSERT не может быть выполена так как отсутствует значение для обязательного поля. Второе представление RUPPERNAME_V – сложное представление так как основано на результате выполнения функции. Это делает невозможным вставку значений, так как нет способа БД узнать что действительно необходимо вставить в таблицу. Однако команда DELETE может быть выполнена, так как нет зависимости от использования функции.
Создание, изменение и удаление представлений
Синтаксис создания представления
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW
[WITH CHECK OPTION [CONSTRAINT constraintname]]
[WITH READ ONLY [CONSTRAINT constraintname]] ;
Помним что представление это объект схемы. Нет причин не создавать представления владельцем которых является один пользователь, таблицы-основания которых принадлежат другому пользователю. По умолчанию представление будет создано в текущей схеме. Дополнительные директивы которые ещё не использовались в примерах выше это
OR REPLACE – если представление уже существует оно будет удалено перед созданием нового
FORCE или NOFORCE – Использование FORCE приведёт к созданию представления даже если базовые таблицы не существуют. NOFORCE значение по умолчанию и если таблицы не существуют команды выполняется с ошибкой
WITH CHECK OPTION – эта директива влияет на DML команды. Если подзапрос включает условие WHERE, тогда эта директива предотвратит возможность вставки стро которые не видно в представлении, или совершать обновления данных которое приведёт к пропаже данных из представления. По умолчанию эта директива отключена что может приводить к неожидаемым результатам выполнения запросов
WITH READ ONLY – отключения возможности использование DML команд к представлению
Набор псевдонимов позволяет назначать новые имена столбцам представления. Если псевдоним не указан, столбец будет иметь такое же имя как в таблице или будет использоваться псевдоним из подзапроса.
Команда ALTER VIEW в основном используется для компиляции представления. Представление должно быть успешно скомпилированно перед использованием. Когда преставление создаётся, Oracle проверяет что все столбцы и таблицы существуют. Если они не существуют компиляция происходит неудачно и представление не будет создано – но будет создано если вы используете директиву FORCE. В этом случае представление создастся, но будет недоступно для использования пока не будут созданы таблицы и столбцы используемые в подзапросе и не будет заново скомпилировано. Когда выполняется запрос к нескомпилированному представлению – Oracle попробует скомпилировать его автоматически. Если компиляция будет успешна (вы устранили проблемы) – то пользователи даже не узнает что что-то не работало – единственное отличие будет в том что запрос будет выполняться чуть дольше. Вам следует самим вручную компилировать представления чтобы убедиться что компиляция прошла успешно, вместо того чтобы позволять пользователям обнаружить ошибку.
Невозможно изменить определения столбцов после создания представления так как это делается для таблицы. Представление должно быть удалено и затем создано новое. Синтаксис команды DROP
DROP VIEW [schema.]viewname ;
Использование директивы OR REPLACE в команде CREATE VIEW приведёт к автоматическому удаление представления (если оно существует) перед созданием.
В комментариях Хабра упоминались вопросы по использованию представлений. Данный топик является обзором представлений, появившихся в MySQL версии 5.0. В нем рассмотрены вопросы создания, преимущества и ограничения представлений.
Что такое представление?
Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
Представления могут основываться как на таблицах, так и на других представлениях, т.е. могут быть вложенными (до 32 уровней вложенности).
Преимущества использования представлений:
- Дает возможность гибкой настройки прав доступа к данным за счет того, что права даются не на таблицу, а на представление. Это очень удобно в случае если пользователю нужно дать права на отдельные строки таблицы или возможность получения не самих данных, а результата каких-то действий над ними.
- Позволяет разделить логику хранения данных и программного обеспечения. Можно менять структуру данных, не затрагивая программный код, нужно лишь создать представления, аналогичные таблицам, к которым раньше обращались приложения. Это очень удобно когда нет возможности изменить программный код или к одной базе данных обращаются несколько приложений с различными требованиями к структуре данных.
- Удобство в использовании за счет автоматического выполнения таких действий как доступ к определенной части строк и/или столбцов, получение данных из нескольких таблиц и их преобразование с помощью различных функций.
Ограничения представлений в MySQL
- нельзя повесить триггер на представление,
- нельзя сделать представление на основе временных таблиц; нельзя сделать временное представление;
- в определении представления нельзя использовать подзапрос в части FROM,
- в определении представления нельзя использовать системные и пользовательские переменные; внутри хранимых процедур нельзя в определении представления использовать локальные переменные или параметры процедуры,
- в определении представления нельзя использовать параметры подготовленных выражений (PREPARE),
- таблицы и представления, присутствующие в определении представления должны существовать.
- только представления, удовлетворяющие ряду требований, допускают запросы типа UPDATE, DELETE и INSERT.
Создание представлений
Для создания представления используется оператор CREATE VIEW, имеющий следующий синтаксис:
CREATE [ OR REPLACE]
[ALGORITHM = ]
VIEW view_name [(column_list)]
AS select_statement
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
* This source code was highlighted with Source Code Highlighter .
view_name — имя создаваемого представления. select_statement — оператор SELECT, выбирающий данные из таблиц и/или других представлений, которые будут содержаться в представлении
- OR REPLACE — при использовании данной конструкции в случае существования представления с таким именем старое будет удалено, а новое создано. В противном случае возникнет ошибка, информирующая о сществовании представления с таким именем и новое представление создано не будет. Следует отметить одну особенность — имена таблиц и представлений в рамках одной базы данных должны быть уникальны, т.е. нельзя создать представление с именем уже существующей таблицы. Однако конструкция OR REPLACE действует только на представления и замещать таблицу не будет.
- ALGORITM — определяет алгоритм, используемый при обращении к представлению (подробнее речь об этом пойдет ниже).
- column_list — задает имена полей представления.
- WITH CHECK OPTION — при использовании данной конструкции все добавляемые или изменяемые строки будут проверяться на соответствие определению представления. В случае несоответствия данное изменение не будет выполнено. Обратите внимание, что при указании данной конструкции для необновляемого представления возникнет ошибка и представление не будет создано. (подробнее речь об этом пойдет ниже).
CREATE VIEW v AS SELECT a.id, b.id FROM a,b;
* This source code was highlighted with Source Code Highlighter .
Для избежания такой ситуации нужно явно указывать имена полей представленияCREATE VIEW v (a_id, b_id) AS SELECT a.id, b.id FROM a,b;
* This source code was highlighted with Source Code Highlighter .
Того же результата можно добиться, используя синонимы (алиасы) для названий колонок:CREATE VIEW v AS SELECT a.id a_id, b.id b_id FROM a,b;
* This source code was highlighted with Source Code Highlighter .
CREATE VIEW v AS SELECT group_concat( DISTINCT column_name oreder BY column_name separator '+' ) FROM table_name;
* This source code was highlighted with Source Code Highlighter .
- Если в обоих операторах встречается условие WHERE, то оба этих условия будут выполнены как если бы они были объединены оператором AND.
- Если в определении представления есть конструкция ORDER BY, то она будет работать только в случае отсутствия во внешнем операторе SELECT, обращающемся к представлению, собственного условия сортировки. При наличии конструкции ORDER BY во внешнем операторе сортировка, имеющаяся в определении представления, будет проигнорирована.
- При наличии в обоих операторах модификаторов, влияющих на механизм блокировки, таких как HIGH_PRIORITY, результат их совместного действия неопределен. Для избежания неопределенности рекомендуется в определении представления не использовать подобные модификаторы.
Алгоритмы представлений
Существует два алгоритма, используемых MySQL при обращении к представлению: MERGE и TEMPTABLE.
В случае алгоритма MERGE, MySQL при обращении к представлению добавляет в использующийся оператор соответствующие части из определения представления и выполняет получившийся оператор.
В случае алгоритма TEMPTABLE, MySQL заносит содержимое представления во временную таблицу, над которой затем выполняется оператор обращенный к представлению.
Обратите внимание: в случае использования этого алгоритма представление не может быть обновляемым (см. далее).
При создании представления есть возможность явно указать используемый алгоритм с помощью необязательной конструкции [ALGORITHM = ]
UNDEFINED означает, что MySQL сам выбирает какой алгоритм использовать при обращении к представлению. Это значение по умолчанию, если данная конструкция отсутствует.
Использование алгоритма MERGE требует соответствия 1 к 1 между строками таблицы и основанного на ней представления.
CREATE VIEW v AS SELECT subject, num_views/num_replies AS param FROM topics WHERE num_replies>0;
* This source code was highlighted with Source Code Highlighter .
Для данного представления каждая строка соответствует единственной строке из таблицы topics, т.е. может быть использован алгоритм MERGE. Рассмотрим следующее обращение к нашему представлению:
SELECT subject, param FROM v WHERE param>1000;
* This source code was highlighted with Source Code Highlighter .
В случае MERGE алгоритма MySQL включает определение представления в использующийся оператор SELECT: заменяет имя представления на имя таблицы, заменяет список полей на определения полей представления и добавляет условие в части WHERE с помощью оператора AND. Итоговый оператор, выполняемый затем MySQL, выглядит следующим образом:
SELECT subject, num_views/num_replies AS param FROM topics WHERE num_replies>0 AND num_views/num_replies>1000;
* This source code was highlighted with Source Code Highlighter .
Если в определении представления используются групповые функции (count, max, avg, group_concat и т.д.), подзапросы в части перечисления полей или конструкции DISTINCT, GROUP BY, то не выполняется требуемое алгоритмом MERGE соответствие 1 к 1 между строками таблицы и основанного на ней представления.
Пусть наше представление выбирает количество тем для каждого форума:
CREATE VIEW v AS SELECT forum_id, count (*) AS num FROM topics GROUP BY forum_id;
* This source code was highlighted with Source Code Highlighter .
* This source code was highlighted with Source Code Highlighter .
Если бы использовался алгоритм MERGE, то этот запрос был бы преобразован следующим образом:SELECT MAX ( count (*)) FROM topics GROUP BY forum_id;
* This source code was highlighted with Source Code Highlighter .
Выполнение этого запроса приводит к ошибке «ERROR 1111 (HY000): Invalid USE of GROUP function», так как используется вложенность групповых функций.
В этом случае MySQL использует алгоритм TEMPTABLE, т.е. заносит содержимое представления во временную таблицу (данный процесс иногда называют «материализацией представления»), а затем вычисляет MAX() используя данные временной таблицы:
CREATE TEMPORARY TABLE tmp_table SELECT forum_id, count (*) AS num FROM topics GROUP BY forum_id;
SELECT MAX (num) FROM tmp_table;
DROP TABLE tpm_table;
* This source code was highlighted with Source Code Highlighter .
- В случае UNDEFINED MySQL пытается использовать MERGE везде где это возможно, так как он более эффективен чем TEMPTABLE и, в отличие от него, не делает представление не обновляемым.
- Если вы явно указываете MERGE, а определение представления содержит конструкции запрещающие его использование, то MySQL выдаст предупреждение и установит значение UNDEFIND.
Обновляемость представлений
- Соответствие 1 к 1 между строками представления и таблиц, на которых основано представление, т.е. каждой строке представления должно соответствовать по одной строке в таблицах-источниках.
- Поля представления должны быть простым перечислением полей таблиц, а не выражениеями col1/col2 или col1+2.
Обновляемое представление может допускать добавление данных (INSERT), если все поля таблицы-источника, не присутствующие в представлении, имеют значения по умолчанию.
Обратите внимание: для представлений, основанных на нескольких таблицах, операция добавления данных (INSERT) работает только в случае если происходит добавление в единственную реальную таблицу. Удаление данных (DELETE) для таких представлений не поддерживается.
- Изменение данных (UPDATE) будет происходить только если строка с новыми значениями удовлетворяет условию WHERE в определении представления.
- Добавление данных (INSERT) будет происходить только если новая строка удовлетворяет условию WHERE в определении представления.
- Для LOCAL происходит проверка условия WHERE только в собственном определении представления.
- Для CASCADED происходит проверка для всех представлений на которых основанно данное представление. Значением по умолчанию является CASCADED.
punbb > CREATE OR REPLACE VIEW v AS
-> SELECT forum_name, `subject`, num_views FROM topics,forums f
-> WHERE forum_id=f.id AND num_views>2000 WITH CHECK OPTION ;
Query OK, 0 rows affected (0.03 sec)
punbb > UPDATE v SET num_views=2003 WHERE subject= 'test' ;
Query OK, 0 rows affected (0.03 sec)
Rows matched: 1 Changed: 0 WARNINGS: 0
punbb > SELECT subject, num_views FROM topics WHERE subject= 'test' ;
+---------+-----------+
| subject | num_views |
+---------+-----------+
| test | 2003 |
+---------+-----------+
1 rows IN SET (0.01 sec)
* This source code was highlighted with Source Code Highlighter .
Однако, если мы попробуем установить значение num_views меньше 2000, то новое значение не будет удовлетворять условию WHERE num_views>2000 в определении представления и обновления не произойдет.
punbb > UPDATE v SET num_views=1999 WHERE subject= 'test' ;
ERROR 1369 (HY000): CHECK OPTION failed 'punbb.v'
* This source code was highlighted with Source Code Highlighter .
Не все обновляемые представления позволяют добавление данных:
punbb > INSERT INTO v (subject,num_views) VALUES ( 'test1' ,4000);
ERROR 1369 (HY000): CHECK OPTION failed 'punbb.v'
* This source code was highlighted with Source Code Highlighter .
Причина в том, что значением по умолчанию колонки forum_id является 0, поэтому добавляемая строка не удовлетворяет условию WHERE forum_id=f.id в определении представления. Указать же явно значение forum_id мы не можем, так как такого поля нет в определении представления:
punbb > INSERT INTO v (forum_id,subject,num_views) VALUES (1, 'test1' ,4000);
ERROR 1054 (42S22): Unknown COLUMN 'forum_id' IN 'field list'
* This source code was highlighted with Source Code Highlighter .
punbb > INSERT INTO v (forum_name) VALUES ( 'TEST' );
Query OK, 1 row affected (0.00 sec)
* This source code was highlighted with Source Code Highlighter .
Таким образом, наше представление, основанное на двух таблицах, позволяет обновлять обе таблицы и добавлять данные только в одну из них.
Представление – это виртуальная таблица. В действительности представление – всего лишь результат выполнения оператора SELECT, который хранится в структуре памяти, напоминающей SQL таблицу, например, Oracle. Для тех, кто работает с представлением, манипулирование его данными ничем не отличается от манипулирования данными таблицы. В некоторых случаях пользователь может вводить данные в представление, как если бы оно было таблицей. Работая с представлением нужно помнить, что:
- Представления добавляют уровень защиты данных (например, можно создать представление для таблицы, где пользователю, выполняющему SELECT над представлением, видны только сведения о зарплате)
- Представления могут скрывать сложность данных, комбинируя нужную информацию из нескольких таблиц
- Представления могут скрывать настоящие имена столбцов, порой трудные для понимания, и показывать более простые имена.
Представление создается с помощью команды CREATE VIEW. После создания представления становятся частью схемы создавшего их пользователя. Переназначить их другому пользователю можно тогда, когда у него имеется системная привилегия CREATE ANY VIEW.
Синтаксис команды CREATE VIEW Oracle
Синтаксис команды Create View
Основные ключевые слова и параметры CREATE VIEW Oracle :
OR REPLACE, FORCE, NOFORCE, Sсhema, View, Alias, AS subquery, WITH CHECK OPTION, Constraint
Преимущество использования представления вместо базовой таблицы состоит в том, что оно обновляется автоматически при изменении формирующих его таблиц. Содержимое представления не фиксируется, а повторно вычисляется всякий раз, когда вы ссылаетесь на представление в команде.
Если команды обновления DML (INSERT, UPDATE, DELETE) можно применить к представлению, то говорят, что представление является обновляемым (updatable); в противном случае оно является только читаемым (read-only). Представление является обновляемым, если при его создании учитывались следующие критерии:
- представление должно включать первичный ключ таблицы
- не должно содержать полей, полученных в результате применения функций агрегирования
- не должно содержать DISTINCT, GROUP BY, HAVING в своем определении
- может быть определено на другом представлении, но это представление должно быть обновляемым
- не может содержать константы, строки или выражения (например, comm*100) в списке выбираемых выходных полей
SQL CREATE VIEW. Пример 1.
CREATE VIEW Oracle.
Простое представление, которое создается из данных одной таблицы:
CREATE VIEW London_view AS SELECT * FROM Salespeople WHERE city = ‘London’;
SQL CREATE VIEW. Пример 2.
CREATE VIEW Oracle.
При создании представления можно можно задать новые имена полей:
CREATE VIEW Rating_view(rating,number) AS SELECT rating, COUNT(*) FROM Customers GROUP BY rating;
SQL CREATE VIEW. Пример 3.
CREATE VIEW Oracle.
Представления могут получать информацию из любого количества базовых таблиц:
CREATE VIEW Nameorders AS SELECT onum, amt,a.snum, sname, cname FROM Orders a, Customers b, Salespeople C WHERE a.cnum = b.cnum AND a.snum = c.snum;
SQL CREATE VIEW. Пример 4.
CREATE VIEW Oracle.
При создании представлений можно использовать подзапросы, включая и связанные подзапросы:
CREATE VIEW Sales_view AS SELECT b.odate, a.snum, a.sname, FROM Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = (SELECT MAX(amt) FROMOrders c WHERE c.odate = b.odate);
SQL CREATE VIEW. Пример 5.
CREATE VIEW Oracle.
Oracle Views - это виртуальные таблицы, которые физически не существуют. Представления создаются на существующей таблице или таблицах. Они хранятся в словаре данных Oracle и не хранят никаких данных. Представления - это подстроки или подстолбцы таблицы или таблиц. Фактически, представления создаются по часто используемым запросам или сложным запросам или запросам объединения и т. Д., Так что каждый раз не следует извлекать данные из таблицы или таблиц непосредственно, результирующие данные могут быть извлечены из представления. Представления могут быть выполнены при вызове.
Представления создаются запросом, объединяющим одну или несколько таблиц.
СОЗДАТЬ ВИД в Oracle
Давайте рассмотрим создание View в Oracle с помощью нескольких примеров, упомянутых ниже:
Синтаксис для создания представления -
CREATE VIEW view name AS
SELECT column (, column ) FROM table
WHERE condition;
View name - указывает имя Oracle VIEW, которое пользователь хочет создать.
Визуальное представление представления оракула представлено на диаграмме ниже, так как на диаграмме ниже заштрихованная область красного цвета возвращается в результате запроса выбора Oracle и сохраняется в виде представления -
Рисунок: представление Oracle
Примеры запросов
Давайте возьмем пример для создания представления. Вот пример, мы создаем простое представление для одной таблицы.
Таблица поставщиков
Пример запроса создания представлений оракула
CREATE VIEW empview AS
SELECT *
FROM employees;
WHERE employees.manager_id = 100;
Выход:
Вид создан.0.21 секунд
Приведенный выше пример Oracle INNER JOIN вернет все строки из таблицы сотрудников и таблицы отделов, в которых значение _id сотрудника в таблице сотрудников и таблице отделов совпадает.
Давайте разберемся в представлении oracle подробно с помощью некоторых примеров запроса:
Здесь мы рассмотрим схему hr, которая является образцом схемы базы данных Oracle. Схема hr содержит таблицы COUNTRIES, EMPLOYEES, DEPARTMENTS, JOB_HISTORY, JOBS, LOCATIONS, REGIONS, в которых мы заинтересованы или нуждаемся в таблицах EMPLOYEES, DEPARTMENTS и LOCATIONS.
Описание этих таблиц:
Стол СОТРУДНИКОВ
Таблица ОТДЕЛОВ
Пример № 1
Создать вид на выбранные столбцы
Здесь мы создаем представление с именем сотрудника на основе таблицы сотрудника. Представление сотрудника, имеющее идентификатор сотрудника, полное имя сотрудника, которое представляет собой объединение имени и фамилии и сотрудника phone_number-
Код:
Выход:
Теперь мы можем проверить только что созданный Oracle VIEW, используя этот запрос -
Select * from employee view;
Выход:
Пример № 2
Создание оракула с псевдонимом столбцов
Код:
Выход:
Select * from employee view;
Выход:
Пример № 3
Создание оракула с псевдонимом столбцов
код:
Выход:
Select * from employee view;
Выход:
Пример № 4
Доступ к представлению с помощью предложения where
Код:
SELECT *
FROM employee view
WHERE years > 10;
ORDER BY full name;
Выход:
Пример № 5
Доступ к просмотру с заказом по предложению
Код:
SELECT full name
FROM employee view
WHERE years > 10
ORDER BY full name;
Выход:
Пример № 6
Обновить и сделать доступным только для чтения
Код:
Выход:
Пример № 7
Создание оракула с несколькими таблицами
Код:
Выход:
Пример № 8
Удалить вид с помощью оператора Drop
Код:
Drop view employee view;
Выход:
Преимущества и недостатки взглядов в оракуле
Преимущества и недостатки приведены ниже:
Ниже приведены преимущества:
- Представление может быть создано для выбранных данных или столбца таблицы, которые ограничивают представление таблицы и могут скрывать некоторые данные или столбец в таблицах.
- Представление создает для просмотра данных без сохранения данных в таблице.
- View cab создан для объединения двух или более таблиц данных и сохранения их в виде одной таблицы или объекта.
- Смотровая кабина создана для обеспечения безопасности.
- Представление дает хорошую производительность для выполнения сложных запросов или объединения запросов.
Недостатки взглядов в оракуле
Ниже приведены недостатки:
- Операции DML не могут выполняться в поле зрения.
- Представление становится неактивным, если отброшена таблица, на которой оно создано.
- Представление занимает пространство памяти как объект.
Вывод
Представления - это виртуальные таблицы, которые не существуют физически. Представления создаются на существующей таблице или таблицах. Представления создаются по часто используемым запросам или сложным запросам или запросам соединения. Представление дает хорошую производительность для выполнения сложных запросов или объединения запросов. Операции DML не могут выполняться в поле зрения. Смотровая кабина создана для обеспечения безопасности. Представление становится неактивным, если отброшена таблица, на которой оно создано.
Рекомендуемые статьи
Это руководство по Oracle Views. Здесь мы обсуждаем параметры представлений, преимуществ и недостатков Oracle вместе с примерами запросов. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -
Читайте также: