Файл: SQL в вопросах и задачах.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 02.04.2021

Просмотров: 1542

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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

Ч то

 

буд ет

 

п роисход ить

 

п ри

 

п оп ытка х

 

в ста в ки

 

строки

 

в

 

э то

 


background image

 

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

 

од ина ков ыми

 

з на ч ениями

которые

 

можно

 

п росто

 

исключ ить

 

из

 

в ыв од а

 

с

 

п омощ ью

 

д ругого

 

з а п роса

 

уже

 

к

 

э тому

 

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

 

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

ука з а в

 

в

 

з а п росе

 

только

 

п оля

необход имые

 

д ля

 

в ыв од а

.  


background image

 

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. 

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

основанны е

 

на

 

нескол ь ких

 

т абл иц ах

  

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

 

ч а сто

 

исп ользуются

 

д ля

 

объед инения

 

нескольких

 

та блиц

 

(

ба з ов ых

 

и

/

или

 

д ругих

 

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

в

 

од ну

 

большую

 

в ир туа льную

 

та блицу

Та кое

 

решение

 

имеет

 

ряд

 

п р еимущ еств

 

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

объед иняющ ее

 

несколько

 

та блиц

может

 

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

 

ка к

 

п ромежуточ ный

 

ма кет

 

п ри

 

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

 

сложных

 

отч етов

скрыв а ющ ий

 

д ета ли

 

объед инения

 

большого

 

колич еств а

 

исход ных

 

та блиц

 

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

 

объед иненные

 

п оисков ые

 

и

 

ба з ов ые

 

та блицы

 


background image

 

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


background image

 

120

 

 

 

 FROM 

EXAM

_

MARKS

 

 

 

 

 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 

<

и м я

 

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