Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQL в вопросах и задачах

.pdf
Скачиваний:
34
Добавлен:
21.05.2015
Размер:
917.91 Кб
Скачать

5. Пр едста влен и я (VIEW)

5.1. П редставл ения – им енованны е з апросы

Д о

сих п ор

реч ь шла

о таблицах, обыч но наз ыв аемых

баз ов ыми

таблица ми.

Э то –

таблицы,

которые сод ержат д а нные. О д на ко имеется и

д ругой

в ид

таблиц, на з ыв аемый VIEW или ПРЕДСТАВЛЕНИЯ.

Таблицы–

п ред став ления не сод ержат ника ких собств енных д а нных. Фактич ески

пр едст а в ление –эт о им енов а нна я т а бли ца , со д ер ж и м о е ко т о р о йявляет ся

р езульт а т о м за пр о са , за д а нно го пр и

о пи са ни и

пр ед ст а влени я.

Прич ем

д анный з ап рос в ып олняется

в сякий

раз ,

когд а

таблица-п ред став ление

станов ится объектом кома нд ы

SQL. Выв од

з ап роса п ри э том в

кажд ый

момент станов итсясод ержаниемп ред став ления. Пред ста в ленияп оз в оляют:

огранич ив атьч исло столбцов , из которых п ольз ов ательв ыбирает или в которыев в од ит д а нные;

∙ огранич ив ать ч исло строк, из которых п ольз ов атель в ыбира ет или в которыев в од ит д а нные;

в ыв од итьд оп олнительныестолбцы, п реобраз ов анныеиз д ругих столбцов баз ов ой та блицы;

в ыв од итьгруп п ы стр ок таблицы.

Б ла год аря этому п р ед ста в ления д а ют в оз можностьгибкой настройки

в ыв од имой из

таблиц информации

в соотв етств ии

с требов аниями

конкретных п ольз ов а телей,

п оз в оляют обесп еч ив атьз а щ иту информации на

уров не строк и

столбцов ,

уп рощ а ют формиров а ние сложных отч етов и

в ыход ных форм.

 

 

 

CREATE VIEW

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

п омощ ью кома нд ы

(СОЗДАТЬ ПРЕДСТАВЛЕНИЕ). Н а п ример :

CREATE VIEW MOSC_STUD AS

SELECT *

FROM STUDENT

WHERE CITY = ‘М о сква ’;

 

 

112

 

 

 

Д анные из

баз ов ой

таблицы, п ред ъяв ляемые

п ольз ов ателю в

п ред став лении, з а в исят от

услов ия (п ред иката),

оп исанного

SELECT-

з ап росеп ри оп ред елении п р ед ста в ления.

 

 

 

В соз д анную

в рез ультате п р ив ед енного

в ыше з а п роса

таблицу-

п ред став ление MOSC_STUD

п ер ед аются д анные из

ба з ов ой

таблицы

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

CITY ра в но ‘М о сква ’. К таблице MOSC_STUD можно теп ерьобращ аться с

п омощ ью з ап росов

так же,

как и к любой д ругой таблице баз ы д а нных.

Н а п ример, з а п рос д ляп росмотра п ред став ленияMOSC_STUD имеет в ид :

SELECT *

FROM MOSC_STUD;

5.2. П редставл ения т абл иц

Раз лич ают п ред став лениятаблиц и п р ед ста в лениястолбцов .

В п ростейшем п ред став лении та блиц в ыбираютсявсе строки и столбцы баз ов ой таблицы.

CREATE VIEW NEW_STUD_TAB AS SELECT *

FROM STUDENT;

Такоеп ред став ление, п о сути, э кв ив алентно п рименению синонима, но яв ляетсяменееэффектив ным, п оэтому п рименяетсяред ко.

5.3. П редставл ения ст ол бц ов

В п ростейшем в ид е п ред ста в ление столбцов в ыбирает в се строки и столбцы, п од обно п ред ста в лению таблиц; кроме того, в кач еств е имен столбцов п рименяютсяп сев д онимы. Н а п ример :

CREATE VIEW NEW_STUDENT

(NEW_STUDENT_ID, NEW_SURNAME, NEW_NAME, NEW_STIPEND, NEW_KURS, NEW_CITY, NEW_BIRTHDAY, NEW_UNIV_ID)

AS SELECT STUDENT_ID, SURNAME, NAME, STIPEND,

113

KURS, CITY, BIRTHDAY, UNIV_ID FROM STUDENT;

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

5.4. Модиф иц ирование предст авл ений

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

UPDATE NEW_STUDENT

SET CITY = ‘М о сква

WHERE STUDENT_ID = 1004;

экв ив алентен

в ып олнению

команд ы UPDATE

над

баз ов ой

та блицей

STUDENT.

След ует, од нако, обратитьв нима ниена

то, ч то в общ ем случ ае,

из -з а того,

ч то обыч но в п ред став лении отображаются д анные из

баз ов ой

таблицы в

пр ео бр а зо ва нно м

или усеченно м в ид е,

п рименение команд

мод ифика ции

к таблицам-п ред став лениям имеет некоторые особенности,

рассма трив аемыениже.

 

 

 

 

5.5. Маскирую щ ие предст авл ения

5.5.1. П редст авл ения , м аскирую щ ие ст ол бц ы

Д анный в ид п ред став лений огранич ив ает ч исло столбцов ба з ов ой таблицы, к которымв оз можен д оступ . Н а п ример, п ред став ление

CREATE VIEW STUD AS

SELECT STUDENT_ID, SURNAME, CITY FROM STUDENT;

д ает д оступ п ольз ов ателю к п олям STUDENT_ID, SURNAME, CITY ба з ов ой

114

таблицы STUDENT, п олностью скрыв а я от него как сод ержимое, так и сам факт налич ияв баз ов ой та блицеп олей NAME, STIPEND, KURS, BIRTHDAY и UNIV_ID.

5.5.2.О перац ии м одиф икац ии в предст авл ения х, м аскирую щ их ст ол бц ы

Пред став ления, как ужеотмеч алосьв ыше, могут из менятьсяс п омощ ью

команд

мод ифика ции

DML,

но

п ри этом

мод ифика ция д а нных буд ет

осущ еств ляться не в

са мой

та блице-п ред ста в лении, а

в соотв етств ующ ей

баз ов ой

таблице.

В

св яз и

с

этим, с п ред став лениями, маскирующ ими

столбцы,

функции

в став ки

и

уд а ления работают несколько инач е, ч ем с

обыч ными таблица ми. О п ератор

INSERT,

п римененный к п ред став лению,

фактич ески

осущ еств ляет в ста в ку строки

в

соотв етств ующ ую баз ов ую

таблицу, п р ич емво

все столбцы этой таблицы нез ав исимо от того, в ид ны они

п ольз ов ателю ч ерез п ред став лениеили скрыты от него. В св яз и с этим,

в

столбцах,

не в ключ енных

 

в

п ред став ление, устана в лив ается NULL-

значение

или

з на ч ение

п о

умолч а нию.

Е сли

не в ключ енный

в

п ред став лениестолбец имеет оп цию NOT NULL, то генерируетсясообщ ение об ошибке.

Л юбоеп рименениеоп ер атора DELETE уд а ляет строки баз ов ой таблицы нез а в исимо от их з нач ений.

5.5.3. П редст авл ения , м аскирую щ ие ст роки

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

(п ред икатом) в конструкции WHERE п р и

оп иса нии п ред став ления. Д оступ

ч ерез п ред став ление в оз можен только

к строкам, уд ов летв оряющ им

услов ию.

 

Н а п ример, п ред став ление

 

CREATE VIEW MOSC_STUD AS

 

SELECT *

 

FROM STUDENT

 

WHERE CITY = ‘М о сква ’;

 

115

п оказ ыв ает п ольз ов ателю только тестроки та блицы STUDENT, д лякоторых з нач ениеп оляCITY рав но ‘М о сква ’.

5.5.4. О перац ии м одиф икац ии в предст авл ения х, м аскирую щ их ст роки

К ажд ая в ключ енная в п ред став ление строка д оступ на д ля в ыв од а, обнов ления и уд а ления. Л юба я д оп устима я д ля основ ной таблицы строка в ста в ляетсяв ба з ов уютаблицу нез а в исимо от еев ключ енияв п ред став ление. При этом может в оз никнуть п роблема , состоящ ая в том, ч то з нач ения, в в ед енныеп ольз ов а телем баз ов уютаблицу ч ерез п р ед ста в ление, з нач ений, буд ут отсутств ов атьв п ред став лении, остав а ясьп ри этомв баз ов ой таблице. Рассмотримтакой случ а й:

CREATE VIEW HIGH_RATING AS SELECT *

FROM UNIVERSITY

WHERE RATING = 300;

Э то п р ед ста в ление яв ляется обнов ляемым. О но п росто огранич ив ает

д оступ

п ольз ов а теля к оп ред еленным столбца м и

строкам в

та блице

UNIVERSITY.

Пред п оложим, необход имо в став ить с

п омощ ью кома нд ы

INSERT след ующ уюстроку:

 

 

 

 

 

 

INSERT INTO HIGH_RATING

 

 

 

 

 

VALUES (180, ‘Н о вы й ун и вер си тет’, 200, ‘Во р о н еж ’);

 

К оманд а

INSERT д оп устима

этом

п ред став лении. С

п омощ ью

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

буд ет в став лена

в баз ов ую таблицу

UNIVERSITY. О д нако, п ослеп ояв ления этой строки в

баз ов ой таблице, и з

са м о го

пр ед ст а в лени я о на и счезнет ,

п оскольку з нач ениеп оля RATING не

рав но

300, и,

след ов а тельно,

эта

строка

не уд ов летв оряет

услов ию

п ред ложения WHERE д ля отбора

строк в п ред став ление. Д ля п ольз ов ателя

такое исч ез нов ение только

ч то

в в ед енной строки яв ляется неожид анным.

Д ейств ительно,

неп онятно,

п оч ему п ослев в од а строки в та блицу еенельз я

ув ид етьи, на п ример, тут жеуд а лить. Тем более, ч то п ольз ов ательв ообщ е может нез нать– р аботает он в д анный момент с баз ов ой та блицей или с таблицей-п ред став лением.

А налогич ная ситуа ция в оз никнет, если в ка кой-либо сущ еств ующ ей

116

з ап иси п ред став ления HIGH_RATING из менитьз на ч ение п оля RATING на з нач ение, отлич ноеот 300.

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

п ред став ления оп ции WITH

CHECK OPTION.

Э та

оп ция расп ространяет

услов иеWHERE д ля з ап р оса

на оп ера ции обнов ления и в став ки в оп исание

п ред став ления. Н а п ример :

 

 

 

 

CREATE VIEW HIGH_RATUNG AS

 

 

 

SELECT *

 

 

 

 

FROM UNIVERSITY

 

 

 

WHERE RATING = 300

 

 

 

WITH CHECK OPTION;

 

 

 

В э том случ ае в ышеуп омянутые оп ера ции

в ста в ки

строки или

коррекции п оляRATING буд ет отклонены.

 

 

 

О п цияWITH CHECK OPTION п омещ а етсяв

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

а не в кома нд у DML, так ч то все команд ы мод ифика ции в

п р ед ста в лении

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

5.5.5.О перац ии м одиф икац ии в предст авл ения х, м аскирую щ их ст роки и ст ол бц ы

Рассмотренная

в ыше п роблема

в оз никает

и п ри

в став ке строк в

п ред став ление с

п ред ика том,

исп ольз ующ им п оля баз ов ой

таблицы,

не

п рисутств ующ ие

в

са мом

п р ед ста в лении.

Н ап р имер,

ра ссмотрим

п ред став ление

 

 

 

 

 

 

 

 

CREATE VIEW MOSC_STUD AS

 

 

 

 

 

SELECT STUDENT_ID, SURNAME, STIPEND

 

 

 

FROM STUDENT

 

 

 

 

 

 

WHERE CITY = ‘М о сква ;

 

 

 

 

 

Вид но, ч то в

д а нноеп ред став ление не в ключ ено п оле CITY таблицы

STUDENT.

 

 

 

 

 

 

 

 

Ч то буд ет

п роисход ить п ри

п оп ытка х

в ста в ки

строки в

это

117

 

п ред став ление? Та к как мы не можем указ а ть з нач ение

CITY в

п ред став лении как з нач ение п о умолч анию (в в ид у отсутств ия в

нем этого

п оля), то этим з нач ением буд ет NULL, и оно буд ет в в ед ено в п оле CITY

баз ов ой таблицы STUDENT (сч итаем, ч то д ляэтого п оляоп цияNOT NULL не

исп ольз уется). Так ка к в этом случ аез нач ениеп оля CITY баз ов ой таблицы STUDENT небуд ет рав нятьсяз нач ению ‘М о сква ’, в ста в ляемаястр ока буд ет

исключ ена

из

самого

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

и,

п оэтому, не буд ет

в ид на

п ольз ов ателю.

Прич ем так буд ет п р оисход ить д ля любо й в став ляемой в

п ред став лениеMOSC_STUD строки. Д ругими слов а ми, п ольз ов ательв ообщ е

не сможет

в ид еть строки, в в од имые им в

это п ред став ление.

Д анная

п роблема нерешается и в

случ а е, если в

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

д обав лена оп ция WITH CHECK OPTION

 

 

 

CREATE VIEW MOSC_STUD AS

 

 

 

SELECT STUDENT_ID, SURNAME, STIPEND

 

FROM STUDENT

 

 

 

 

WHERE CITY = ‘М о сква

 

 

 

WITH CHECK OPTION;

 

 

 

Таким образ ом, в оп р ед еленном ука з анными сп особами п ред став лении,

можно мод ифициров а ть з нач ения п олей

или

уд а лять строки, но

нельз я

вст а влят ь строки. Исход яиз этого, рекоменд уетсяд ажев тех случ аях, когд а этого не требуется п о соображениям п олез ности (и д аже без оп асности) информации, п ри оп ред елении п ред ста в ления в ключ атьв него все п оля, на которыеимеетсяссылка в п ред ика те. Е сли эти п олянед олжны отображаться

в в ыв од е таблицы, в сегд а

можно

исключ ить их

уже в

з ап росе к

п ред став лению. Д ругими

слов ами,

можно было

бы

оп ред елить

п ред став лениеMOSC_STUD п од обно след ующ ему:

 

 

CREATE VIEW MOSC_STUD AS

SELECT *

FROM STUDENT

WHERE CITY = ‘М о сква

WITH CHECK OPTION;

Э та

кома нд а з а п олнит в

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

од инаков ыми

з нач ениями, которые можно

п росто исключ ить из в ыв од а

с

п омощ ью

д ругого

з ап роса уже к этому

сформиров анному п ред став лению,

указ а в в

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

118

SELECT STUDENT_ID, SURNAME, STIPEND

FROM MOSC_STUD;

5.6. Агрегированны е предст авл ения

Соз д а ниеп ред ста в лений с исп ольз ов а нием а грегиров анных функций и п ред ложения GROUP BY яв ляется уд обным инстр ументом д ля неп рерыв ной

обработки и

интер п ретации из в лекаемой информации. Пред п оложим,

необход имо

след ить з а колич еств ом студ ентов , сд а ющ их экз а мены,

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

CREATE VIEW TOTALDAY AS

SELECT EXAM_DATE, COUNT(DISTINCT SUBJ_ID) AS SUBJ_CNT,

COUNT(STUDENT_ID) AS STUD_CNT, COUNT(MARK) AS MARK_CNT,

AVG(MARK) AS MARK_AVG, SUM(MARK) AS MARK_SUM FROM EXAM_MARKS

GROUP BY EXAM_DATE;

Теп ерьтребуемую информа цию можно ув ид етьс п омощ ью п ростого з ап роса к п ред став лению:

SELECT * FROM TOTALDAY;

5.7.П редставл ения , основанны е на нескол ь ких т абл иц ах

Пред став ленияч а сто исп ольз уютсяд ляобъед инениянескольких таблиц (баз ов ых и/или д ругих п ред став лений) в од ну большую в ир туа льную таблицу. Такоерешениеимеетряд п р еимущ еств :

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

∙ п ред в арительно объед иненные п оисков ые и баз ов ые таблицы

 

 

 

119

 

 

 

обесп еч ив а ют

наилуч шие

услов ия д ля

транз а кций, п оз в оляют

 

исп ольз ов ать

комп актные

схемы

код ов ,

устраняя необход имость

 

нап исанияд ляка жд ого отч ета д линных объед иняющ их п роцед ур.

п оз в оляет исп ольз ов ать п ри

формиров ании

отч етов более над ежный

 

мод ульный п од ход .

 

 

 

п ред в арительно объед иненныеи п ров еренныеп ред ста в ления уменьша ют

 

в ероятность ошибок, св яз анных с

неп олным в ып олнением услов ий

 

объед инения.

 

 

 

 

М ожно, нап ример, соз д атьп ред став ление, котороеп оказ ыв а ет имена и наз в аниясд анных п ред метов д лякажд ого студ ента :

CREATE VIEW STUD_SUBJ AS

SELECT A.STUDENT_ID, C.SUBJ_ID, A.SURNAME, C.SUBJ_NAME FROM STUDENT A, EXAM_MARKS B, SUBJECT C

WHERE A.STUDENT_ID = B.STUDENT_ID

AND B.SUBJ_ID = C.SUBJ_ID;

Теп ерьв сеп ред меты студ ента или в сех студ ентов д лякажд ого п ред мета можно в ыбра тьс п омощ ью п ростого з ап роса. Н ап р имер, ч тобы ув ид етьв се п ред меты, сд а нныестуд ентомИва н о вы м, п од аетсяз а п рос:

SELECT SUBJ_NAME FROM STUD_SUBJ

WHERE SURNAME = ‘Ива н о в’;

5.8. П редставл ения и подз апросы

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

CREATE VIEW ELITE_STUD

AS SELECT B.EXAM_DATE, A.STUDENT_ID, A.SURNAME FROM STUDENT A, EXAM_MARKS B

WHERE A.STUDENT_ID = B.STUDENT_ID AND B.MARK =

( SELECT MAX (MARK)

120

FROM EXAM_MARKS C

WHERE C.EXAM_DATE = B.EXAM_DATE);

Е сли, с д ругой стороны, п ремия буд ет наз нач аться только студ енту, который имел са мый в ысокий ба лл и неменьше10-ти ра з , то необход имо исп ольз ов атьд р угоеп ред став ление, основ анноена п ер в ом:

CREATE VIEW BONUS

AS SELECT DISTINCT STUDENT_ID, SURNAME

FROM ELITE_STUD A

WHERE 10 < =

( SELECT COUNT(*)

FROM ELITE_STUD B

WHERE A.STUDENT_ID = B.STUDENT_ID);

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

SELECT * FROM BONUS;

5.9.О граничения прим енения операт ора SELECT дл я соз дания предст авл ений

Имеются некоторые в ид ы з ап росов , не д оп устимые в оп ред елениях

п ред став лений. О д иноч ное

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

основ ыв аться

на

од иноч ном з ап росе, п оэтому

UNION и

UNION ALL в

п ред став лениях

не

раз реша ются. Пред ложение ORDER BY

та кже никогд а

не исп ольз уется в

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

5.10. Удал ение предст авл ений

Синта ксис уд аленияп р ед став ленияиз баз ы д анных п од обен синта ксису уд алениябаз ов ых таблиц:

DROP VIEW <и мя п редст а вл ени я>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]