ТОП 10:

Операторы UNION, INTERSECT, MINUS (назначение, объяснить разницу).



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

Существует четыре операции соединения подзапросов:

UNION – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки удаляются;

UNION ALL – объединение строк из обоих подзапросов; в результате остаются строки из обоих подзапросов, причем полностью повторяющиеся строки остаются;

INTERSECT – пересечение строк из обоих подзапросов; в результате остаются строки, присутствующие в обоих подзапросах;

MINUS – вычитание результатов одного подзапроса из результатов второго подзапроса.

Примеры использования операций соединения подзапросов:

-- получение списка наименования хотя бы раз

-- проданных или купленных товаров, исключая повторы

SELECT DISTINCT Name FROM Products, Outgoing

WHERE Products.Prod_id=Outgoing.Prod_id

UNION

SELECT DISTINCT Name FROM Products, Incoming

WHERE Products.Prod_id=Incoming.Prod_id;

-- получение списка менеджеров, осуществивших

-- хотя бы по одной сделке продажи и закупки товаров

SELECT Name FROM Managers, Outgoing

WHERE Managers.Man_id=Outgoing.Man_id

INTERSECT

SELECT Name FROM Managers, Incoming

WHERE Managers.Man_id=Incoming.Man_id;

-- получение списка менеджеров,

-- не заключивших ни одного контракта

SELECT Name FROM Managers

MINUS

SELECT Name FROM Managers, Contracts

WHERE Managers.Man_id=Contracts.Man_id;

19.Представление (VIEW), обновляемые/необновляемые представления.

Идея представления (View) состоит в следующем: определить запрос, который предполагается использовать достаточно часто, сохранить его в базе данных в виде объекта ORACLE и разрешить пользователям обращаться к нему по имени, как к обычной таблице. Когда пользователь выбирает данные из представления, СУБД выполняет соответствующий запрос, организует результаты так, как определено в представлении, и выдает их пользователю. Для пользователя представление выглядит как таблица, из которой поступают данные. Однако на самом деле данные поступают через представление, из одного или нескольких других источников – исходных таблиц или других представлений.

Запрос, непосредственное выполнение которого можно заменить использованием представлений, может быть какой угодно сложности. В сущности, это и есть одно из назначений использования представлений – скрытие сложности запросов и структуры данных от пользователей. Для создания представлений используется следующий синтаксис:

CREATE [OR REPLACE] VIEW имя_представления AS

Оператор SELECT

[WITH CHECK OPTION]

Обновляемые представленияЕсли к представлению можно применить операторы обновления (INSERT, UPDATE или DELETE), то представление является обновляемым (updateble), иначе оно является читаемым (read-only).

Ниже приведены критерии того, является ли представление обновляемым в SQL:

· оно базируется на одной таблице;

· оно должно включать первичный ключ таблицы;

· оно не должно включать полей, полученных в результате применения функций агрегирования;

· оно не может содержать спецификации DISTINCT;

· оно не должно использовать GROUP BY или HAVING;

· оно не должно использовать подзапросы;

· оно может быть определено на другом представлении, но это представление должно быть обновляемым;

· оно не может содержать константы, строки или выражения в списке выбираемых выходных полей;

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

Например, приведенное представление Contragents_Lite является обновляемым, поскольку оно удовлетворяет всем перечисленным критериям, а представление WareHouse – нет.

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

Для предотвращения описанной ситуации применяется параметр WITH CHECK OPTION, который может указываться при создании обновляемых представлений после оператора SELECT. При наличии этого параметра СУБД предотвращает операции обновления данных, если они нарушают условия горизонтальной или вертикальной фильтрации, определенные в предложении в операторе SELECT:

-- создание обновляемого представления с защитой от

-- изменений скрытого столбца Address

CREATE OR REPLACE VIEW Contragents_Lite AS

SELECT Contr_id, Name, Phone, Comments FROM Contragents

WITH CHECK OPTION;







Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.186.116 (0.007 с.)