SQL в вопросах и задачах
.pdf121
УП Р АЖ НЕ НИ Я
110. Соз д айтеп ред став лениед ля п олуч ения св ед ений обо в сех студ ента х, имеющ их только отлич ныеоценки.
111. |
Соз д айте п ред став ление д ля п олуч ения |
св ед ений |
о |
колич еств е |
студ ентов в ка жд ом город е. |
|
|
|
|
112. |
Соз д айтеп ред став лениед ляп олуч ениясв ед ений п о кажд ому студ енту: |
|||
его ид ентифика тор, фамилию, имя, сред ний и общ ий ба ллы. |
|
|
||
113. |
Соз д айте п ред став ление д ля п олуч ения |
св ед ений |
о |
колич еств е |
э кз аменов , которыесд ав а л кажд ый студ ент. |
|
|
|
5.11. И зм енение значений в предст авл ения х
К ак ужегов орилось, исп ольз ов аниекоманд мод ифика ции яз ыка SQL –
INSERT (ВСТАВИТЬ), UPDATE (ЗАМЕНИТЬ), и DELETE (УДАЛИТЬ) –
п рименительно д ляп ред ста в лений имеет ряд особенностей. В д оп олнениек асп ектам, рассмотренным в ыше, след ует отметить, ч то нев сеп ред став ления могут мод ифициров аться.
Е сли кома нд ы мод ифика ции могут в ып олняться в п р ед ста в лении, то п ред став ление яв ляется обнов ляемым (мод ифицируемым); в п р отив ном случ а еоно п ред наз нач ено только д ля ч тения п ри з ап росе. К аким образ ом можно оп ред елить, яв ляетсяли п ред став лениемод ифицируемым? К р итерии обнов ляемости п ред став ленияможно сформулиров атьслед ующ имобра з ом.
∙ Пред став ление строится на основ е од ной и только од ной баз ов ой таблицы.
∙Пред став лениед олжно сод ержатьп ерв ич ный ключ баз ов ой та блицы.
∙Пред став ление не д олжно иметьникаких п олей, которые п ред став ляют собой агрегирующ иефункции.
∙Пред став лениенед олжно сод ержатьDISTINCT в св оемоп ред елении.
∙ |
Пред став лениенед олжно исп ольз ов а тьGROUP BY или HAVING в |
св оем |
|
|
оп ред елении. |
|
|
∙ |
Пред став лениенед олжно исп ольз ов атьп од з ап росы. |
|
|
∙ |
Пред став лением о ж ет бы т ь исп ольз ов а но в |
д ругом п р ед ста в лении, но |
|
|
э то п ред ста в лениед олжно бытьта кжемод ифицир уемыми. |
|
|
∙ |
Пред став ление не д олжно исп ольз ов ать в |
кач еств е п олей |
в ыв од а |
|
|
|
|
|
|
|
122 |
|
|
|
|
константы или в ыраженияз нач ений. |
|
|
|
|
|||||||
Суть этих |
огранич ений |
в |
том, |
ч то |
обнов ляемые |
п ред став ления |
|||||
фактич ески |
п од обны |
окна м |
в |
баз ов ых |
та блицах. |
О ни п оказ ыв ают |
|||||
информацию из |
баз ов ой |
та блицы, огранич ив а я оп ред еленные ее строки |
|||||||||
(исп ольз ов а нием |
соотв етств ующ их |
п ред ика тов ) |
или |
сп ециа льно |
|||||||
именов а нные столбцы |
(с |
исключ ениями). |
Н о п ри этом п ред став ления |
||||||||
в ыв од ят з нач ения без |
и х |
о бр а бо т ки |
с исп ольз ов анием |
а грегир ующ их |
|||||||
функций и груп п иров ки. |
О ни также не срав нив ают строки таблиц д руг с |
||||||||||
д ругом (как |
это |
имеет |
место |
в |
объед инениях и п од з а п росах, или п ри |
||||||
исп ольз ов ании DISTINCT). |
|
|
|
|
|
|
|
||||
Раз лич иямежд у мод ифицируемыми (обнов ляемыми) п ред став лениями и |
|||||||||||
п ред став лениями |
“т о лько |
д ля |
чт ени я” |
не случ айны. |
О бнов ляемые |
||||||
п ред став ления в |
основ ном исп ольз уются ана логич но |
ба з ов ым таблица м. |
Польз ов атели могут д аженез на ть, яв ляется ли з ап рашив а емый ими объект баз ов ой та блицей или п ред ста в лением. Э то п рев осход ный меха низ м з ащ иты д ляскр ытияч астей таблицы, которыеяв ляютсяконфид енциальными или не п ред на з нач ены д анному п ольз ов ателю.
Н емод ифицируемыеп ред став ления, с д ругой стороны, п оз в оляют более
рациона льно |
п олуч ать и |
п ереформатиров ать д анные. С |
их п омощ ью |
формируются |
библиотеки |
сложных з ап росов , которые могут з атем |
|
исп ольз ов аться в з ап р осах |
д ля п олуч ения информации |
са мостоятельно |
(нап ример, в объед инениях). Э ти п ред став лениямогут такжеиметьз на ч ение п ри решении з а д ач з ащ иты и без оп асности д анных. Н а п р имер, можно п ред остав итьнекоторым п ольз ов а телям в оз можностьп олуч ения агрегатных д анных (таких, ка к усред ненное з нач ение оценки студ ента), не п ока з ыв ая конкретных з нач ений оценок и, темболее, неп оз в оляяих мод ифициров ать.
5.12.П рим еры обновл я ем ы х и не обновл я ем ы х предст авл ений
Пример 1
CREATE VIEW DATEEXAM (EXAM_DATE, QUANTITY)
AS SELECT EXAM_DATE, COUNT (*)
FROM EXAM_MARKS
GROUP BY EXAM_DATE;
123
Д анноеп ред став лениеяв ляется не о бно вляем ы м из -з а п рисутств ия в немагрегир ующ ей функции и GROUP BY.
Пример 2
CREATE VIEW LCUSTT
AS SELECT *
FROM UNIVERSITY
WHERE CITY = ‘М о сква ’;
Э то – о бно вляем о е п ред став ление.
Пример 3
CREATE VIEW SSTUD (SURNAME1, NUMB, KUR) AS SELECT SURNAME, STUDENT_ID, KURS*2
FROM STUDENT
WHERE CITY = ‘М о сква ’;
Э то п ред став ление – не м о д и ф и ци р уем о е из -з а налич ия в ыражения “KURS*2”.
Пример 4
CREATE VIEW STUD3
AS SELECT * FROM STUDENT
WHERE STUDENT_ID IN
( SELECT MARK
FROM EXAM_MARKS
WHERE EXAM_DATE = ‘10/02/1999’);
Пред став лениене м о д и ф и ци р ует сяиз -з а п рисутств ияв немп од з ап роса . В некоторых п рогра мма х э то может бытьп р иемлемым.
Пример 5
CREATE VIEW SOMEMARK
AS SELECT STUDENT_ID, SUBJ_ID, MARK FROM EXAM_MARKS
WHERE EXAM_DATE IN (‘10/02/1999’, ‘10/06/1999’);
Э то – о бно вляем о е п ред став ление.
124
5.13.П редставл ения , базирую щ иеся на других предст авл ения х
О тносительно исп ольз ов а ния п ред ложения WITH |
CHECK OPTION |
след ует отметить, ч то в станд артеSQL это п ред ложениенеп ред усматрив ает |
|
каска д ного из менения, то естьоно п рименяетсятолько в |
п ред став лениях, в |
которых оно оп ред елено, но нерасп ространяется на д ругиеп ред став ления, основ а нныена э томп ред став лении. Н а п р имер, в п ред ыд ущ емп римере
CREATE VIEW HIGH_RATING
AS SELECT UNIV_ID, RATING
FROM UNIVERSITY WHERE RATING >= 400
WITH CHECK OPTION;
п оп ытка в ста в итьили обнов итьз нач ения п оля RATING, отлич ные от 400, буд ет отв ергнута , п оскольку п рисутств ует указ а ниеWITH CHECK OPTION. О д нако, если соз д ается в торое п ред став ление (с тем же сод ержанием), основ а нноена п ерв ом:
CREATE VIEW MYRATING AS
SELECT *
FROM HIGH_RATING;
то в в од в п оле RATING с п омощ ью нижеп р ив ед енного з а п роса з нач ений, отлич а ющ ихся от 400, уже не буд ет отв ер гнуто как ошибоч ное. То есть след ующ ий з ап рос
UPDATE MYRATING SET RATING = 200
WHERE UNIV_ID = 18;
небуд ет отв ергнут ка к некорректный, и, п ослеего в ып олнения, строки с обнов ленными д а нными исч ез нут из ка к из п ред став ленияMYRATING, та к и из п ред став ленияHIGH_RATING.
Пред ложение WITH CHECK OPTION п росто гарантирует, ч то любое
обнов лениев |
п ред став лении осущ еств ляется в соотв етств ии со з нач ениями, |
|
указ анными |
именно д ля эт о го п ред став ления. |
О бнов ление д ругих |
п ред став лений, баз ир ующ ихся на п ер в ом текущ ем, |
п ри э том д оп устимым, |
если эти п ред став лениянез ащ ищ ены п ред ложениями WITH CHECK OPTION, з ад а нными именно д ляних. Пред ложенияWITH CHECK OPTION п р ов еряют
125
п ред ика ты только того п ред став ления, в котором они сод ержатся. Пр и этом неяв ляется в ыход ом из п оложения и соз д аниеп ред став ленияMYRATING с п омощ ьюз а п роса
CREATE VIEW MYRATING AS
SELECT *
FROM HIGH_RATING
WITH CHECK OPTION;
УП Р АЖ НЕ НИ Я
114. |
К акие из |
п ред став ленных ниже п ред став лений яв ляются |
обнов ляемыми? |
||
a) |
CREATE VIEW DAILYEXAM AS |
|
|
SELECT DISTINCT STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE |
|
|
FROM EXAM_MARKS; |
|
b) CREATE VIEW CUSTALS AS |
||
|
SELECT SUBJECT.SUBJ_ID, SUM (MARK) AS MARK1 |
|
|
FROM SUBJECT, EXAM_MARKS |
|
|
WHERE SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID |
|
|
GROUP BY SUBJECT.SUBJ_ID; |
|
c) |
CREATE VIEW THIRDEXAM |
|
|
AS SELECT * |
|
|
FROM DAILYEXAM |
|
|
WHERE EXAM_DATE = ‘10/02/1999’; |
|
d) |
CREATE VIEW NULLCITIES |
|
|
AS SELECT STUDENT_ID, SURNAME, CITY |
|
|
FROM STUDENT |
|
|
WHERE CITY IS NULL |
|
|
OR SURNAME BETWEEN ‘А’AND ‘Д’; |
|
115. |
Соз д айте |
п ред ста в ление таблицы STUDENT с именем STIP, |
в ключ а ющ ееп оляSTIPEND и STUDENT_ID и п оз в оляющ еев в од итьили из менятьз на ч ениеп оля STIPEND (стип енд ия), но только в п р ед ела х от
100 д о 200.
6.О пр еделен и епр а в до ступа по льзо ва телей кда н н ы м
6.1. П ол ь з оват ел и и привил егии
К ажд ый, |
кто имеет д оступ |
к баз е д анных, наз ыв ается по льзо ва т елем . |
|||
SQL исп ольз уетсяобыч но в многоп ольз ов ательских сред ах, которыетребуют |
|||||
раз гранич енияп ра в |
п ольз ов а телей с точ ки з ренияд оступ а к д а нным и п рав |
||||
на в ып олнениес ними тех или иных манип уляций. Д ля этих целей |
SQL |
||||
реализ ов аны |
сред ств а, п оз в оляющ ие уста нав лив ать и |
контролиров ать |
|||
п рив илегии п ольз ов ателей ба з ы д а нных. |
|
|
|||
К ажд ый |
п ольз ов атель в |
сред е SQL имеет сп ециальное имя |
или |
||
ид ентификатор, с |
п омощ ью |
которого осущ еств ляется |
ид ентифика ция |
п ольз ов ателяд ляустанов ки и оп ред еленияего п ра в с точ ки з ренияд оступ а к д анным. К а жд а я п осла нная к СУ Б Д кома нд а SQL-з ап р оса ассоциируется СУ Б Д с ид ентифика торомд оступ а к д аннымконкретного п ольз ов ателя.
Польз ов ательоп ред еляетсяс п омощ ьюслед ующ ей кома нд ы.
CREATE USER <и м я_по льзо ва т еля> IDENTIFIED BY <па р о ль>
Послев ып олненияэтой команд ы п ольз ов ательстанов итсяиз в естен баз е д анных, но п ока неможет в ып олнятьникаких оп ера ций.
У д алениеп ольз ов ателяп роиз в од итсякоманд ой
DROP USER <и м я_по льзо ва т еля> .
Н аз нач аемыеп ольз ов ателю п рив илегии – это то, ч то оп р ед еляет, может ли указ анный п ольз ов ательв ып олнитьд а нную кома нд у над оп р ед еленным
объектом баз ы д анных или нет. Имеется несколько тип ов |
п р ив илегий, |
соотв етств ующ их нескольким тип ам оп ераций. Прив илегии |
д а ются и |
отменяютсяд в умякоманд ами SQL, соотв етств енно: |
|
GRANT – уста нов ка п рив илегий и |
|
REVOKE – отмена п р ив илегий. |
|
127
6.2. С т андарт ны е привил егии
Прив илегии, оп ред еленныестанд артом SQL – это п рив илегии объекта. Э то оз нач ает, ч то п ольз ов ательимеет п рив илегию (п ра в о) на в ып олнение
д анной кома нд ы только на оп ред еленномобъектев баз |
ед анных. Прив илегии |
|||||
объекта |
св яз аны од нов ременно |
и с п ольз ов ателями, |
и |
с таблица ми баз ы |
||
д анных. |
То есть, |
п рив илегия |
д а ется оп ред еленному |
п ольз ов ателю |
в |
|
указ анной таблице. |
Э то может быть как баз ов а я |
таблица , так |
и |
|||
п ред став ление. |
|
|
|
|
|
Польз ов атель, соз д ав ший таблицу (любого в ид а ), яв ляется вла д ельцем этой таблицы. Э то оз нач ает, ч то этот п ольз ов ательимеет все п р ив илегии, относящ иесяк этой таблице, в том ч исле, он может п еред ав атьп рив илегии на работу с этой та блицей д ругимп ольз ов ателям.
|
Польз ов ателюмогутбытьназ нач ены след ующ иеп рив илегии: |
∙ |
SELECT – п ольз ов ательможет в ып олнятьз ап росы к таблице; |
∙ |
INSERT – п ольз ов ательможет в ып олнятьв та блице кома нд у INSERT; |
∙ |
UPDATE – п ольз ов а тельможет в ып олнятьв таблицекома нд у UPDATE.Э та |
|
п рив илегияможет бытьогранич ена д ляоп р ед еленных столбцов таблицы; |
∙ |
DELETE – п ольз ов ательможет в ып олнятьв та блицекоманд у DELETE; |
∙ |
REFERENCES – п ольз ов ательможет оп р ед елитьв нешний ключ (только |
|
д ляORACLE), который исп ольз ует од ин или болеестолбцов этой таблицы, |
|
как род ительский ключ . Воз можно огранич ение этой п рив илегии д ля |
|
оп ред еленных столбцов . |
К рометого, могут бытьнеста нд артныеп р ив илегии объекта, такие, как:
∙INDEX – п ольз ов ательимеетп р ав о соз д а в атьинд екс в та блице;
∙SYNONYM – п ольз ов а тельимеет п ра в о соз д ав атьсинонимд ляобъекта;
∙ALTER – п ольз ов ательимеет п рав о в ып олнятькоманд у ALTER TABLE в таблице;
∙EXECUTE – п оз в оляет в ып олнятьп роцед уру.
Наз нач ениеп ольз ов ателямэ тих п рив илегий осущ еств ляетсяс п омощ ью команд ы GRANT.
128
6.3. Ком анда GRANT
Польз ов атель, |
яв ляющ ийся в лад ельцем та блицы STUDENT, |
может |
п еред а тьд ругому |
п ольз ов ателю (п устьэто буд ет п ольз ов атель с |
именем |
IVANOV) п р ив илегиюSELECT с п омощ ьюслед ующ ей кома нд ы. |
|
GRANT SELECT ON STUDENT TO IVANOV;
Теп ерьп ольз ов а тельс именем IVANOV может в ып олнятьSELECT-з а- п росы к таблицеSTUDENT. Б ез налич ияд ругих п р ив илегий он может только вы би р а т ь з нач ения, но неможет в ып олнятьлюбыед ейств ия, которыебы в оз д ейств ов а ли на з нач ения в та блице STUDENT, в ключ ая исп ольз ов ание таблицы STUDENT в кач еств ерод ительской таблицы в нешнего ключ а . К огд а
SQL п олуч ает кома нд у |
GRANT, п ров еряются п рив илегии п ольз ов ателя, |
|
д ав шего эту команд у, ч тобы оп р ед елитьд оп устимостькома нд ы GRANT д ля |
||
этого п ольз ов ателя. Польз ов ательIVANOV са мостоятельно неможет з ад ать |
||
эту кома нд у. |
О н та кже не может п ред остав ить п ра в о SELECT д ругому |
|
п ольз ов ателю, |
та к как таблица п р ина д лежит неему (нижебуд ет п оказ а но, |
|
как в лад елец |
таблицы |
может п еред ать д ругому п ольз ов ателю п рав о |
пред остав ленияп рив илегий).
Команд а
GRANT INSERT ON EXAM_MARKS TO IVANOV;
п ред остав ляет п ольз ов ателю IVANOV п рав о в в од итьв та блицу EXAM_MARKS нов ыестроки.
В команд е |
GRANT д оп |
устимо указ ыв ать ч ерез з ап ятые сп исок |
п ред остав ляемых |
п рив илегий |
и сп исок п ольз ов ателей, которым они |
п ред остав ляются. Н ап ример :
GRANT SELECT, INSERT ON SUBJECT TO IVANOV, PETROV;
При этом в есь указ анный сп исок п р ив илегий п ред остав ляются в сем указ а нным п ольз ов а телям. В строгой ANSI-интерп рета ции нев оз можно п ред остав итьп рив илегии д лянескольких та блиц од ной кома нд ой GRANT.
129
6.4. И спол ь з ование аргум ент ов ALL и PUBLIC
А ргумент ALL PRIVILEGES (в се п рив илегии) или п росто ALL исп ольз уетсяв место имен п рив илегий в кома нд еGRANT, ч тобы п ред оста в ить в сеп рив илегии в таблице. Н а п ример, кома нд а
GRANT ALL PRIVILEGES ON STUDENT TO IVANOV;
или болеекоротко
GRANT ALL ON STUDENT TO IVANOV;
п еред а ет п ольз ов ателюIVANOV в есь набор п рив илегий в таблицеSTUDENT.
А ргумент PUBLIC исп ольз уется д ля п ер ед ач и указ анных в команд е
п рив илегий в сем |
остальнымп ольз ов ателям. Н аиболееч а сто это п рименяется |
д ля п рив илегии |
SELECT в оп ред еленных баз ов ых таблица х или |
п ред став лениях, |
которые необход имо сд елать д оступ ными д ля любого |
п ольз ов ателя. Н а п ример, ч тобы п оз в олитьлюбому п ольз ов а телю п олуч ать информациюиз таблицы EXAM_MARKS, можно исп ольз ов а тькома нд у
GRANT SELECT ON EXAM_MARKS TO PUBLIC;
Пред остав лениев сех п рив илегий к таблицев сем п ольз ов ателям обыч но
яв ляется |
нежелательным. |
Все п р ив илегии |
з а |
исключ ением SELECT |
п оз в оляют |
п ольз ов ателю |
из менять (или, |
в |
случ ае REFERENCES, |
огранич ив ать) сод ержаниетаблицы, п оэтому ра зрешениев семп ольз ов а телям из менять сод ержание та блиц может в ыз в ать оп ред еленные п роблемы
обесп еч ения без оп асности |
и з ащ иты д анных. Тем более, ч то п рив илегия |
PUBLIC не огра нич ена в |
п еред ач е п рав только текущ им п ольз ов ателям. |
Л юбой нов ый п ольз ов атель, д оба в ляемый к системе, ав томатич ески п олуч ает э том случ ае п олный набор п рив илегий, наз на ч енный ранее в сем
п ольз ов ателям. |
Поэ тому д ля огр анич ения д оступ а к таблицев сем и в сегд а |
луч ше в сего |
п ред остав ить п рив илегии, отлич ные от SELECT, только |
инд ив ид уальнымп ольз ов ателям.
130
6.5. О т м ена привил егий
О тмена п р ив илегии осущ еств ляется с п омощ ью кома нд ы REVOKE, котора яимеет синтаксис, ана логич ный команд еGRANT.
Н а п ример, команд а
REVOKE INSERT ON STUDENT FROM PETROV;
отменяет |
п рив илегию INSERT в |
та блице STUDENT д ля п ольз ов ателя |
|||
PETROV. Воз можно исп ольз ов а ниев команд еREVOKE сп исков п рив илегий и |
|||||
п ольз ов ателей. Н а п ример |
|
|
|
||
REVOKE INSERT, DELETE ON STUDENT |
|
||||
|
FROM PETROV, SIDOROV; |
|
|
||
След ует иметьв |
в ид у, ч то п рив илегии отменяются тем п ольз ов ателем, |
||||
который |
их п ред остав ил, |
и, |
п р и этом отмена |
ав томатич ески |
|
расп ространяется на |
в сех |
п ольз ов а телей, п олуч ив ших |
от него эту |
||
п рив илегию. |
|
|
|
|
6.6. И спол ь з ование предст авл ений дл я ф ил ь т рац ии привил егий
Д ейств ия |
п рив илегий можно |
сд елать более точ ными, |
исп ольз уя |
|||||
п ред став ления. |
При п еред ач еп р ив илегии п ольз ов ателю в ба з ов ой таблице, |
|||||||
она ав томатич ески ра сп ространяется на |
в се строки, а |
п р и исп ольз ов а нии |
||||||
в оз можных исключ ений UPDATE и REFERENCES, и на в сестолбцы та блицы. |
||||||||
Соз д ав а я п ред став ление, |
котор ое ссыла ется на баз ов ую та блицу, и з атем, |
|||||||
п еред а в ая п р ив илегию уже на это |
п р ед ста в ление, можно огранич итьэти |
|||||||
п рив илегии |
любыми |
в ыражениями |
з ап росе, |
сод ержащ емся |
в |
|||
п ред став лении. Такой метод расширяет в оз можности кома нд ы GRANT. |
|
|||||||
Д лясоз д анияп ред став лений п ольз ов а тельд олжен обла д атьп рив илегией |
||||||||
SELECT в о в сех таблица х, на которыеон ссылается в |
п ред став лении. Е сли |
|||||||
п ред став лениемод ифицир уемое, то люба яиз п рив илегий INSERT, UPDATE |
||||||||
и DELETE, |
котора я п ред остав лена |
п ольз ов ателю в ба з ов ой таблице, буд ет |
||||||
ав тома тич ески |
расп ространяться на п ред став ление. Е сли п рив илегии |
на |
||||||
обнов ление отсутств уют, |
то их нев оз можно п олуч ить и в |
соз д анных |