Uploaded by Владимир Андреев

SQL в примерах и задачах by И. Ф. Астахова, А. П. Толстобров, В. М. Мельников (z-lib.org)

advertisement
И .Ф .А ста х ов а , А .П .Т олстобров , В .М .М ель ников
SQL
в п римера х и з а д а ч а х
У ч ебноеп особие
Д оп ущ ено Н а уч но-метод ич еским сов етом п о
сп ециа льности 010200 “Прикла д на яма тема тика и
информа тика ” У М О унив ерситетов РФ
Воронеж 2001
2
С о д ер ж а н и е
В В Е Д Е НИ Е ........................................................................................6
1. О С НО В НЫ Е П О НЯ Т И Я И О П Р Е Д Е Л Е НИ Я .....................................9
1.1. О сн о вн ы епо н яти я р еляци о н н ы х б а з да н н ы х ............................9
1.2. О тли чи еSQL о т пр о цедур н ы х язы к
о в пр о гр а мми р о ва н и я .......12
1.3. Ин тер а к
ти вн ы й и встр о ен н ы й SQL ..........................................12
1.4. С о ста вн ы еча сти SQL .............................................................13
1.5. Ти пы да н н ы х SQL...................................................................14
1.5.1. Ти п да н н ы х “стр о к
а си мво ло в” .........................................14
1.5.2. Ч и сло вы ети пы да н н ы х ....................................................15
1.5.3. Да та и вр емя ...................................................................16
1.5.4. Н ео пр еделен н ы еи ли пр о пущен н ы еда н н ы е(NULL) ..........17
1.6. Усло ви я и тер ми н о ло ги я ..... О ш ибка! З акл адка не определ ена.
1.7. Учеб н а я б а за да н н ы х .............................................................19
2. В Ы БО Р КА Д АННЫ Х (О П Е Р АТ О Р SELECT)..................................22
2.1. Пр о стейши е SELECT за пр о сы ...............................................22
2.2. О пер а то р ы IN, BETWEEN, LIKE, IS NULL .................................28
2.3. Пр ео б р а зо ва н и евы во да и встр о ен н ы ефун к
ци и .....................31
2.3.1. Ч и сло вы е, си мво льн ы еи стр о к
о вы ек
о н ста н ты ................31
2.3.2. Ар и фмети ческ
и ео пер а ци и для пр ео б р а зо ва н и я
чи сло вы х да н н ы х .............................................................32
2.3.3. С и мво льн а я о пер а ци я к
он к
а тен а ци и стр о к.......................32
2.3.4. С и мво льн ы ефун к
ци и пр ео б р а зо ва н и я б ук
в р а зли чн ы х
сло в в стр о к
е...................................................................33
2.3.5. С и мво льн ы естр о к
о вы ефун к
ци и ......................................33
2.3.6. Фун к
ци и р а б о ты с чи сла ми ...............................................36
2.3.7. Фун к
ци и пр ео б р а зо ва н и я зн а чен и й ..................................38
2.4. Агр еги р о ва н и еи гр уппо вы ефун к
ци и ......................................42
2.5. Пусты езн а чен и я (NULL) в а гр еги р ующ и х фун к
ци ях.................45
2.5.1. Вли ян и еNULL–зн а чен и й в фун к
ци и COUNT .......................45
2.5.2. Вли ян и еNULL–зн а чен и й в фун к
ци и AVG ...........................46
2.6. Р езульта т действи я тр ехзн а чн ы х усло вн ы х о пер а то р о в ..........46
2.7. Упо р ядо чен и евы хо дн ы х по лей (ORDER BY) .............................48
2.8. Вло ж ен н ы епо дза пр о сы ..........................................................50
2.9. Фо р ми р о ва н и есвяза н н ы х по дза пр о со в...................................52
2.10. С вяза н н ы епо дза пр о сы в HAVING..........................................53
2.11. Испо льзо ва н и ео пер а то р а EXISTS ........................................55
2.12. О пер а то р ы ср а вн ен и я с мн о ж ество м зн а чен и й IN, ANY,
ALL.......................................................................................57
3
2.13. О со б ен н о сти о пер а то р о в ANY, ALL, EXISTS пр и
о б р а б о тк
еNULL ....................................................................59
2.14. Испо льзо ва н и е COUNT вместо EXISTS................................61
2.15. О пер а то р о б ъ еди н ен и я UNION ............................................62
2.16. Устр а н ен и едуб ли р о ва н и я в UNION .......................................63
2.17. Испо льзо ва н и еUNION с ORDER BY.........................................65
2.18. Вн ешн еео б ъ еди н ен и е..........................................................66
2.19. С о еди н ен и ета б ли ц с и спо льзо ва н и ем о пер а то р а JOIN.........67
2.19.1. О пер а ци и со еди н ен и я та б ли ц по ср едство м
ссы ло чн о й цело стн о сти ...................................................69
2.19.2. Вн ешн еесо еди н ен и ета б ли ц .........................................70
2.19.3. Испо льзо ва н и епсевдо н и мо в пр и со еди н ен и и та б ли ц.....73
3. МАНИ П УЛ И Р О В АНИ Е Д АННЫ МИ ...............................................77
3.1. К о ма н ды ма н и пули р о ва н и я да н н ы ми ......................................77
3.2. Испо льзо ва н и епо дза пр о со в в INSERT....................................81
3.2.1. Испо льзо ва н и епо дза пр о со в, о сн о ва н н ы х н а та б ли ца х
вн ешн и х за пр о со в............................................................82
3.2.2. Испо льзо ва н и епо дза пр о со в с DELETE .............................82
3.2.3. Испо льзо ва н и епо дза пр о со в с UPDATE .............................84
4. С О З Д АНИ Е О БЪ Е КТ О В БАЗ Ы
Д АННЫ Х ....................................86
4.1. С о зда н и ета б ли ц б а зы да н н ы х ...............................................86
4.2. Испо льзо ва н и еи н дек
са ци и для б ы стр о го до ступа к
да н н ы м .................................................................................87
4.3. Измен ен и есуществующей та б ли цы ........................................88
4.4. Уда лен и ета б ли цы .................................................................89
4.5. О гр а н и чен и я н а мн о ж ество до пусти мы х зн а чен и й да н н ы х.......90
4.5.1. О гр а н и чен и я NOT NULL....................................................91
4.5.2. Ун и к
а льн о сть к
а ко гр а н и чен и ен а сто лб ец........................92
4.5.3. Ун и к
а льн о сть к
а ко гр а н и чен и ета б ли цы ...........................93
4.5.4. Пр и сво ен и еи мен о гр а н и чен и ям.......................................94
4.5.5. О гр а н и чен и епер ви чн ы х к
лючей.......................................94
4.5.6. С о ста вн ы епер ви чн ы ек
лючи ...........................................95
4.5.7. Пр о вер к
а зн а чен и й по лей................................................96
4.5.8. Пр о вер к
а усло ви й с и спо льзо ва н и ем со ста вн ы х по лей.....96
4.5.9. Уста н о вк
а зн а чен и й по умо лча н и ю...................................97
4.6. По ддер ж к
а цело стн о сти да н н ы х ........................................... 100
4.6.1. Вн ешн и еи р о ди тельск
и ек
лючи ..................................... 100
4.6.2. С о ста вн ы евн ешн и ек
лючи ............................................. 101
4.6.3. С мы сл вн ешн его и р о ди тельск
о го к
лючей...................... 101
4.6.4. О гр а н и чен и еFOREIGN KEY (вн ешн его к
люча ) ................ 102
4.6.5. Вн ешн и й к
люч к
а ко гр а н и чен и ета б ли цы ........................ 103
4
4.6.6. Вн ешн и й к
люч к
а ко гр а н и чен и есто лб цо в ....................... 104
4.6.7. По ддер ж а н и ессы ло чн о й цело стн о сти и о гр а н и чен и я
зн а чен и й р о ди тельск
о го к
люча ....................................... 106
4.6.8. Испо льзо ва н и епер ви чн о го к
люча в к
а честве
ун и к
а льн о го вн ешн его к
люча .......................................... 106
4.6.9. О гр а н и чен и я зн а чен и й вн ешн его к
люча ......................... 107
4.6.10. Действи ео гр а н и чен и й вн ешн его и р о ди тельск
о го
к
лючей пр и и спо льзо ва н и и к
о ма н д мо ди фи к
а ци и ........... 107
5. П Р Е Д С Т АВ Л Е НИ Я (VIEW) .......................................................... 111
5.1. Пр едста влен и я – и мен о ва н н ы еза пр о сы ............................... 111
5.2. Пр едста влен и я та б ли ц ......................................................... 112
5.3. Пр едста влен и я сто лб цо в...................................................... 112
5.4. М о ди фи ци р о ва н и епр едста влен и й ....................................... 113
5.5. М а ск
и р ующи епр едста влен и я ............................................... 113
5.5.1. Пр едста влен и я, ма ск
и р ующ и есто лб цы .......................... 113
5.5.2. О пер а ци и мо ди фи к
а ци и в пр едста влен и ях,
ма ск
и р ующи х сто лб цы ................................................... 114
5.5.3. Пр едста влен и я, ма ск
и р ующ и естр о к
и ............................ 114
5.5.4. О пер а ци и мо ди фи к
а ци и в пр едста влен и ях,
ма ск
и р ующи х стр о к
и ...................................................... 115
5.5.5. О пер а ци и мо ди фи к
а ци и в пр едста влен и ях,
ма ск
и р ующи х стр о к
и и сто лб цы ...................................... 116
5.6. Агр еги р о ва н н ы епр едста влен и я............................................ 118
5.7. Пр едста влен и я, о сн о ва н н ы ен а н еск
о льк
и х та б ли ца х ........... 118
5.8. Пр едста влен и я и по дза пр о сы ............................................... 119
5.9. О гр а н и чен и я пр и мен ен и я о пер а то р а SELECT для со зда н и я
пр едста влен и й.................................................................... 120
5.10. Уда лен и епр едста влен и й.................................................... 120
5.11. Измен ен и езн а чен и й в пр едста влен и ях............................... 121
5.12. Пр и мер ы о б н о вляемы х и н ео б н о вляемы х пр едста влен и й ... 122
5.13. Пр едста влен и я, б а зи р ующи еся н а др уги х пр едста влен и ях.. 124
6. О П Р Е Д Е Л Е НИ Е П Р АВ Д О С Т УП А П О Л ЬЗ О В АТ Е Л Е Й
К Д АННЫ М ................................................................................. 126
6.1. По льзо ва тели и пр и ви леги и .................................................. 126
6.2. С та н да р тн ы епр и ви леги и ...................................................... 127
6.3. К о ма н да GRANT .................................................................... 128
6.4. Испо льзо ва н и еа р гумен то в ALL и PUBLIC............................. 129
6.5. О тмен а пр и ви леги й .............................................................. 130
6.6. Испо льзо ва н и епр едста влен и й для фи льтр а ци и
пр и ви леги й......................................................................... 130
6.6.1. О гр а н и чен и епр и ви леги и SELECT для о пр еделен н ы х
сто лб цо в........................................................................ 131
5
6.6.2. О гр а н и чен и епр и ви леги й для о пр еделен н ы х стр о к......... 131
6.6.3. Пр едо ста влен и едо ступа то льк
о ки звлечен н ы м
да н н ы м .......................................................................... 132
6.6.4. Испо льзо ва н и епр едста влен и й в к
а честве
а льтер н а ти вы ко гр а н и чен и ям ........................................ 133
6.7. Др уги ети пы пр и ви леги й....................................................... 133
6.8. Ти пи чн ы епр и ви леги и си стемы ............................................. 134
6.9. С о зда н и еи уда лен и епо льзо ва телей.................................... 135
6.10. С о зда н и еси н о н и мо в (SYNONYM) .......................................... 136
6.11. С и н о н и мы о б щего по льзо ва н и я (PUBLIC) .......................... 138
6.12. Уда лен и еси н о н и мо в........................................................... 138
7. УП Р АВ Л Е НИ Е Т Р АНЗ АКЦИ Я МИ ................................................ 139
П Р И Л О Ж Е НИ Е 1. О Т В Е Т Ы К УП Р АЖ Е НЕ НИ Я М … .. ...................... 145
П Р И Л О Ж Е НИ Е 2. З АД АЧИ П О П Р О Е КТ И Р О В АНИ Ю БД
Л И Т Е Р АТ УР А ............................................................................. 159
П Р Е Д МЕ Т НЫ Й УКАЗ АТ Е Л Ь
Ра бота в ып олнена п р и сод ейств ии Российского фонд а
Фунд а мента льных исслед ов а ний, гр а нт № 99-01-00327.
6
Введен и е
Инфор ма ционные системы, исп ользующ ие ба з ы д а нных, в на стоящ ее
в р емя п р ед ста в л яют собой од ну из в а жнейших обла стей сов р еменных
комп ьютер ных технологий. С э той сфер ой св яз а на больша я ч а сть
сов р еменного р ынка п р огр а ммных п р од уктов . О д ной из общ их тенд енций в
р а з в итии та ких систем яв ляются п р оцессы интегр а ции и ста нд а р тиз а ции,
з а тр а гив а ющ иестр уктур ы д а нных и сп особы их обр а ботки и интер п р ета ции,
системное и п р икла д ное п р огр а ммное обесп еч ение, ср ед ств а р а з р а ботки
в з а имод ейств ия комп онентов ба з д а нных и т.д . Сов р еменные системы
уп р а в ления ба з а ми д а нных (СУ Б Д ) основ а ны на р еляционной мод ели
п р ед ста в ленияд а нных – в большой степ ени бла год а р яп р остотеи ч еткости ее
концеп туа льных п онятий и стр огого ма тема тич еского обоснов а ния.
Н еотъемлема я и в а жна я ч а сть любой системы, в ключ а ющ ей ба з ы
д а нных – яз ыков ые ср ед ств а , п р ед оста в ляющ ие в оз можность п олуч ения
д оступ а к д а нным и осущ еств ления необход имых д ейств ий на д сод ер жимым
д а нных, оп р ед еленияих стр уктур , сп особов исп ол ьзов а нияи интер п р ета ции.
Я з ык SQL п ояв илсяв 70-егод ы ка к од но из та ких ср ед ств . Е го п р ототип был
р а з р а бота н фир мой IBM и из в естен п од на з в а нием SEQUEL (Structured
English QUEry Language). SQL в обр а л в себя д остоинств а р ел яционной
мод ели, в ч а стности д остоинств а лежа щ его в ее основ е ма тема тич еского
а п п а р а та р еляционной а лгебр ы и р еляционного исч исления, исп ользуя п р и
э том ср а в нительно небольшое ч исло оп ер а тор ов и относительно п р остой
синта ксис.
Б ла год а р ясв оим ка ч еств а м яз ык SQL ста л – в на ч а ле“д е-фа кто”, а з а тем
– и официа льно утв ер жд енным в ка ч еств е ста нд а р та яз ыком р а боты с
р еляционными ба з а ми д а нных. Э тот ста нд а р т п од д ер жив а ется в семи
в ед ущ ими мир ов ыми фир ма ми, д ейств ующ ими в обла сти технологии ба з
д а нных. Исп ользов а ниев ыр а з ительного и э ффектив ного ста нд а р тного яз ыка
п оз в олило обесп еч ить в ысокую степ ень нез а в исимости р а з р а ба тыв а емых
п р икла д ных п р огр а ммных систем от конкр етного тип а исп ользуемой СУ Б Д ,
7
сущ еств енно п од нять ур ов ень и унифика цию инстр умента льных ср ед ств
р а з р а ботки п р иложений, р а бота ющ их с р еляционными ба з а ми д а нных.
Г ов ор я о ста нд а р те яз ыка SQL, след ует з а метить, ч то большинств о его
коммер ч еских р еа лиз а ций имеют некотор ые, большие или меньшие,
отступ ления от ста нд а р та . Э то, конеч но, ухуд ша ет сов местимостьсистем,
исп ользующ их р а з лич ные“д иа лекты” SQL. Н о, с д р угой стороны, п олез ные
р а сшир ения р еа лиз а ций яз ыка относительно ста нд а р та обесп еч ив а ют
р а з в итие яз ыка и со в р еменем в ключ а ются в нов ые р ед а кции ста нд а р та .
У ч итыв а я место, з а нима емое яз ыком SQL в сов р еменных инфор ма ционных
технологиях, его з на ние необход имо л юбому сп ециа листу, р а бота ющ ему в
э той обла сти.
Д а нное п особиеп р ед на з на ч ено в п ер в ую оч ер ед ьд ля п р еп од а в а телей и
студ ентов , и ор иентир ов а но на обуч ение основ а м исп ользов а ния яз ыка SQL
п р и п р ов ед ении п р а ктич еских з а нятий п о уч ебным кур са м, св яз а нным с
из уч ением инфор ма ционных систем, основ а нных на ба з а х д а нных. В
на стоящ еев р емя та киекур сы в ход ят в уч ебныеп ла ны р яд а унив ер ситетских
сп ециа льностей. С э той целью в п особии большое в нима ние уд елялось
п од бор у ма тер иа ла д ля п р имер ов , а та кжез а д а ч и уп р а жнений, необход имых
д ля п олуч ения п р а ктич еских на в ыков соста в ления SQL-з а п р осов к ба з е
д а нных, а в оп р ед елениях и п р имер а х п р иор итет отд а в а лся п р остоте и
д оход ч ив ости ма тер иа ла , в оз можно, с некотор ым ущ ер бом стр огости его
из ложения. По э той п р ич ине в п особие не в ошли особенности яз ыка ,
тр ебующ ие д ля осв оения и исп ользов а ния более глубоких з на ний о
функционир ов а нии сов р еменных СУ Б Д и инфор ма ционных систем на их
основ е, из уч ениеи исп ользов а ниекотор ых имеет смысл только п р и услов ии
п олуч ения на в ыков п р а ктич еского исп ользов а ния ба з ов ых констр укций
яз ыка . Пр и из ложении ма тер иа ла а в тор ы п о в оз можности ста р а лись, кр оме
сп ециа льно огов ор енных случ а ев , неотступ а тьот ста нд а р та яз ыка SQL.
В п р иложении 1 п особия п р ив ед ены отв еты на большинств о
п р ив ед енных в нем з а д а ч . Пр имер ы и з а д а ч и п р отестир ов а ны с
исп ользов а нием СУ Б Д Oracle и отеч еств енной СУ Б Д Л ИН ТЕ Р. Л ИН ТЕ Р
п р ед ста в ляет собой п олнома сшта бный кр осс-п ла тфор менный SQL-сер в ер ,
соотв етств ующ ий основ ным мир ов ым ста нд а р та м, п р ед ъяв ляемым к
система м та кого кла сса . Д ля некоммер ч еского исп ользов а ния уч ебным
з а в ед ениям он п р ед оста в ляется бесп ла тно. Б олее п од р обную инфор ма цию о
8
системе можно п олуч итьна официа льном web-са йте комп а нии РЕ Л Э К С п о
а д р есу www.relex.ru.
В п р иложении 2 п р ив ед ены тексты д оп ол нительных з а д а ч п о
п р оектир ов а нию ба з д а нных. Э ти з а д а ч и могут исп ользов а ться в ка ч еств е
тем кур сов ых р а бот и д ляса мостоятельной р а боты студ ентов .
А в тор ы на д еются, ч то п особиеока жетсяп олез ным нетолько
п р еп од а в а телям и студ ента м, но и д р угим ч ита телям, з а интер есов а нным в
п олуч ении на ч а льных п р а ктич еских на в ыков исп ользов а нияяз ыка SQL.
9
1. О сн о вн ы епо н яти я и о пр еделен и я
1.1. О сновны е поня т ия рел я ц ионны х баз
данны х
О снов ой сов р еменных систем, исп ользующ их ба з ы д а нных, яв ляется
р еляци о нна я м о д ель д а нны х. В э той мод ели д а нные, п р ед ста в ляющ ие
инфор ма цию о п р ед метной обла сти, ор га низ ов а ны в в ид ед в умер ных та блиц,
на з ыв а емых о т но ш ени ям и . Н а р ис. 1 п р ив ед ен п р имер та кой та блицыотношенияи п оясняютсяоснов ныетер мины р еляционной мод ели.
Н а и мен о ва н и е
а тр и б ута
К люч
За го ло во к
о тн о шен и я
К о д_студ
Имя_студ
Фа к
ультет
К ур с
0043
2004
5162
0007
0634
0228
1735
Ива н о в
Петр о в
С и до р о в
О р ло в
С ми р н о в
По по в
К узн ецо в
Ф и зи ческ
ий
Х и ми ческ
ий
Ф и зи ческ
ий
Х и ми ческ
ий
Ф и зи ческ
ий
Исто р и ческ
ий
Ф и зи ческ
ий
1
2
2
4
3
4
1
К о р теж
О тн о шен и е
Зн а чен и еа тр и б ута
Атр и б ут
Рис. 1. Пр имер та блицы-отношенияр еляционной ба з ы д а нных
• О т но ш ени е – э то та блица , п од обна я п р ив ед енной на р ис. 1, и состоящ а я
из стр ок и столбцов . Вер хняя стр ока та блицы-отношения на з ыв а ется
10
за г о ло в ко м о т но ш ени я. Тер мины о т но ш ени е и т а бли ца обыч но
уп отр ебляются ка к синонимы, од на ко в яз ыке SQL исп ользуется тер мин
т а бли ца .
• Стр оки та блицы-отношения на з ыв а ются ко р т еж а м и или за пи сям и .
Столбцы на з ыв а ютсяа т р и бут а м и . Тер мины – а тр ибут, столбец, колонка ,
п оле обыч но исп ользуются ка к синонимы. К а жд ый а тр ибут имеет имя,
которое д олжно быть уника льным в конкр етной та блице-отношении,
од на ко в р а з ных та блица х имена а тр ибутов могут сов п а д а ть.
• К олич еств о кор тежей в та блице-отношении на з ыв а ется ка р д и на льны м
чи сло м отношения, а колич еств о а тр ибутов на з ыв а ется ст епенью
отношения.
• Ключ ил и пер в и чны й ключ отношения – э то уника льный ид ентифика тор
стр ок (кортежей), то естьта кой а тр ибут (на бор а тр ибутов ), д лякотор ого в
любой момент в р емени в отношении несущ еств ует стр ок с од ина ков ыми
з на ч ениями э того а тр ибута (на бор а а тр ибутов ). Н а п р ив ед енном р исунке
та блицы яч ейка с именем ключ ев ого а тр ибута имеет нижнюю гр а ницу в
в ид ед в ойной ч ер ты.
• Д о м ен отношения – э то сов окуп ность з на ч ений, из котор ых могут
в ыбир а ться з на ч ения конкр етного а тр ибута . То есть, конкр етный на бор
имеющ ихся в та блице з на ч ений а тр ибута в любой момент в р емени
д олжен быть п од множеств ом множеств а з на ч ений д омена , на котор ом
оп р ед елен э тот а тр ибут.
В общ ем случ а е на од ном и том же д омене могут быть оп р ед елены
з на ч ения р а з ных а тр ибутов . Ва жным яв ляется то, ч то д омены в в од ят
огр а нич ения на оп ер а ции ср а в нения з на ч ений р а з лич ных а тр ибутов . Э ти
огр а нич ения состоят в том, ч то кор р ектным обр а з ом можно ср а в нив а ть
межд у собой только з на ч ения а тр ибутов , оп р ед еленных на од ном и том же
д омене.
О тношения р еляционной
св ойств а ми:
ба з ы
д а нных
обла д а ют
• в отношениях нед олжно бытькор тежей-д ублика тов .
• кор тежи отношений неуп ор яд оч ены.
• а тр ибуты отношений та кженеуп ор яд оч ены.
след ующ ими
11
Из э тих св ойств отношенияв ытека ют след ующ иев а жныеслед ств ия.
• Из уника льности кор тежей след ует, ч то в отношении в сегд а имеется
а тр ибут или на бор а тр ибутов , п оз в оляющ их и д ент и ф и ци р о в а т ь кор теж,
д р угими слов а ми в отношении в сегда естьп ер в ич ный ключ .
• Из неуп ор яд оч енности кор тежей след ует, в о-п ер в ых, ч то в отношении не
сущ еств ует д р угого сп особа а д р еса ции кор тежей, кр оме а д р еса ции по
ключу, в о-в тор ых, ч то в отношении не сущ еств ует та ких п онятий ка к
п ер в ый кор теж, п ослед ний, п р ед ыд ущ ий, след ующ ий и т.д .
• Из неуп ор яд оч енности а тр ибутов след ует, ч то ед инств енным сп особом
их а д р еса ции в з а п р оса х яв ляетсяисп ользов а ниена именов а нияа тр ибута .
О тносительно св ойств а р еляционного отношения, ка са ющ егося
отсутств ия кор тежей-д ублика тов , след ует сд ела тьв а жноез а меч а ние. В э том
п ункте SQL не п олностью соотв етств ует р еляционной мод ели. А именно, в
отношениях, яв ляющ ихся р ез ульта та ми з а п р осов , SQL д о пуска ет на лич ие
од ина ков ых стр ок. Д ля их устр а нения в з а п р осе исп ользуется ключ ев ое
слов о DISTINCT (см. ниже).
Инфор ма ция в р еляционных ба з а х д а нных, ка к п р а в ило, хр а нится не в
од ной та блице-отношении, а в нескольких. Пр и соз д а нии нескольких та блиц
в з а имосв яз а нной инфор ма ции п ояв ляется в оз можность в ып олнения более
сложных оп ер а ций с д а нными, то естьболеесложной обр а ботки д а нных. Д ля
р а боты со св яз а нными д а нными из нескольких та бл иц в а жным яв ляется
п онятиета к на з ыв а емых в неш ни х ключей.
Внеш ни м ключо м та блицы на з ыв а етсяа тр ибут или на бор а тр ибутов э той
та блицы, ка жд ое з на ч ение котор ых в текущ ем состоянии та блицы в сегд а
сов п а д а ет со з на ч ением а тр ибутов , яв л яющ ихся ключ ом, в д р угой та блице.
Внешниеключ и исп ользуютсяд лясв яз ыв а нияз на ч ений а тр ибутов из р а з ных
та блиц. С п омощ ью в нешних ключ ей обесп еч ив а ется та к на з ыв а ема я
ссылоч на я целостность ба з ы д а нных, то есть согла сов а нность д а нных,
оп исыв а ющ их од ни и тежеобъекты, но хр а нящ ихсяв р а з ных та блица х.
12
1.2. О т л ичие SQL от проц едурны х я з ы ков
програм м ирования
Я з ык
SQL
относится к
кла ссу
неп р оцед ур ных
яз ыков
п р огр а ммир ов а ния. В отлич ие от унив ер са льных п р оцед ур ных яз ыков ,
котор ые та кже могут бытьисп ользов а ны д ля р а боты с ба з а ми д а нных, яз ык
SQL ор иентир ов а н нена за пи си , а на м но ж ест в а .
Э то оз на ч а ет след ующ ее. В ка ч еств е в ход ной инфор ма ции д ля
фор мулир уемого на яз ыке SQL з а п р оса к ба з е д а нных исп ользуется
м но ж ест в о ко р т еж ей-за пи сей од ной или нескольких та блиц-отношений. В
р ез ульта те в ып олнения з а п р оса та кже обр а з уется м но ж ест в о ко р т еж ей
р ез ультир ующ ей та блицы-отношения. Д р угими слов а ми, в SQL р ез ульта том
любой оп ер а ции на д отношениями та кже яв ляется отношение. За п р ос SQL
з а д а ет неп р оцед ур у, то естьп ослед ов а тельностьд ейств ий, необход имых д ля
п олуч ения р ез ульта та , а услов ия, котор ым д олжны уд ов летв ор ятькор тежи
р ез ультир ующ его отношения, сфор мулир ов а нные в тер мина х в ход ного (или
в ход ных) отношений.
1.3. И нт еракт ивны й и вст роенны й SQL
Сущ еств уют и исп ользуются д в е фор мы яз ыка SQL: и нт ер а кт и в ны й
SQL и в ст р о енны йSQL.
Инт ер а кт и в ны й SQL исп ользуется д ля неп оср ед ств енного в в од а SQLз а п р осов п ользов а телем и п олуч енияр ез ульта та в интер а ктив ном р ежиме.
Вст р о енны й SQL состоит из кома нд SQL, в стр оенных в нутр ьп р огр а мм,
котор ые обыч но на п иса ны на некотор ом д р угом яз ыке (Па ска ль, С, С++ и
д р .). Э то д ела ет п р огр а ммы, на п иса нные на та ких яз ыка х, более мощ ными,
гибкими и э ффектив ными, обесп еч ив а я их п р именение д ля р а боты с
д а нными, хр а нящ имися в р еляционных ба з а х. Пр и э том, од на ко, тр ебуются
д оп олнительныеср ед ств а обесп еч ения интер фейса SQL с яз ыком, в котор ый
он в стр а ив а ется.
Д а нна я книга п осв ящ ена интер а ктив ному SQL, п оэ тому в ней не
обсужд а ются в оп р осы п остр оения интер фейса , п оз в оляющ его св яз а тьSQL с
д р угими яз ыка ми п р огр а ммир ов а ния.
13
1.4. С ост авны е част и SQL
И интер а ктив ный, и в стр оенный SQL п од р а з д еляются на след ующ ие
соста в ныеч а сти.
Язы к О пр ед елени я Д а нны х – DDL (Data Definition Language), д а ет
в оз можность соз д а ния, из менения и уд а ления р а з лич ных объектов ба з ы
д а нных (та блиц, инд ексов , п ользов а телей, п р ив илегий и т.д .).
К ч ислу д оп олнительных функций яз ыка оп р ед еления д а нных DDL
могут быть в ключ ены ср ед ств а оп р ед еления огр а нич ений целостности
д а нных, оп р ед еления п ор яд ка стр уктур хр а нения д а нных, оп иса ния
э лементов физ ич еского ур ов няхр а ненияд а нных.
Язы к О бр а бо т ки Д а нны х – DML (Data Manipulation Language),
п р ед оста в ляет в оз можность в ыбор ки инфор ма ции из ба з ы д а нных и ее
п р еобр а з ов а ния.
Тем неменее, э то нед в а р а з лич ных яз ыка , а комп оненты ед иного SQL.
14
1.5. Т ипы данны х SQL
В яз ыке SQL имеются ср ед ств а , п оз в ол яющ ие д ля ка жд ого а тр ибута
ука з ыв а тьтип д а нных, котор ому д олжны соотв етств ов а тьв сез на ч енияэ того
а тр ибута .
След ует отметить, ч то оп р ед елениетип ов д а нных яв ляетсятой ч а стью, в
которой коммер ч еские р еа лиз а ции яз ыка не п олностью согла суются с
тр ебов а ниями официа льного ста нд а р та SQL. Э то объясняется, в ч а стности,
жела нием сд ела тьSQL сов местимымс д р угими яз ыка ми п р огр а ммир ов а ния.
1.5.1. Т ип данны х “ст рока сим вол ов”
Ста нд а р т п од д ер жив а ет только од ин тип д ля п р ед ста в ления текста :
CHARACTER(CHAR). Э тот тип д а нных п р ед ста в ляет собой симв ольные
стр оки фиксир ов а нной д лины. Е го синта ксис имеет в ид :
CHARACTER [(д ли на )]
или
CHAR [(д ли на )].
Текстов ые з на ч ения п оля та блицы, д ля котор ого оп р ед елен тип CHAR,
имеют ф и кси р о в а нную д лину, котор а я оп р ед еляется п а р а метр ом д ли на . Э тот
п а р а метр может п р инима ть з на ч ения от 1 д о 255, то есть строка может
сод ер жа тьд о 255 симв олов . Е сли в о в в од имой в п оле текстов ой конста нте
фа ктич еское ч исло симв олов меньше ч исла , оп р ед еленного п а р а метр ом
д ли на , то э та конста нта а в тома тич ески д оп олняется сп р а в а п р обела ми д о
з а д а нного ч исла симв олов .
Н екотор ые р еа лиз а ции яз ыка SQL п од д ер жив а ют в ка ч еств е тип а
д а нных стр оки п ер еменной д лины. Э тот тип может обоз на ч а тьсяключ ев ыми
слов а ми VARCHAR(), CHARACTER VARYING или CHAR VARYING(). О н
оп исыв а ет текстов ую стр оку, котор а я может иметьпр о и зв о льную д лину д о
оп р ед еленного конкр етной р еа лиз а цией SQL ма ксимума (в Oracle д о 2000
симв олов ). В отлич ие от тип а CHAR в э том случ а е п р и в в од е текстов ой
конста нты, фа ктич еска яд лина котор ой меньшез а д а нной, неп р оиз в од итсяее
д оп олненияп р обела ми д о з а д а нного ма ксима льного з на ч ения.
К онста нты, имеющ иетип CHARACTER и VARCHAR, в в ыр а жениях SQL
з а ключ а ютсяв од иноч ныека в ыч ки, на п р имер ‘т екст ’.
15
След ующ иеп р ед ложенияэ кв ив а лентны:
VARCHAR[(д ли на )], CHAR VARYING[(д ли на )],
CHARACTER VARYING[(д ли на )]
Е сли д лина стр оки не ука з а на яв но, она п ола га ется р а в ной од ному
симв олу в о в сех случ а ях.
По ср а в нению с тип ом CHAR тип д а нных VARCHAR п оз в оляет более
э кономно исп ользов а ть п а мять, в ыд еляемую д л я хр а нения текстов ых
з на ч ений, и ока з ыв а ется более уд обным п р и в ып олнении оп ер а ций
св яз а нных со ср а в нениемтекстов ых конста нт.
1.5.2.
Числ овы е т ипы данны х
Ста нд а р тными ч ислов ыми тип а ми д а нных SQL яв ляются:
•
INTEGER – исп ользуется д ля п р ед ста в ления целых ч исел в д иа п а з онеот
–231 д о +231 .
•
SMOLLINT – исп ользуется д ля п р ед ста в ления целых ч исел в д иа п а з оне
меньшем, ч емд ляINTEGER, а именно – от –215 д о +215.
•
DECIMAL (т о чно ст ь[,м а сш т а б]) – д есятич ное ч исло с фиксир ов а нной
точ кой, точ ность ука з ыв а ет, сколько з на ч а щ их цифр имеет ч исло.
М а сшта б ука з ыв а ет ма ксима льноеч исло цифр сп р а в а от точ ки
•
NUMERIC (т о чно ст ь[,м а сш т а б]) – д есятич ное ч исло с фиксир ов а нной
точ кой, та коеже, ка к и DECIMAL.
•
FLOAT [(т о чно ст ь)] – ч исло с п ла в а ющ ей точ кой и ука з а нной
минима льной точ ностью.
•
REAL – ч исло та кое же, ка к п р и тип е FLOAT, з а исключ ением того, ч то
точ ностьуста на в лив а ется п о умолч а нию в з а в исимости от конкр етной
р еа лиз а ции SQL.
•
DOUBLE PRECISION – ч исло та кое же, ка к и REAL, но точ ностьв д в а
р а з а п р ев ыша ет точ ностьд ляREAL.
СУ Б Д Oracle исп ользует д оп олнительно тип д а нных NUMBER д ля
п р ед ста в ления в сех ч ислов ых д а нных, целых, с фиксир ов а нной или
16
п ла в а ющ ей точ кой. Е го синта ксис:
NUMBER [(т о чно ст ь[, м а сш т а б])].
Е сли з на ч ение п а р а метр а т о чно ст ь не ука з а но яв но, оно п ола га ется
р а в ным 38. Зна ч ение п а р а метр а м а сш т а б п о умолч а нию п р ед п ола га ется
р а в ным 0. Зна ч ение п а р а метр а т о чно ст ь может из меняться от 1 д о 38;
з на ч ение п а р а метр а м а сш т а б может из меняться от –84 д о 128.
Исп ользов а ние отр ица тельных з на ч ений ма сшта ба оз на ч а ет сд в иг
д есятич ной точ ки в стор ону ста р ших р а з р яд ов . Н а п р имер , оп р ед еление
NUMBER (7, –3) оз на ч а ет окр углениед о тысяч .
Тип ы DECIMAL и NUMERIC п олностью э кв ив а лентны тип у NUMBER.
Синта ксис: DECIMAL [(т о чно ст ь[, м а сш т а б])],
DEC [(т о чно ст ь[, м а сш т а б])],
NUMERIC [(т о чно ст ь[, м а сш т а б])].
1.5.3. Д ат а и врем я
Тип д а нных, п р ед на з на ч енный д ля п р ед ста в ления д а т ы и в р ем ени ,
та кже яв ляется неста нд а р тным, хотя и ч р ез в ыч а йно п олез ным. Поэ тому д ля
точ ного в ыяснения того, ка кие тип ы д а нных п од д ер жив а ет конкр етна я
СУ Б Д , след ует обр а щ а тьсяк еед окумента ции.
В СУ Б Д Oracle имеется тип DATE, исп ользуемый д л я хр а нения д а ты и
в р емени. Под д ер жив а ются д а ты, на ч ина я от 1 янв а р я 4712 г. д о н.э . и д о 31
д ека бр я4712 г. Пр и оп р ед елении д а ты без уточ нения в р емени п о умолч а нию
п р инима етсяв р емяп олуноч и.
Н а лич ие тип а д а нных д л я хр а нения д а ты и в р емени п оз в оляет
п од д ер жив а ть сп ециа льную а р ифметику д а т и в р емен. Д оба в ление к
п ер еменной тип а DATE целого ч исла оз на ч а ет ув елич ение д а ты на
соотв етств ующ ееч исло д ней, а в ыч ита ниесоотв етств ует оп р ед елению более
р а нней д а ты.
К онста нты тип а DATE
з а п исыв а ются в з а в исимости от фор ма та ,
п р инятого в оп ер а ционной системе. Н а п р имер ‘03.05.1999’ или ‘12/06/1989’,
или ‘03-nov-1999’, или ‘03-apr-99’.
17
1.5.4. Неопредел енны е ил и пропущ енны е данны е (NULL)
Д ля обоз на ч ения отсутств ующ их, п р оп ущ енных или неиз в естных
з на ч ений а тр ибута в SQL исп ользуется ключ ев ое слов о NULL. Д ов ольно
ч а сто можно в стр етить слов осоч ета ние “а т р и бут и м еет зна чени е NULL”.
Стр ого гов ор я, NULL не яв ляется з на ч ением в обыч ном п онима нии, а
исп ользуется именно д ля обоз на ч ения того фа кта , ч то д ейств ительное
з на ч ениеа тр ибута на са мом д елеп р оп ущ ено или неиз в естно. Э то п р ив од ит к
р яд у особенностей, ч то след ует уч итыв а ть п р и исп ользов а нии з на ч ений
а тр ибутов , котор ыемогут на ход итьсяв состоянии NULL.
• В а гр егир ующ их функциях, п оз в оляющ их п ол уч а тьсв од ную инфор ма цию
п о множеств у з на ч ений а тр ибута , на п р имер , сумма р ное или ср ед нее
з на ч ение, д ля обесп еч ения точ ности и од ноз на ч ности толков а ния
р ез ульта тов отсутств ующ иеили NULL-з на ч енияа тр ибутов игнор ир уются.
• У слов ные оп ер а тор ы от булев ой д в уз на ч ной логики true/false
р а сшир яютсяд о тр ехз на ч ной логики true/false/unknown.
• Все оп ер а тор ы, з а искл юч ением оп ер а тор а конка тена ции стр ок “ || ”,
в оз в р а щ а ют п устоез на ч ение (NULL), если з на ч ениелюбого из оп ер а нд ов
отсутств ует (имеет “з на ч ениеNULL”).
• Д ля п р ов ер ки на п устое з на ч ение след ует исп ользов а ть оп ер а тор ы
IS NULL и IS NOT NULL (исп ользов а ние д л я э того оп ер атора
ср а в нения“= ” яв ляетсяошибкой).
• Функции п р еобр а з ов а ния тип ов , имеющ ие NULL в ка ч еств е а р гумента ,
в оз в р а щ а ют п устоез на ч ение(NULL).
1.6. И спол ь з уем ы е т ерм ины и обоз начения
Ключев ы е сло в а – э то исп ользуемыев в ыр а жениях SQL слов а , имеющ ие
сп ециа льное на з на ч ение (на п р имер , они могут обоз на ч а ть конкр етные
кома нд ы SQL). К люч ев ые слов а нельзя исп ользов а тьд ля д р угих целей, к
п р имер у, в ка ч еств е имен объектов ба з ы д а нных. В книге они в ыд еляются
шр ифтом: КЛЮЧЕВОЕСЛОВО.
Ко м а нд ы , или пр ед ло ж ени я, яв ляются инстр укциями, с п омощ ью
18
котор ых SQL обр а щ а ется к ба з е д а нных. К ома нд ы состоят из од ной или
более логич еских ч а стей, на з ыв а емых п р ед ложениями. Пр ед ложения
на ч ина ютсяключ ев ымслов ом и состоят из ключ ев ых слов и а р гументов .
О бъекты ба з ы д а нных, имеющ ие имена (та блицы, а тр ибуты и д р .), в
книгета кжев ыд еляютсяособым обр а з ом: ТАБЛИЦА1, АТРИБУТ_2.
В оп иса нии синта ксиса кома нд SQL оп ер а тор оп р ед еления “::=”
р а з д еляет оп р ед еляемый э лемент (слев а от оп ер а тор а ) и собств енно его
оп р ед еление (сп р а в а от оп ер а тор а); кв а д р а тные скобки “[ ]” ука з ыв а ют
нео бяза т ельны й э лемент синта ксич еской констр укции; многоточ ие “...”
ука з ыв а ет, ч то в ыр а жение, п р ед шеств ующ ее ему, может п ов тор яться любое
ч исло р а з ; фигур ныескобки “{ }”объед иняют п ослед ов а тельностьэ лементов
в ло ги ческую гр уппу, од ин из э лементов котор ой д олжно бытьобяз а тельно
исп ользов а н; в ер тика льна я ч ер та “|” ука з ыв а ет, ч то ч а сть оп р ед еления,
след ующ а я з а э тим симв олом, яв ляется од ним из в оз можных в а р иа нтов ; в
углов ыескобки “< >” з а ключ а ютсяэ лементы, котор ыеобъясняются п о мер е
того, ка к в в од ятся.
19
1.7. Учебная баз а данны х
В п р ив од имых в п особии п р имер а х п остр оения SQL-з а п р осов и
контр ольных уп р а жнениеях исп ользуется ба з а д а нных, состоящ а я из
след ующ их та блиц.
Та блица 1.1. STUDENT (Студент)
STUDENT_ID
SURNAME
NAME
STIPEND KURS
1
3
6
10
12
265
32
654
276
55
Ив а нов
Петров
Сид оров
К уз нецов
За йцев а
Па в лов
К отов
Л укин
Петров
Б елкин
… …
Ив а н
Петр
Ва д им
Б орис
О льга
А нд рей
Па в ел
А ртем
А нтон
Ва д им
… …
150
200
150
0
250
0
150
200
200
250
… …
… …
1
3
4
2
2
3
5
3
4
5
… …
CITY
О рел
К урск
Москв а
Б рянск
Л ип ецк
Воронеж
Б елгор од
Воронеж
NULL
Воронеж
… …
BIRTHDAY UNIV_ID
3/12/1982
1/12/1980
7/06/1979
8/12/1981
1/05/1981
5/11/1979
NULL
1/12/1981
5/08/1981
7/01/1980
… …
10
10
22
10
10
10
14
10
22
10
… …
STUDENT_ID – числовой код, идентифицирующий студента,
SURNAME – фамилия студента,
NAME – имя студента,
STIPEND – стипендия, которую получает студент,
KURS – курс, на котором учится студент,
CITY – город, в котором живет студент,
BIRTHDAY – дата рождения студента,
UNIV_ID – числовой код, идентифицирующий университет, в
котором учится студент.
Та блица 1.2. LECTURER (Преподаватель)
LECTURER_ID
24
46
74
108
276
328
… …
SURNAME
NAME
CITY
К олесников
Н иконов
Л агутин
Струков
Н иколаев
Сорокин
… …
Б орис
Ив а н
Па в ел
Н иколай
Виктор
А нд рей
… …
Вор онеж
Вор онеж
М оскв а
М оскв а
Вор онеж
О рел
… …
LECTURER_ID
–
преподавателя,
числовой
код,
UNIV_ID
10
10
22
22
10
10
… …
идентифицирующий
20
SURNAME – фамилия преподавателя,
NAME – имя преподавателя,
CITY – город, в котором живет преподаватель,
UNIV_ID – идентификатор университета, в котором работает
преподаватель.
Та блица 1.3. SUBJECT (Предмет обучения)
SUBJ_ID
SUBJ_NAME
10
22
43
56
94
73
Информа тика
Физ ика
М а тематика
История
А нглийский
Физ кул ь
тура
… …
… …
HOUR
SEMESTER
56
34
56
34
56
34
… …
1
1
2
4
3
5
… …
SUBJ_ID – идентификатор предмета обучения,
SUBJ_NAME – наименование предмета обучения,
HOUR – количество часов, отводимых на изучение предмета,
SEMESTER – семестр, в котором изучается данный предмет.
Та блица 1.4. UNIVERSITY (Университеты)
UNIV_ID
22
10
11
32
14
15
18
… …
UNIV_NAME
МГ У
ВГ У
Н ГУ
РГ У
БГУ
ТГ У
ВГ МА
… …
RATING
606
296
345
416
326
368
327
… …
CITY
М оскв а
Воронеж
Н ов осибирск
Ростов
Б елгор од
Томск
Воронеж
… …
UNIV_ID – идентификатор университета,
UNIV_NAME – название университета,
RATING – рейтинг университета,
CITY – город, в котором расположен университет.
21
Та блица 1.5. EXAM_MARKS (Экзаменационные оценки)
EXAM_ID
STUDENT_ID
SUBJ_ID
MARK
EXAM_DATE
145
34
75
238
639
43
12
32
55
12
55
6
10
10
10
22
22
22
5
4
5
3
NULL
12/01/2000
23/01/2000
05/01/2000
17/06/1999
22/06/1999
18/01/2000
… …
… …
… …
… …
4
… …
EXAM_ID – идентификатор экзамена,
STUDENT_ID – идентификатор студента,
SUBJ_ID – идентификатор предмета обучения,
MARK – экзаменационная оценка,
EXAM_DATE – дата экзамена.
Та блица 1.6. SUBJ_LECT (Учебные дисциплины преподавателей)
LECTURER _ID
SUBJ_ID
24
46
74
108
276
328
24
46
74
108
276
328
… …
… …
LECTURER_ID – идентификатор преподавателя,
SUBJ_ID – идентификатор предмета обучения.
В О П РО С Ы
1. К а киеп оляп р ив ед енных та блиц яв ляютсяп ер в ич ными ключ а ми?
2. К а киед а нныехр а нятсяв столбце2 в та блице“Пр ед мет обуч ения”?
3. К а к п о-д р угому на з ыв а етсястр ока ? Столбец?
4. Поч ему мы неможемз а п р оситьд ляп р осмотр а п ер в ыеп ятьстр ок?
22
2. Вы б о р к
а да н н ы х (о пер а то р SELECT)
2.1. П рост ей ш ие SELECT-з апросы
О п ер а тор SELECT (ВЫБРАТЬ) яз ыка SQL яв ляется са мым в а жным и
са мым ч а сто исп ользуемым оп ер а тор ом. О н п р ед на з на ч ен д ля в ы бо р ки
инфор ма ции из та блиц ба з ы д а нных. У п р ощ енный синта ксис оп ер а тор а
SELECT в ыгляд ит след ующ им обр а з ом.
SELECT [DISTINCT] <спи со ка тр и б уто в>
FROM <спи со кта б ли ц>
[WHERE <усло ви евы б о р к
и >]
[ORDER BY <спи со ка тр и б уто в>]
[GROUP BY <спи со ка тр и б уто в>]
[HAVING <усло ви е>]
[UNION <вы р а ж ен и ес о пер а то р о м SELECT>];
В кв а д р а тных скобка х ука з а ны э лементы, котор ыемогут отсутств ов а тьв
з а п р осе.
К люч ев ое слов о SELECT сообщ а ет ба з е д а нных, ч то д а нное
п р ед ложение яв ляется з а п р осом на и зв лечени е инфор ма ции. После слов а
SELECT ч ер ез з а п ятую п ер еч исляются на и м ено в а ни я по лей (сп исок
а тр ибутов ), сод ер жимоекотор ых з а п р а шив а ется.
О бяз а тельным ключ ев ым слов ом в п р ед ложении-з а п р осе SELECT
яв ляется слов о FROM (ИЗ). За ключ ев ым слов ом FROM ука з ыв а ется сп исок
р а з д еленных з а п ятыми имен та бл иц, из котор ых из в лека етсяинфор ма ция.
Н а п р имер ,
SELECT NAME, SURNAME
FROM STUDENT;
Л юбой SQL-з а п р ос д олжен з а ка нч ив а ться симв олом “;” (т о чка
за пят о й).
с
23
Пр ив ед енный з а п р ос осущ еств ляет в ыбор ку в сех з на ч ений п олей NAME
и SURNAME из та блицы STUDENT.
Е го р ез ульта томяв ляетсята блица след ующ его в ид а :
NAME
Ив а н
Петр
Ва д им
Б орис
О льга
А нд рей
Па в ел
А ртем
А нтон
Ва д им
… …
SURNAME
Ив а нов
Петр ов
Сид ор ов
К уз нецов
Зайцев а
Па в лов
К отов
Л укин
Петр ов
Б елкин
… …
Пор яд ок след ов а ния столбцов в э той та блице соотв етств ует п ор яд ку
п олей NAME и SURNAME, ука з а нному в з а п р осе, а не их п ор яд ку в о в ход ной
та блицеSTUDENT.
Е сли необход имо в ыв ести з на ч ения в сех столбцов та блицы, то можно
в место п ер еч исленияих имен исп ол ьзов а тьсимв ол “* ” (з в ез д оч ка ).
SELECT *
FROM STUDENT;
В д а нном случ а е в р ез ульта те в ып олнения з а п р оса буд ет п олуч ена в ся
та блица STUDENT.
Е щ е р а з обр а тим в нима ние на то, ч то п олуч а емые в р ез ульта те SQLз а п р оса та блицы не в п олной мер е отв еч а ют оп р ед елению р еляционного
отношения. В ч а стности, в них могут ока з а ться кор тежи с од ина ков ыми
з на ч ениями а тр ибутов .
Н а п р имер , з а п р ос “Получ итьсп исок на з в а ний гор од ов , гд е п р ожив а ют
студ енты, св ед ения о котор ых на ход ятся в та блице STUDENT”, можно
з а п иса тьв след ующ ем в ид е
SELECT CITY FROM STUDENT;
Е го р ез ульта том буд ет та блица
24
CITY
О рел
К урск
Москв а
Б рянск
Л ип ецк
В оронеж
Б елгор од
В оронеж
NULL
В оронеж
… …
Вид но, ч то в та блице в стр еч а ются од ина ков ые стр оки (в ыд елены
жир ным шр ифтом).
Д ля исключ енияиз р ез ульта та SELECT-з а п р оса п ов тор яющ ихсяз а п исей
исп ользуетсякл юч ев оеслов о DISTINCT (ОТЛИЧНЫЙ). Е сли з а п р ос SELECT
из в лека ет множеств о п олей, то DISTINCT и сключа ет д ублика ты стр ок, в
котор ых з на ч енияв сех в ыбр а нных п олей ид ентич ны.
За п р ос “О п р ед елитьсп исок на з в а ний р а зли чны х гор од ов , гд еп р ожив а ют
студ енты, св ед ения о котор ых на ход ятся в та блице STUDENT”, можно
з а п иса тьв след ующ ем в ид е.
SELECT DISTINCT CITY
FROM STUDENT;
В р ез ульта теп олуч имта блицу, в котор ой д ублика ты стр ок исключ ены.
CITY
О рел
К урск
Москв а
Б рянск
Л ип ецк
Воронеж
Б елгор од
NULL
… …
К люч ев ое слов о ALL (ВСЕ), в отлич ие от DISTINCT, ока з ыв а ет
п р отив оп оложное д ейств ие, то есть п р и его исп ол ьзов а нии п ов тор яющ иеся
стр оки в ключа ют ся в соста в в ыход ных д а нных. Режим, з а д а в а емый
25
ключ ев ым слов ом ALL, д ейств ует п о умолч а нию, п оэ тому в р еа льных
з а п р оса х д ляэ тих целей оно п р а ктич ески неисп ользуется.
Исп ользов а ние в оп ер а тор е SELECT п р ед ложения, оп р ед еляемого
ключ ев ым слов ом WHERE (ГДЕ), п оз в оляет з а д а в а ть в ыр а жение услов ия
(п р ед ика т), п р инима ющ ее з на ч ение и с т и на или л о ж ь д ля з на ч ений п олей
стр ок та блиц, к котор ым обр а щ а етсяоп ер а тор SELECT. Пр ед ложениеWHERE
оп р ед еляет, к а к ие ст р ок и ука за нны х т а бли ц д о лж ны бы т ь в ы бр а ны . В
та блицу, яв ляющ уюся р ез ульта том з а п р оса , в ключ а ются только те стр оки,
д ля котор ых услов ие (п р ед ика т), ука з а нное в п р ед ложении WHERE,
п р инима ет з на ч ениеи с т и на .
П ример.
Н а п иса тьз а п р ос, в ып олняющ ий в ыбор ку имен (NAME) в сех студ ентов с
фа милией (SURNAME) Петр о в, св ед ения о котор ых на ход ятся в та блице
STUDENT.
SELECT SURNAME, NAME
FROM STUDENT
WHERE SURNAME = ‘Петр о в’;
Рез ульта томэ того з а п р оса буд ет та блица :
SURNAME
NAME
Петров
Петров
Петр
А нтон
В з а д а в а емых в п р ед ложении WHERE услов иях могут исп ользов а ться
оп ер а ции ср а в нения, оп р ед еляемые след ующ ими оп ер а тор а ми: = (р а в но), >
(больше), < (меньше), >= (большеили р а в но), <= (меньшеили р а в но), <> (не
р а в но), а та кжелогич ескиеоп ер а тор ы AND, OR и NOT.
Н а п р имер , з а п р ос д ля п олуч ения и м ен и ф а м и ли й студ ентов ,
обуч а ющ ихся на т р ет ьем кур се и п олуч а ющ их стип енд ию (р а з мер
стип енд ии бо льш е нуля) буд ет в ыгляд етьта ким обр а з ом:
SELECT NAME, SURNAME
FROM STUDENT
WHERE KURS = 3 AND STIPEND > 0;
26
Рез ульта т в ып олненияэ того з а п р оса имеет в ид :
SURNAME
NAME
Петров
Л укин
Петр
А ртем
УП Р АЖ НЕ НИ Я
1. Н а п ишите з а п р ос д ля в ыв од а ид ентифика тор а (номер а ) п р ед мета
обуч ения, его на именов а ния, семестр а , в котор ом он ч ита ется, и
колич еств а отв од имых на него ч а сов д ляв сех стр ок та блицы SUBJECT.
2. Н а п ишите з а п р ос, п оз в оляющ ий в ыв ести в се стр оки та блицы
EXAM_MARKS, в котор ых п р ед мет обуч ения имеет номер (SUBJ_ID),
р а в ный 12.
3. Н а п ишите з а п р ос, в ыбир а ющ ий в се д а нные из та блицы STUDENT,
р а сп оложив столбцы та блицы в след ующ ем п ор яд ке: KURS, SURNAME,
NAME, STIPEND.
4. Н а п ишите з а п р ос SELECT, котор ый в ып олняет в ыв од на именов а ний
п р ед метов обуч ения (SUBJ_NAME) и след ом з а ним колич еств а ч а сов
(HOUR) д ля ка жд ого п р ед мета обуч ения (SUBJECT) в 4-м семестр е
(SEMESTR).
5. Н а п ишите з а п р ос, п оз в оляющ ий п олуч ить из та блицы EXAM_MARKS
з на ч ения столбца MARK (э кз а мена ционна я оценка ) д ля в сех студ ентов ,
исключ ив из сп иска п ов тор ениеод ина ков ых стр ок.
6. Н а п ишите з а п р ос, котор ый в ып олняет в ыв од сп иска фа милий студ ентов ,
обуч а ющ ихсяна тр етьеми болееста р ших кур са х.
7. Н а п ишитез а п р ос, в ыбир а ющ ий д а нныео фа милии, имени и номер екур са
д лястуд ентов , п олуч а ющ их стип енд июбол ьше140.
8. Н а п ишитез а п р ос, в ып олняющ ий в ыбор ку из та блицы SUBJECT на з в а ний
в сех п р ед метов обуч ения, на котор ыеотв од итсяболее30 ч а сов .
9. Н а п ишите з а п р ос, котор ый в ып олняет в ыв од сп иска унив ер ситетов ,
р ейтинг котор ых п р ев ыша ет 300 ба ллов .
10.Н а п ишите з а п р ос к та блице STUDENT д ля в ыв од а сп иска фа милий
27
(SURNAME), имен (NAME) и номер а кур са (KURS) в сех студ ентов со
стип енд ией большей или р а в ной 100, и жив ущ их в Вор онеже.
11.К а киед а нныебуд ут п олуч ены в р ез ульта тев ып олненияз а п р оса ?
SELECT *
FROM STUDENT
WHERE (STIPEND < 100 OR
NOT (BIRTHDAY >= ‘10/03/1980’
AND STUDENT_ID > 1003 ));
12.К а киед а нныебуд ут п олуч ены в р ез ульта тев ып олненияз а п р оса ?
SELECT *
FROM STUDENT
WHERE NOT ((BIRTHDAY = ‘10/03/1980’ OR STIPEND > 100)
AND STUDENT_ID > = 1003 );
28
2.2. О перат оры IN, BETWEEN, LIKE, IS NULL
Пр и з а д а нии логич еского услов ия в п р ед ложении WHERE могут быть
исп ользов а ны оп ер а тор ы IN, BETWEEN, LIKE, IS NULL.
О п ер а тор ы IN (РАВЕН ЛЮБОМУ ИЗ СПИСКА) и NOT IN (НЕ РАВЕН НИ
ОДНОМУ ИЗ СПИСКА) исп ользуются д ля ср а в нения п р ов ер яемого з на ч ения
п оля с з а д а нным сп иском. Э тот сп исок з на ч ений ука з ыв а ется в скобка х
сп р а в а от оп ер а тор а IN.
Постр оенный с исп ользов а нием IN п р ед ика т (услов ие) сч ита ется
истинным, если з на ч ениеп оля, имякотор ого ука з а но слев а от IN, со в па д а ет
(п од р а з умев а ется точ ноесов п а д ение) с од ним из з на ч ений, п ер еч исленных в
сп иске, ука з а нном в скобка х сп р а в а от IN.
Пр ед ика т, п остр оенный с исп ользов а нием NOT IN, сч ита етсяистинным,
если з на ч ениеп оля, имя котор ого ука з а но слев а от NOT IN, не со в па д а ет ни
с од ним из з на ч ений, п ер еч исленных в сп иске, ука з а нном в скобка х сп р а в а от
NOT IN.
П римеры.
Получ ить из та блицы EXAM_MARKS св ед ения о студ ента х, и м еющ и х
э кз а мена ционныеоценки только 4 и 5.
SELECT *
FROM EXAM_MARKS
WHERE MARK IN (4, 5);
Получ итьсв ед енияо студ ента х, не и м ею щ и х ни од ной э кз а мена ционной
оценки, р а в ной 4 и 5.
SELECT *
FROM EXAM_MARKS
WHERE MARK NOT IN (4, 5);
О п ер а тор BETWEEN исп ользуется д л я п р ов ер ки услов ия в хожд ения
з на ч енияп оля в з а д а нный интер в а л, то естьв место сп иска з на ч ений а тр ибута
э тот оп ер а тор з а д а ет гр а ницы его из менения.
Н а п р имер , з а п р ос, в ып олняющ ий в ыв од з а п исей о п р ед мета х обуч ения,
колич еств о ч а сов , отв од имых на котор ые, лежит в п р ед ела х межд у 30 и 40,
29
имеет в ид :
SELECT *
FROM SUBJECT
WHERE HOUR BETWEEN 30 AND 40;
Г р а нич ные з на ч ения, в д а нном случ а е з на ч ения 30 и 40, в хо д ят в о
множеств о з на ч ений, с котор ыми п р оиз в од ится ср а в нение. О п ер а тор
BETWEEN может исп ользов а ться ка к д ля ч ислов ых, та к и д ля симв ольных
тип ов п олей.
О п ер а тор LIKE п р именим только к симв ольным п олям тип а CHAR или
VARCHAR (см. р а з д ел 1.5, Т ип ы д а нных SQL). Э тот оп ер а тор осущ еств ляет
п р осмотр строков ых з на ч ений п олей с целью оп р ед еления, в ход ит ли
з а д а нна я в оп ер а тор е LIKE п од стр ока (обр аз ец п оиска ) в симв ольную
стр оку, яв ляющ уюсяз на ч ением п р ов ер яемого п оля.
Д ля того, ч тобы осущ еств лять в ыбор ку стр оков ых з на ч ений п о
з а д а нному обр а з цу п од стр оки, можно п р именятьша блон искомого обр а з ца
стр оки, исп ользующ ий след ующ иесимв олы:
•
•
симв ол п од ч ер кив а ния “_”, ука з а нный в ша блоне обр а з ца , оп р ед еляет
в оз можностьна лич ияв ука з а нном местео д но го любо го симв ола ,
симв ол “%” д оп уска ет п р исутств ие в ука з а нном месте п р ов ер яемой
стр оки п ослед ов а тельности любых симв олов п р оиз в ольной д лины.
П ример.
Н а п иса ть з а п р ос, в ыбир а ющ ий из та блицы STUDENT св ед ения о
студ ента х, у котор ых фа мил ии на ч ина ютсяна букв у “Р”.
SELECT *
FROM STUDENT
WHERE SURNAME LIKE ‘Р %’;
В случ а е в оз никнов ения необход имости в ключ ения в обр а з ец д ля
ср а в нения са мих симв олов “_” и “%” п р именяют, та к на з ыв а емые escapeсимв олы. Е сли escape-симв ол п р ед шеств ует з на ку “_” и “%”, то э ти з на ки
буд ут интер п р етир ов а ться букв а льно. Н а п р имер , можно з а д а ть обр а з ец
п оиска с п омощ ью след ующ его в ыр а жения
LIKE ‘_\_Р ’ ESCAPE ‘\’.
30
В э том в ыр а жении симв ол ‘\’ с п омощ ью кл юч ев ого слов а ESCAPE
объяв л яется escape-симв олом. Пер в ый симв ол “_” в з а д а нном ша блоне
п оиска ‘_\_Р ’ буд ет соотв етств ов а ть, ка к и р а нее, любому на бор у симв олов в
п р ов ер яемой стр оке. О д на ко в тор ой симв ол “_”, след ующ ий п осле симв ола
‘\’, объяв ленного escape-симв олом, ужебуд ет интер п р етир ов а ться букв а льно
ка к обыч ный симв ол, та к жека к и симв ол Р в з а д а нном ша блоне.
О бр а щ а ем в а ше в нима ние на то, ч то р а ссмотр енные в ыше оп ер а тор ы
ср а в нения“=, <, >, <=, >=, <>” и оп ер а тор ы IN, BETWEEN и LIKE ни в коем
случ а е нельзя исп ользов а тьд ля п р ов ер ки сод ер жимого п оля на на лич ие в
нем п устого з на ч ения NULL (см. р а з д ел 1.5, Тип ы д а нных SQL). Д ля э тих
целей сп ециа льно п р ед на з на ч ены оп ер а тор ы IS NULL (ЯВЛЯЕТСЯ ПУСТЫМ)
и IS NOT NULL (ЯВЛЯЕТСЯ НЕ ПУСТЫМ).
УП Р АЖ НЕ НИ Я
1. Н а п ишите з а п р ос, в ып олняющ ий в ыв од на ход ящ ихся в та блице
EXAM_MARKS номер ов п р ед метов обуч ения, э кз а мены п о котор ым
сд а в а л исьмежд у 10 и 20 янв а р я1999 год а .
2. Н а п ишите з а п р ос, в ыбир а ющ ий д а нные обо в сех п р ед мета х обуч ения,
э кз а мены п о котор ым сд а ны студ ента ми, имеющ ими ид ентифика тор ы 12
и 32.
3. Н а п ишите з а п р ос, котор ый в ып олняет в ыв од
обуч ения, на ч ина ющ ихсяна букв у ‘И’.
на з в а ний п р ед метов
4. Н а п ишите з а п р ос, в ыбир а ющ ий св ед ения о студ ента х, у котор ых имена
на ч ина ютсяна букв ы ‘И’ или ‘С’.
5. Н а п ишите з а п р ос д ля в ыбор а из та блицы EXAM_MARKS з а п исей, д ля
котор ых отсутств уют з на ч енияоценок (п олеMARK).
6. Н а п ишите з а п р ос, в ып олняющ ий в ыв од
из
та блицы EXAM_MARKS
з а п исей, д лякотор ых в п олеMARK п р оста в лены з на ч енияоценок.
31
2.3. П реобраз ование вы вода и вст роенны е
ф ункц ии
В SQL р еа лиз ов а ны оп ер а тор ы п р еобр а з ов а ния д а нных и в стр оенные
функции, п р ед на з на ч енные д ля р а боты со з на ч ениями столбцов и/или
конста нта ми в в ыр а жениях. Исп ользов а ние э тих оп ер а тор ов д оп устимо в
з а п р оса х в ез д е, гд еможно исп ользов а тьв ыр а жения.
2.3.1. Числ овы е, сим вол ь ны е и ст роковы е конст ант ы
Н есмотр я на то, ч то SQL р а бота ет с д а нными в п онятиях стр ок и
столбцов та блиц, имеется в оз можность п р именения з на ч ений в ыр а жений,
п остр оенных с исп ользов а нием в стр оенных функций, конста нт, имен
столбцов , котор ыеоп р ед еляютсяка к св оего р од а в ир туа льныестолбцы. О ни
п омещ а ютсяв сп искестолбцов и могут соп р ов ожд а тьсяп сев д онима ми.
Е сли в з а п р осев место сп ецифика ции столбца SQL обна р ужив а ет чи сло ,
то оно интер п р етир уетсяка к чи сло в а яко нст а нт а .
Си м в о льны е ко нст а нт ы д олжны ука з ыв а ться в од ина р ных ка в ыч ка х.
Е сли од ина р на яка в ыч ка д олжна в ыв од итьсяка к ч а стьстр оков ой конста нты,
то еенужно п р ед в а р итьд р угой од ина р ной ка в ыч кой
Н а п р имер , р ез ульта том в ып олненияз а п р оса
SELECT ‘Фа ми ли я’, SURNAME, ‘Имя’, NAME, 100
FROM STUDENT;
яв ляетсята блица след ующ его в ид а
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
Фа милия
… …
SURNAME
Ив а нов
Петров
Сид ор ов
К уз нецов
Зайцев а
Па в лов
К отов
Л укин
Петров
Б елкин
… …
Имя
Имя
Имя
Имя
Имя
Имя
Имя
Имя
Имя
Имя
… …
NAME
Ив а н
Петр
Ва д им
Б орис
О льга
А нд рей
Па в ел
А ртем
А нтон
Ва д им
… …
100
100
100
100
100
100
100
100
100
100
… …
32
2.3.2. Ариф м ет ические операц ии дл я преобраз ования
числ овы х данны х
• У на р ный (од иноч ный) оп ер а тор “–” (з на к минус) из меняет з на к ч ислов ого
з на ч ения, п ер ед котор ымон стоит, на п р отив оп оложный.
• Б ина р ные оп ер а тор ы “+”, “– “, “*” и “/” п р ед оста в ляют в оз можность
в ып олнения а р ифметич еских оп ер а ций сложения, в ыч ита ния, умножения
и д еления.
Н а п р имер , р ез ульта т з а п р оса
SELECT SURNAME, NAME, STIPEND, –(STIPEND*KURS)/2
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
буд ет в ыгляд етьслед ующ имобр а з ом
SURNAME
NAME
STIPEND KURS
Сид ор ов
Петров
… …
Ва д им
А нтон
… …
150
200
… …
4
4
… …
-300
-400
… …
2.3.3. С им вол ь ная операц ия конкат енац ии ст рок
О п ер а ция конка тена ции “||” п оз в оляет соед инять (“склеив а ть”) з на ч ения
д в ух или болеестолбцов симв ольного тип а ил и симв ольных конста нт в од ну
стр оку.
Э та оп ер а цияимеет синта ксис
<зна чи м о е си м в о льно е в ы р а ж ени е> {||}<зна чи м о е си м в о льно е в ы р а ж ени е>.
Н а п р имер :
SELECT SURNAME || ‘
_’|| NAME, STIPEND
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Рез ульта т з а п р оса буд ет в ыгляд етьслед ующ им обр а з ом
STIPEND
Сид ор ов _Ва д им
Петров _А нтон
… …
150
200
… …
33
2.3.4. С им вол ь ны е ф ункц ии преобраз ования букв
раз л ичны х сл ов в ст роке
• LOWER – п ер ев од в стр оч ныесимв олы (нижний р егистр )
LOWER (<ст р о ка >)
• UPPER – п ер ев од в п р оп исныесимв олы (в ер хний р егистр )
UPPER (<ст р о ка >)
• INITCAP – п ер ев од п ер в ой букв ы ка жд ого слов а стр оки в з а гла в ную
(п р оп исную)
INITCAP(<ст р о ка >)
Н а п р имер :
SELECT LOWER(SURNAME), UPPER(NAME)
FROM STUDENT
WHERE KURS = 4 AND STIPEND > 0;
Рез ульта т з а п р оса буд ет в ыгляд етьслед ующ им обр а з ом
SURNAME
Сид ор ов
Петров
… …
NAME
ВА Д ИМ
А Н ТО Н
… …
2.3.5. С им вол ь ны е ст роковы е ф ункц ии
• LPAD – д оп олнениестр оки слев а
LPAD (<ст р о ка >, <д ли на > [, <по д ст р о ка >])
o <ст р о ка >
д оп олняется слев а
ука з а нной
в
<по д ст р о ке>
п ослед ов а тельностью симв олов д о ука з а нной <д ли ны > (в оз можно, с
п ов тор ением п ослед ов а тельности);
o если <по д ст р о ка > не ука з а на , то п о
д оп олняетсяп р обела ми;
умолч а нию <ст р о ка >
o если <д ли на > меньше д лины <ст р о ки >, то
усека етсяслев а д о з а д а нной <д ли ны >.
исход на я <ст р о ка >
34
• RPAD – д оп олнениестр оки сп р а в а
RPAD (<ст р о ка >, <д ли на > [, <по д ст р о ка >])
o <ст р о ка > д оп олняется спра в а
ука з а нной в
<по д ст р о ке>
п ослед ов а тельностью симв олов д о ука з а нной <д ли ны > (в оз можно, с
п ов тор ением п ослед ов а тельности);
o если <по д ст р о ка > не ука з а на , то п о
д оп олняетсяп р обела ми;
умолч а нию <ст р о ка >
o если <д ли на > меньше д лины <ст р о ки >, то
усека етсясп р а в а д о з а д а нной <д ли ны >.
исход на я <ст р о ка >
• LTRIM – уд а лениелев ых гр а нич ных симв олов
LTRIM (<ст р о ка > [,<по д ст р о ка >])
o из <ст р о ки > уд а ляютсяслев а симв олы, ука з а нныев <по д ст р о ке>;
o если <по д ст р о ка > неука з а на , то п о умолч а нию уд а ляютсяп р обелы;
o в <ст р о ку> сп р а в а д оба в ляется столько п р обелов , сколько симв олов
слев а было уд а лено, то естьд лина <ст р о ки > оста етсянеиз менной.
• RTRIM – уд а лениеп р а в ых гр а нич ных симв олов
RTRIM (<ст р о ка > [,<по д ст р о ка >])
o из <ст р о ки > уд а ляютсясп р а в а симв олы, ука з а нныев <по д ст р о ке>;
o если <по д ст р о ка > неука з а на , то п о умолч а нию уд а ляютсяп р обелы;
o в <ст р о ку> слев а д оба в ляется столько п р обелов , сколько симв олов
сп р а в а было уд а лено, то естьд лина <ст р о ки > оста етсянеиз менной.
Функции LTRIM и RTRIM р екоменд уется исп ользов а тьп р и на п иса нии
услов ных в ыр а жений, в котор ых ср а в нив а ютсятекстов ыестр оки. Д ело в том,
ч то на лич ие на ч а льных или конеч ных п р обелов в ср а в нив а емых оп ер а нд а х
может иска з итьр ез ульта т ср а в нения.
Н а п р имер , конста нты ‘ ААА’и ‘ААА ’нер а в ны д р уг д р угу.
• SUBSTR – в ыд елениеп од стр оки
SUBSTR (<ст р о ка >,<на ча ло > [,<ко ли чест во >])
o из <ст р о ки > в ыбир а етсяз а д а нное<ко ли чест в о > симв олов , на ч ина яс
ука з а нной п оз иции в стр оке<на ча ло >;
35
o если <ко ли чест в о > нез а д а но, симв олы в ыбир а ются с <на ча ла > и д о
конца <ст р о ки >.
o в оз в р а щ а ется п од стр ока , сод ер жа щ а я ч исло симв олов , з а д а нное
п а р а метр ом <ко ли чест в о >, либо ч исло симв олов от п оз иции,
з а д а нной п а р а метр ом<на ча ло > д о конца ст р о ки ;
o если ука з а нное <на ча ло > п р ев осход ит д лину <ст р о ки >, то
в оз в р а щ а ется стр ока , состоящ а я из п р обелов . Д лина э той стр оки
буд ет р а в на з а д а нному <ко ли чест в у> или исход ной д лине <ст р о ки >
(п р и нез а д а нном <ко ли чест в е> ).
• INSTR – п оиск п од стр оки
INSTR(<ст р о ка >,<по д ст р о ка > [,<на ча ло по и ска >
[,<но м ер в хо ж д ени я>]])
o <на ча ло по и ска > з а д а ет на ч а льную п оз ицию в стр оке д ля п оиска
<по д ст р о ки >. Е сли не з а д а но, то п о умолч а нию п р инима ется
з на ч ение1;
o <но м ер в хо ж д ени я> з а д а ет п ор яд ков ый номер искомой п од стр оки.
Е сли нез а д а н, то п о умолч а ниюп р инима етсяз на ч ение1;
o з на ч имые в ыр а жения в <на ча ле по и ска > или в <но м ер е в хо ж д ени я>
д олжны иметьбез з на ков ый целый тип или п р ив од итьсяк э тому тип у;
o тип в оз в р а щ а емого з на ч ения– INT;
o функцияв оз в р а щ а ет п оз ицию на йд енной п од стр оки.
• LENGTH – оп р ед елениед лины стр оки
LENGTH(<ст р о ка >)
o д лина <ст р о ки >, тип в оз в р а щ а емого з на ч ения– INT;
o функцияв оз в р а щ а ет NULL, если <ст р о ка > имеет NULL-з на ч ение.
П римеры з а п р осов , исп ользующ их стр оков ыефункции.
Рез ульта т з а п р оса
SELECT LPAD (SURNAME, 10, ‘@’), RPAD (NAME, 10, ‘$’)
FROM STUDENT
WHERE KURS = 3 AND STIPEND > 0;
36
буд ет в ыгляд етьслед ующ имобр а з ом
@@@@Петров
@@@@Павлов
@@@@@Лукин
… …
Петр$$$$$$
Андрей$$$$
Артем$$$$$
… …
А з а п р ос
SELECT SUBSTR(NAME, 1, 1) || ‘
.’|| SURNAME, CITY, LENGTH(CITY)
FROM STUDENT
WHERE KURS IN(2, 3, 4) AND STIPEND > 0;
в ыд а ст р ез ульта т
П.Петров
С.Сид оров
О .За йцев а
А .Л укин
А .Петров
… …
CITY
К урск
Москв а
Л ип ецк
Воронеж
NULL
… …
5
6
6
7
NULL
… …
2.3.6. Ф ункц ии работ ы счисл ам и
•
ABS – а бсолютноез на ч ение
ABS(<зна чи м о е чи сло во е в ы р а ж ени е>)
•
FLOOR – ур ез а ет з на ч ениеч исла с п ла в а ющ ей точ кой д о на ибол ьшего
целого, неп р ев осход ящ его з а д а нноеч исло
FLOOR(<зна чи м о е чи сло во е в ы р а ж ени е>)
•
CEIL – са моема лоецелое, котор оера в но или большез а д а нного ч исла
CEIL(<зна чи м о е чи сло в о е в ы р а ж ени е>)
•
Функцияокр угления– ROUND
ROUND(<зна чи м о е чи сло во е в ы р а ж ени е>,<т о чно ст ь>)
а р гумент <т о чно ст ь> з а д а ет точ ностьокр угления(см. пример ниже)
• Функцияусеч ения– TRUNC
TRUNC(<зна чи м о е чи сло во е в ы р а ж ени е>,<т о чно ст ь>)
37
•
Тр игонометр ич ескиефункции – COS, SIN, TAN
COS(<зна чи м о е чи сло во е в ы р а ж ени е>)
SIN(<зна чи м о е чи сло во е в ы р а ж ени е>)
TAN(<зна чи м о е чи сло во е в ы р а ж ени е>)
•
Г ип ер болич ескиефункции – COSH, SINH, TANH
COSH(<зна чи м о е чи сло в о е в ы р а ж ени е>)
SINH(<зна чи м о е чи сло в о е в ы р а ж ени е>)
TANH(<зна чи м о е чи сло в о е в ы р а ж ени е>)
•
Э ксп оненциа льна яфункция– (EXP)
EXP(<зна чи м о е чи сло во е в ы р а ж ени е>)
• Л ога р ифмич ескиефункции – (LN, LOG)
LN(<зна чи м о е чи сло в о е в ы р а ж ени е>)
LOG(<зна чи м о е чи сло во е в ы р а ж ени е>)
• Функцияв оз в ед енияв степ ень– POWER
POWER(<зна чи м о е чи сло во е в ы р а ж ени е>,<экспо нент а >)
• О п р ед елениез на ка ч исла – SIGN
SIGN(<зна чи м о е чи сло в о е в ы р а ж ени е>)
• Выч ислениекв а д р а тного кор ня– SQRT
SQRT(<зна чи м о е чи сло в о е в ы р а ж ени е>)
П ример.
За п р ос
SELECT UNIV_NAME, RATING, ROUND(RATING, -1), TRUNC(RATING, -1)
FROM UNIVERSITY;
Вер нет р ез ульта т
38
UNIV_NAME
МГ У
ВГ У
Н ГУ
РГ У
БГУ
ТГ У
ВГ МА
… …
RATING
606
296
345
416
326
368
327
… …
610
300
350
420
330
370
330
… …
600
290
340
410
320
360
320
… …
2.3.7. Ф ункц ии преобраз ования з начений
• Пр еобр а з ов а ниев симв ольную стр оку – TO_CHAR
TO_CHAR(<зна чи м о е в ы р а ж ени е>[,<си м в о льны й ф о р м а т >])
o <зна чи м о е в ы р а ж ени е> д олжно п р ед ста в лятьч ислов оез на ч ение или
з на ч ениетип а д а та -в р емя;
o д ля ч ислов ых з на ч ений <си м в о льны й ф о р м а т > д олжен иметь
синта ксис [S]9[9… ][.9[9… ]], гд е S – п р ед ста в ление з на ка ч исла (п р и
отсутств ии п р ед п ола га ется без отобр а жения з на ка ), 9 –
п р ед ста в ление цифр -з на ков ч ислов ого з на ч ения (д ля ка жд ого
з на коместа ). Симв ольный фор ма т оп р ед еляет в ид отобр а женияч исел.
По умолч а нию д ля ч ислов ых з на ч ений исп ользуется фор ма т
'999999.99';
o д ляз на ч ений тип а Д АТ А-В РЕ МЯ <си м в о льны й ф о р м а т > имеет в ид (то
естьв ид отобр а женияз на ч ений д а ты и в р емени):
– в ч а сти д а ты
‘DD-Mon-YY’
‘DD-Mon-YYYY’
‘MM/DD/YY’
‘MM/DD/YYYY’
‘DD.MM.YY’
‘DD.MM.YYYY’
– в ч а сти в р емени
‘HH24’
39
‘HH24:MI’
‘HH24:MI:SS’
‘HH24:MI:SS.FF’
гд е:
Н Н 24 - ч а сы в д иа п а з онеот 0 д о 24
MI – минуты
SS – секунд ы
FF – тики (сотыед оли секунд ы)
Пр и в ыв од е в р емени в ка ч еств е р а з д елителя п о умолч а нию
исп ользуется д в оеточ ие(:), но п р и жела нии можно исп ользов а тьлюбой
д р угой симв ол.
Воз в р а щ а емое з на ч ение – симв ольное п р ед ста в ление <зна чи м о го
в ы р а ж ени я> в соотв етств ии с з а д а нным <си м в о льны м ф о р м а т о м >
п р еобр а з ов а ния.
• Пр еобр а з ов а ниеиз симв ольного з на ч енияв ч ислов ое– TO_NUMBER
TO_NUMBER(<зна чи м о е си м в о льно е в ы р а ж ени е>)
Пр и э том <зна чи м о е си м в о льно е в ы р а ж ени е> д олжно з а д а в а ть
симв ольноез на ч ениеч ислов ого тип а .
• Пр еобр а з ов а ниесимв ольной стр оки в д а ту – TO_DATE
TO_DATE(<зна чи м о е си м в о льно е в ы р а ж ени е> [,<си м в о льны й ф о р м а т >])
o <зна чи м о е си м в о льно е в ы р а ж ени е> д олжно з а д а в а ть симв ольное
з на ч ениетип а Д АТ А-В Р Е МЯ .
o <си м в о льны й ф о р м а т > д олжен оп исыв а ть п р ед ста в ление з на ч ения
тип а Д АТ А- В Р Е МЯ
в
<зна чи м о м
си м в о льно м
в ы р а ж ени и >.
Д оп устимые фор ма ты (в том ч исле и фор ма т п о умолч а нию)
п р ив ед ены в ыше.
Воз в р а щ а емое з на ч ение – <зна чи м о е си м в о льно е в ы р а ж ени е> в о
в нутр еннем п р ед ста в лении. Т ип в оз в р а щ а емого з на ч ения – DATE. О п ер а ции
на д з на ч ениями тип а DATE
Н а д з на ч ениями тип а DATE р а з р ешены след ующ иеоп ер а ции:
o бина р на яоп ер а циясложения;
o бина р на яоп ер а цияв ыч ита ния.
40
В бина р ных оп ер а циях од ин из оп ер а нд ов д олжен иметьз на ч ение
отд ельного э лемента д а ты: только год , или только месяц, или только
д ень.
Н а п р имер :
п р и д оба в лении к д а те ‘22.05.1998’ п яти лет п олуч ится д а та
‘22.05.2003’;
п р и д оба в лении к э той же д а те д ев яти месяцев п олуч ится д а та
‘22.02.1998’;
п р и д оба в лении 10-ти д ней п олуч им ‘01.06.1998’.
Пр и сложении д в ух п олных д а т, на п р имер , ‘22.05.1998’ и ‘01.12.2000’
р ез ульта т неп р ед ска з уем.
П ример.
За п р ос
SELECT SURNAME, NAME, BIRTHDAY,
TO_CHAR(BIRTHDAY, ‘
DD-Mon-YYYY’),
TO_CHAR(BIRTHDAY, ‘
DD.MM.YY’)
FROM STUDENT;
Вер нет р ез ульта т
SURNAME
Ив а нов
Петров
Сид оров
К уз нецов
Зайцев а
Па в лов
К отов
Л укин
Петров
Б елкин
… …
NAME
Ив а н
Петр
Ва д им
Б орис
О льга
А нд рей
Па в ел
А ртем
А нтон
Ва д им
… …
BIRTHDAY
3/12/1982
3-д ек-1982
1/12/1980
1-д ек-1980
7/06/1979
7-июн-1979
8/12/1981
8-д ек-1981
1/05/1981
1-ма й-1981
5/11/1979
5-ноя-1979
NULL
NULL
1/12/1981
1-д ек1981
5/08/1981
5-а в г-1981
7/01/1980
7-янв -1980
… …
… …
3.12.82
1.12.80
7.06.79
8.12.81
1.05.81
5.11.79
NULL
1.12.81
5.08.81
7.01.80
… …
Функция CAST яв ляется ср ед ств ом яв ного п р еобр аз ов а ния д а нных из
од ного тип а в д р угой. Синта ксис э той кома нд ы имеет в ид
CAST <зна чи м о е в ы р а ж ени е> AS <т и п д а нны х>
• <зна чи м о е в ы р а ж ени е>
д олжно иметь ч ислов ой или симв ольный тип
41
яз ыка SQL (в оз можно, с ука з а нием д лины, точ ности и ма сшта ба ) или быть
NULL-з на ч ением.
• любое ч ислов ое в ыр а жение может быть яв но п р еобр а з ов а но в любой
д р угой ч ислов ой тип .
• симв ольноев ыр а жениеможет бытьп р еобр а з ов а но в любой ч ислов ой тип .
Пр и э том в р ез ульта те симв ольного в ыр а жения отсека ются на ч а льные и
конеч ные п р обелы, а оста льные симв олы п р еобр а з уются в ч ислов ое
з на ч ениеп о п р а в ила м яз ыка SQL.
• если яв но з а д а нна я д лина симв ольного тип а нед оста точ на и
п р еобр а з ов а нное з на ч ение не р а з мещ а ется в нем, то р ез ульта тив ное
з на ч ениеусека етсясп р а в а .
• в оз можно яв ноеп р еобр а з ов а ниесимв ольного тип а в симв ольный с д р угой
д линой. Е сли д лина р ез ульта та больше д лины а р гумента , то з на ч ение
д оп олняетсяп р обела ми; если меньше, то усека ется.
• NULL-з на ч ениеп р еобр а з уетсяв NULL-з на ч ениесоотв етств ующ его тип а .
• ч ислов оев ыр а жениеможет бытьп р еобр а з ов а но в симв ольный тип .
Пр имер .
SELECT CAST STUDENT_ID AS CHAR(10)
FROM STUDENT;
УП Р АЖ НЕ НИ Я
1. Соста в ьтез а п р ос д ля та блицы STUDENT та ким обр а з ом, ч тобы в ыход на я
та блица сод ер жа ла од ин столбец, сод ер жа щ ий п ослед ов а тельность
р а з д еленных симв олом “;” (точ ка с з а п ятой) з на ч ений в сех столбцов э той
та блицы, и п р и э том текстов ые з на ч ения д олжны отобр а жа ться
п р оп исными симв ола ми (в ер хний р егистр ), то есть
быть
п р ед ста в ленными
в
след ующ ем
в ид е:
10;КУЗНЕЦОВ;БОРИС;0;БРЯНСК;8/12/1981;10.
2. Соста в ьтез а п р ос д лята блицы STUDENT та ким обр а з ом, ч тобы в ыход на я
та блица сод ер жа ла в сего од ин столбец в след ующ ем в ид е:
Б.КУЗНЕЦОВ; место жительства-БРЯНСК; родился - 8.12.81.
3. Соста в ьтез а п р ос д лята блицы STUDENT та ким обр а з ом, ч тобы в ыход на я
та блица сод ер жа ла в сего од ин столбец в след ующ ем в ид е:
42
б.кузнецов; место жительства-брянск; родился: 8-дек-1981.
4. Соста в ьтез а п р ос д лята блицы STUDENT та ким обр а з ом, ч тобы в ыход на я
та блица сод ер жа ла в сего од ин столбец в след ующ ем в ид е:
Борис Кузнецов родился в 1981 году.
5. Выв ести фа милии, имена студ ентов и в елич ину п ол уч а емых ими
стип енд ий, п р и э том з на ч ениястип енд ий д олжны бытьув елич ены в 100
р аз .
6. То же, ч то и в з а д а ч е4, но только д лястуд ентов 1, 2 и 4-го кур сов и та ким
обр аз ом, ч тобы фа милии и имена были в ыв ед ены п р оп исными букв а ми.
7. Соста в ьтез а п р ос д лята блицы UNIVERSITY та ким обр а з ом, ч тобы
в ыход на ята блица сод ер жа ла в сего од ин столбец в след ующ ем в ид е:
Код-10; ВГУ-г.ВОРОНЕЖ; Рейтинг=296.
8. Тоже, ч то и в з а д а ч е7, но з на ч енияр ейтинга тр ебуетсяокр углитьд о
п ер в ого з на ка (на п р имер , з на ч ение382 окр угляетсяд о 400).
2.4. Агрегирование и групповы е ф ункц ии
А гр егир ующ ие функции п оз в оляют п олуч а ть из та блицы св од ную
(а гр егир ов а нную) инфор ма цию, в ып олняя оп ер а ции на д гр уп п ой стр ок
та блицы. Д ля з а д а ния в SELECT-з а п р осе а гр егир ующ их оп ер а ций
исп ользуютсяслед ующ иеключ ев ыеслов а :
• COUNT оп р ед еляет колич еств о стр ок или з на ч ений п оля, в ыбр а нных
п оср ед ств омз а п р оса , и неяв ляющ ихсяNULL-з на ч ениями;
• SUM – в ыч исляет а р ифметич ескую сумму в сех в ыбр а нных з на ч ений
д а нного п оля;
• AVG в ыч исляет ср ед неез на ч ениед ляв сех в ыбр а нных з на ч ений д а нного
п оля;
• MAX в ыч исляет на ибольшееиз в сех в ыбр а нных з на ч ений д а нного п оля;
• MIN в ыч исляет на именьшееиз в сех в ыбр а нных з на ч ений д а нного п ол я.
В SELECT-з а п р осе а гр егир ующ ие функции исп ользуются а на логич но
имена м п олей, п р и э том п ослед ние (имена п олей) исп ользуются в ка ч еств е
а р гументов э тих функций.
Функция AVG п р ед на з на ч ена д ля п од сч ета ср ед него з на ч ения п оля на
множеств ез а п исей та блицы.
43
Н а п р имер , д ля оп р ед еления ср ед него з на ч ения п оля MARK (оценки) п о
в сем з а п исям та блицы EXAM_MARKS можно исп ользов а тьз а п р ос с функцией
AVG след ующ его в ид а :
SELECT AVG(MARK)
FROM EXAM_MARKS;
Д ля п од сч ета общ его колич еств а стр ок в та блице след ует исп ользов а ть
функцию COUNT со з в ез д оч кой.
SELECT COUNT(*)
FROM EXAM_MARKS;
А р гументы DISTINCT и ALL п оз в оляют, соотв етств енно, исключ а тьи
в ключ а тьд ублика ты обр а ба тыв а емых функцией COUNT з на ч ений, п р и э том
необход имо уч итыв а ть, ч то п р и исп ользов а нии оп ции ALL з на ч ения NULL
в сер а в но нев ойд ут в ч исло п од сч итыв а емых з на ч ений.
SELECT COUNT(DISTINCT SUBJ_ID)
FROM SUBJECT;
Пр ед ложение GROUP BYGROUP BY (ГРУППИРОВАТЬ ПО) п оз в оляет
гр уп п ир ов а тьз а п иси в п од множеств а , оп р ед еляемыез на ч ениями ка кого-либо
п оля, и п р именятьа гр егир ующ иефункции уженеко в сем з а п исям та блицы,
а р а з д ельно к ка жд ой сфор мир ов а нной гр уп п е.
Пр ед п оложим, тр ебуется на йти ма ксима льное з на ч ение оценки,
п олуч енной ка жд ым студ ентом. За п р ос буд ет в ыгляд еть след ующ им
обр аз ом:
SELECT STUDENT_ID, MAX(MARK)
FROM EXAM_MARKS
GROUP BY STUDENT_ID;
Выбир а емые из та блицы EXAM_MARKS з а п иси гр уп п ир уются п о
з на ч ениям п оляSTUDENT_ID, ука з а нного в п р ед ложении GROUP BY, и д ля
ка жд ой гр уп п ы на ход ится ма ксима льное з на ч ение п оля MARK. Пр ед ложение
GROUP BY п оз в оляет п р именятьа гр егир ующ ие функции к ка жд ой гр уп п е,
оп р ед еляемой общ им з на ч ением п оля (или п олей), ука з а нных в э том
п р ед ложении. В п р ив ед енном з а п р осе р а ссма тр ив а ются гр уп п ы з а п исей,
сгр уп п ир ов а нныеп о ид ентифика тор а мстуд ентов .
44
В констр укции GROUP BY д лягр уп п ир ов а нияможет бытьисп ользов а но
болееод ного столбца . Н а п р имер :
SELECT STUDENT_ID, SUBJ_ID, MAX(MARK)
FROM EXAM_MARKS
GROUP BY STUDENT_ID, SUBJ_ID;
В э том случ а е стр оки в на ч а ле гр уп п ир уются п о з на ч ениям п ер в ого
столбца , а в нутр и э тих гр уп п – в п од гр уп п ы п о з на ч ениям в тор ого столбца .
Та ким обр а з ом, GROUP BY не только уста на в лив а ет столбцы, п о котор ым
осущ еств ляется гр уп п ир ов а ние, но и ука з ыв а ет п ор яд ок р а з биения столбцов
на гр уп п ы.
След ует иметь в в ид у, ч то в п р ед ложении GROUP BY д олжны быть
ука з а ны в се в ыбир а емые столбцы, п р ив ед енные п осле ключ ев ого слов а
SELECT, кр оме столбцов , ука з а нных в ка ч еств е а р гумента в а гр егир ующ ей
функции.
Пр и необход имости ч а сть сфор мир ов а нных с п омощ ью GROUP BY
гр уп п может бытьисключ ена с п омощ ью п р ед ложенияHAVING.
Пр ед ложение HAVING оп р ед еляет кр итер ий, п о котор ому гр уп п ы
след ует в ключ а тьв в ыход ныед а нные, п о а на логии с п р ед ложением WHERE,
котороеосущ еств ляет э то д ляотд ельных стр ок.
SELECT SUBJ_NAME, MAX(HOUR)
FROM SUBJECT
GROUP BY SUBJ_NAME
HAVING MAX(HOUR) >= 72;
В услов ии, з а д а в а емом п р ед ложением HAVING, ука з ыв а ют только п оля
или в ыр а жения, котор ые на в ыход е имеют ед инств енное з на ч ение д ля
ка жд ой в ыв од имой гр уп п ы.
УП Р АЖ НЕ НИ Я
9. Н а п ишитез а п р ос д ля п од сч ета колич еств а студ ентов , сд а в а в ших э кз а мен
п о п р ед мету обуч енияс ид ентифика тор ом, р а в ным 20.
10.Н а п ишитез а п р ос, котор ый п оз в оляет п од сч ита тьв та блице EXAM_MARKS
колич еств о р а з лич ных п р ед метов обуч ения.
11.Н а п ишите з а п р ос, котор ый в ып олняет в ыбор ку д ля ка жд ого студ ента
45
з на ч енияего ид ентифика тор а и минима льной из п олуч енных им оценок.
12.Н а п ишите з а п р ос, котор ый в ып олняет в ыбор ку д ля ка жд ого студ ента
з на ч енияего ид ентифика тор а и ма ксима льной из п олуч енных им оценок.
13.Н а п ишите з а п р ос, в ып олняющ ий в ыв од фа милии п ер в ого в а лфа в итном
п ор яд ке (п о фа милии) студ ента , фа милия котор ого на ч ина ется на букв у
“И”.
14.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од д л я ка жд ого п р ед мета
обуч ения на именов а ние п р ед мета и ма ксима льное з на ч ение номер а
семестр а , в котор ом э тот п р ед мет п р еп од а ется.
15.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од д а нных д ля ка жд ого
конкр етного д ня сд а ч и э кз а мена о колич еств е студ ентов , сд а в а в ших
э кз а мен в э тот д ень.
16.Н а п ишите з а п р ос д ля п олуч ения ср ед него ба лла д ля ка жд ого кур са п о
ка жд ому п р ед мету.
17.Н а п ишитез а п р ос д ляп олуч енияср ед него ба лла д ляка жд ого студ ента .
18.Н а п ишитез а п р ос д ляп олуч енияср ед него ба лла д ляка жд ого э кз а мена .
19.Н а п ишите з а п р ос д ля оп р ед еления колич еств а студ ентов , сд а в а в ших
ка жд ый э кз а мен.
20.Н а п ишите з а п р ос д ля оп р ед еления колич еств а из уч а емых п р ед метов на
ка жд омкур се.
2.5. П уст ы е з начения (NULL) в агрегирую щ их
ф ункц ия х
Н а лич ие п устых (NULL) з на ч ений в п ол ях та блицы на кла д ыв а ет
особенности на в ып олнение а гр егир ующ их оп ер а ций на д д а нными, котор ые
след ует уч итыв а тьп р и их исп ользов а нии в SQL-з а п р оса х.
2.5.1.
В л ия ние NULL– з начений в ф ункц ии COUNT
Е сли а р гумент функции COUNT яв ляется конста нтой или столбцом без
п устых з на ч ений, то функция в оз в р а щ а ет колич еств о стр ок, к котор ым
п р именимо оп р ед еленноеуслов иеили гр уп п ир ов а ние.
46
Е сли а р гументом функции яв ляется ст о лбец, сод ер жа щ ий п устое
з на ч ение, то COUNT в ер нет ч исло стр ок, несод ер жа щ их п устыез на ч ения, и к
котор ым п р именимо оп р ед еленноеуслов иеили гр уп п ир ов а ние.
Е сли бы меха низ м NULL не был д оступ ен, то неп р именимые и
отсутств ующ ие з на ч ения п р ишлосьбы искл юч а тьс п омощ ью констр укции
WHERE.
Пов ед ение функции COUNT(*) не з а в исит от п устых з на ч ений. О на
в оз в р а тит общ ееколич еств о стр ок в та блице.
2.5.2. В л ия ние NULL-з начений в ф ункц ии AVG
Ср ед нее з на ч ение множеств а ч исел р а в но сумме ч исел, д еленной на
ч исло э лементов множеств а . О д на ко, если некотор ые э лементы п усты, то
есть их з на ч ения неиз в естны или не сущ еств уют, то д еление на колич еств о
в сех э лементов множеств а п р ив ед ет к неп р а в ильному р ез ульта ту.
Функция AVG в ыч исляет ср ед нее з на ч ение в сех и зв ест ны х з на ч ений
множеств а э лементов , то есть э та функция п од сч итыв а ет сумму и зв ест ны х
з на ч ений и д елит еена колич еств о эт и х з на ч ений, а нена общ ееколич еств о
з на ч ений, ср ед и котор ых могут бытьNULL-з на ч ения. Е сли столбец состоит
только из п устых з на ч ений, то функцияAVG та кжев оз в р а тит NULL.
2.6. Р ез ул ь т ат дей ст вия т рехз начны х
усл овны х операт оров
У слов ныеоп ер а тор ы п р и отсутств ии п устых з на ч ений в оз в р а щ а ют либо
TRUE (и сти н а ), либо FALSE (ло ж ь). Е сли жев столбцеп р исутств уют п устые
з на ч ения, то может быть в оз в р а щ ено и тр етье з на ч ение: UNKNOWN
(н еи звестн о ). В э той схеме, на п р имер , услов ие WHERE A=2, гд е А – имя
столбца , з на ч ения котор ого могут быть неиз в естны, п р и A=2 буд ет
соотв етств ов а ть TRUE, п р и A=4 в р ез ул ьта те буд ет п олуч ено з на ч ение
FALSE, а п р и отсутств ующ ем з на ч ении A (NULL-з на ч ение) р ез ульта т буд ет
UNKNOWN. Пустые з на ч ения ока з ыв а ют в лияние на
логич еских оп ер а тор ов NOT, AND и OR.
Опера тор NOT
исп ользов а ние
47
О быч ный уна р ный оп ер а тор NOT обр а щ а ет оценку TRUE в FALSE и
на обор от. О д на ко NOT NULL п о п р ежнему буд ет в оз в р а щ а тьп устоез на ч ение
NULL. Пр и э том след ует отлич а ть случ а й NOT NULL от услов ия IS NOT
NULL, котор ое яв ляется п р отив оп оложностью IS NULL, отд еляя из в естные
з на ч енияот неиз в естных.
Опера тор AND
• Е сли р ез ульта т д в ух услов ий, объед иненных оп ер а тор омAND, из в естен, то
п р именяются п р а в ила булев ой логики, то естьп р и обоих утв ер жд ениях
TRUE соста в ноеутв ер жд ениета кжебуд ет TRUE. Е сли жехотябы од но из
д в ух утв ер жд ений буд ет FALSE, то соста в ноеутв ер жд ениебуд ет FALSE.
• Е сли р ез ульта т од ного из утв ер жд ений неиз в естен, а д р угой оценив а ется
ка к TRUE, то состояние неиз в естного утв ер жд ения
яв ляется
оп р ед еляющ им, и, след ов а тельно, итогов ый р ез ульта т та кженеиз в естен.
• Е сли р ез ульта т од ного из утв ер жд ений неиз в естен, а д р угой оценив а ется
ка к FALSE, итогов ый р ез ульта т буд ет FALSE.
• Е сли р ез ульта т обоих утв ер жд ений неиз в естен, то р ез ульта т та кже
оста етсянеиз в естным.
Опера тор OR
• Е сли р ез ульта т д в ух услов ий, объед иненных оп ер а тором OR, из в естен, то
п р именяются п р а в ила булев ой логики, а именно: если хотя бы од но из
д в ух утв ер жд ений соотв етств ует TRUE, то и соста в ноеутв ер жд ениебуд ет
TRUE, если оба утв ер жд ения оценив а ются ка к FALSE, то соста в ное
утв ер жд ениебуд ет FALSE.
• Е сли р ез ульта т од ного из утв ер жд ений неиз в естен, а д р угой оценив а ется
ка к TRUE, итогов ый р ез ульта т буд ет TRUE.
• Е сли р ез ульта т од ного из утв ер жд ений неиз в естен, а д р угой оценив а ется
ка к FALSE, то состояние неиз в естного утв ер жд ения игр а ет р оль.
След ов а тельно, итогов ый р ез ульта т та кженеиз в естен.
• Е сли р ез ульта т обоих утв ер жд ений неиз в естен, то р ез ульта т та кже
оста етсянеиз в естным.
П рим ечание.
48
О тсутств ующ ие (NULL) з на ч ения целесообр а з но исп ользов а ть в
столбца х, п р ед на з на ч енных д л яа гр егир ов а ния, ч тобы из в леч ьп р еимущ еств а
из сп особа обр а ботки п устых з на ч ений в функциях COUNT и AVG.
Пр а ктич ески в о в сех оста льных случ а ях п устых з на ч ений след ует из бега ть,
та к ка к п р и их на лич ии сущ еств енно усложняется кор р ектное п остр оение
услов ий отбор а , п р ив од я иногд а к неп р ед ска з уемым р ез ульта та м в ыбор ки.
Д ля инд ика ции же отсутств ующ их, неп р именимых или п о ка кой-то п р ич ине
неиз в естных д а нных можно исп ользов а ть з на ч ения п о умолч а нию,
уста на в лив а емые з а р а нее (на п р имер , с п омощ ью кома нд ы CREATE TABLE
(р а з д ел 4.1).
2.7. Упоря дочение вы ходны х пол ей (ORDER BY)
К а к уже отмеч а лось, з а п иси в та блица х р еляционной ба з ы д а нных
неуп ор яд оч ены. О д на ко, д а нные, в ыв од имые в
р ез ульта те в ып олнения
з а п р оса , могут бытьуп ор яд оч ены. Д ля э того исп ользуется оп ер а тор ORDER
BY, котор ый п оз в оляет уп ор яд оч ив а тьв ыв од имые з а п иси в соотв етств ии со
з на ч ениями од ного или нескольких в ыбр а нных столбцов . Пр и э том можно
з а д а ть в оз р а ста ющ ую (ASC) или убыв а ющ ую (DESC) п ослед ов а тельность
сор тир ов ки д ля ка жд ого из столбцов . По умолч а нию п р инята в оз р а ста ющ а я
п ослед ов а тельностьсор тир ов ки.
За п р ос, п оз в оляющ ий в ыбр а ть в се д а нные из та блицы п р ед метов
обуч ения SUBJECT, с уп ор яд оч ив а нием п о на именов а ниям п р ед метов ,
в ыгляд ит след ующ имобр а з ом:
SELECT *
FROM SUBJECT
ORDER BY SUBJ_NAME;
Тот жесп исок, но уп ор яд оч енный в обр а тном п ор яд ке, можно п ол уч ить
з а п р осом:
SELECT *
FROM SUBJECT
ORDER BY SUBJ_NAME DESC;
М ожно уп ор яд оч ить в ыв од имый сп исок п р ед метов обуч ения п о
з на ч ениямсеместр ов , а в нутр и семестр ов – п о на именов а ниям п р ед метов .
49
SELECT *
FROM SUBJECT
ORDER BY SEMESTR, SUBJ_NAME;
Пр ед ложение ORDER BY может исп ользов а ться с GROUP BY д ля
уп ор яд оч ив а ния гр уп п з а п исей. Пр и э том оп ер атор ORDER BY в з а п р осе
в сег д а д о лж енбы т ь последним .
SELECT SUBJ_NAME, SEMESTR, MAX(HOUR)
FROM SUBJECT
GROUP BY SEMESTR, SUBJ_NAME
ORDER BY SEMESTR;
Пр и уп ор яд оч ив а нии в место на именов а ний столбцов можно ука з ыв а ть
их номер а , имея, од на ко, в в ид у, ч то в д а нном случ а еэ то – номер а столбцов ,
ука з а нные п р и оп р ед елении в ыход ных д а нных в з а п р осе, а не номер а
столбцов в та блице. Полем с номер ом 1 яв ляется п ер в ое п оле, ука з а нное в
п р ед ложении ORDER BY – нез а в исимо от его р а сп оложенияв та блице.
SELECT SUBJ_ID, SEMESTR
FROM SUBJECT
ORDER BY 2 DESC;
В э том з а п росе в ыв од имые з а п иси буд ут уп ор яд оч ены п о п ол ю
SEMESTR.
Е сли в п оле, котор ое исп ользуется д ля уп ор яд оч ив а ния, сущ еств уют
NULL-з на ч ения, то в се они р а з мещ а ются в конце или п р ед шеств уют в сем
оста льнымз на ч ениям э того п оля.
УП Р АЖ НЕ НИ Я
21.Пр ед п оложим, ч то стип енд ия в сем студ ента м ув елич ена на 20%.
Н а п ишите з а п р ос к та блице STUDENT, в ып олняющ ий в ыв од номер а
студ ента , фа милию студ ента и в елич ину ув елич енной стип енд ии.
Выход ные д а нные уп ор яд оч ить: а ) п о з на ч ению п ослед него столбца
(в елич инестип енд ии); б) в а лфа в итном п ор яд кефа милий студ ентов .
22.Н а п ишите з а п р ос, котор ый п о та блице EXAM_MARKS п оз в оляет на йти
а ) ма ксима льные и б) минима льные оценки ка жд ого студ ента и в ыв од ит
их в местес ид ентифика тор ом студ ента .
23.Н а п ишите з а п р ос, в ып олняющ ий в ыв од сп иска п р ед метов обуч ения в
50
п ор яд ке а ) убыв а ния семестр ов и б) в оз р а ста ния отв од имых на п р ед мет
ч а сов . Поле семестр а в в ыход ных д а нных д олжно бытьп ер в ым, з а ним
д олжны след ов а тьимяп р ед мета обуч енияи ид ентифика тор п р ед мета .
24.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од суммы ба ллов в сех
студ ентов д ля ка жд ой д а ты сд а ч и э кз а менов и п р ед ста в ляет р ез ульта ты в
п ор яд кеубыв а нияэ тих сумм.
25.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од а ) ср ед него, б)
минима льного, в ) ма ксима льного ба ллов в сех студ ентов д ля ка жд ой д а ты
сд а ч и э кз а менов , и п р ед ста в ляет р ез ульта ты в п ор яд ке убыв а ния э тих
з на ч ений.
2.8. В л ож енны е подз апросы
SQL п оз в оляет исп ользов а тьод ни з а п р осы в нутр и д р угих з а п р осов , то
есть в кла д ыв а ть з а п р осы д р уг в д р уга . Пр ед п оложим, из в естна фа милия
студ ента (“Петр о в”), но неиз в естно з на ч ение п оля STUDENT_ID д ля него.
Ч тобы из в леч ь д а нные обо в сех оценка х э того студ ента , можно з а п иса ть
след ующ ий з а п р ос:
SELECT *
FROM EXAM_MARKS
WHERE STUDENT_ID =
( SELECT STUDENT_ID
FROM STUDENT SURNAME = ‘Петр о в’);
К а к р а бота ет з а п р ос SQL со св яз а нным п од з а п р осом?
• Выбир а ется стр ока из та блицы, имя котор ой ука з а но в о в нешнем
з а п р осе.
• Вып олняется п од з а п р ос и п олуч енное в р ез ульта те его в ып олнения
з на ч ение п р именяется д ля а на лиз а э той стр оки в услов ии
п р ед ложенияWHERE в нешнего з а п р оса .
• По р ез ульта ту оценки э того услов ия п р инима ется р ешение о
в ключ ении или нев ключ ении стр оки в соста в в ыход ных д а нных.
• Пр оцед ур а п ов тор яется д ля след ующ ей стр оки та блицы в нешнего
з а п р оса .
51
След ует обр а титьв нима ние, ч то п р ив ед енный в ыше з а п р ос кор р ектен
только в том случ а е, если в р ез ульта те в ып олнения ука з а нного в скобка х
по д з а п р оса в оз в р а щ а ется ед и нст в енно е зна чени е. Е сли в р ез ульта те
в ып олнения п од з а п р оса буд ет в оз в р а щ ено несколько з на ч ений, то э тот
п од з а п р ос буд ет ошибоч ным. В д а нном п р имер е э то п р оиз ойд ет, если в
та блице STUDENT буд ет несколько з а п исей со з на ч ениями п оля
SURNAME = ‘Петр о в’.
В некотор ых случ а ях д ляга р а нтии п олуч енияед инств енного з на ч ения в
р ез ульта тев ып олненияп од з а п р оса исп ользуетсяDISTINCT. О д ним из в ид ов
функций, котор ые а в тома тич ески в сегд а в ыд а ют в р ез ульта те ед инств енное
з на ч ениед лялюбого колич еств а стр ок, яв ляютсяа гр егир ующ иефункции.
О п ер а тор IN та кже шир око п р именяется в п од з а п р оса х. О н з а д а ет
сп исок з на ч ений, с котор ыми ср а в нив а ютсяд р угиез на ч енияд ляоп р ед еления
истинности з а д а в а емого э тимоп ер а тор ом п р ед ика та .
Д а нные обо в сех оценка х (та блица EXAM_MARKS) студ ентов
Вор онежа можно в ыбр а тьс п омощ ьюслед ующ его з а п р оса :
из
SELECT *
FROM EXAM_MARKS
WHERE STUDENT_ID IN
( SELECT STUDENT_ID
FROM STUDENT
WHERE CITY = ‘Во р о н еж ’);
Под з а п р осы можно п р именять в нутр и п р ед ложения HAVING. Пусть
тр ебуется оп р ед елить колич еств о п р ед метов обуч ения с оценкой,
п р ев ыша ющ ей ср ед неез на ч ениеоценки студ ента с ид ентифика тор ом 301:
SELECT COUNT(DISTINCT SUBJ_ID), MARK
FROM EXAM_MARKS
GROUP BY MARK
HAVING MARK >
( SELECT AVG(MARK)
FROM EXAM_MARKS
WHERE STUDENT_ID = 301);
52
2.9. Ф орм ирование свя з анны х подз апросов
Пр и исп ользов а нии п од з а п р осов в о в нутр еннем з а п р осе можно
ссыла ться на та блицу, имя котор ой ука з а но в п р ед ложении FROM в нешнего
з а п р оса . В э том случ а е та кой св яза нны й п од з а п р ос в ып олняется п о од ному
р а з у д ляка ж д о й стр оки та блицы основ ного з а п р оса .
П ример: в ыбр а тьсв ед ения обо в сех п р ед мета х обуч ения, п о котор ым
п р ов од илсяэ кз а мен 20 янв а р я1999 г.
SELECT *
FROM SUBJECT SU
WHERE ‘20/01/1999’ IN
( SELECT EXAM_DATE
FROM EXAM_MARKS EX
WHERE SU.SUBJ_ID = EX.SUBJ_ID);
В некотор ых СУ Б Д д ля в ып ол нения э того з а п р оса , в оз можно,
п отр ебуется п р еобр а з ов а ние з на ч ения д а ты в симв ольный тип . В
п р ив ед енном з а п р осе SU и EX яв ляются п сев д онима ми (а лиа са ми), то есть
сп ециа льно в в од имыми имена ми, котор ые могут быть исп ользов а ны в
д а нном з а п р осе в место на стоящ их имен. В п р ив ед енном п р имер е они
исп ользуютсяв место имен та блиц SUBJECT и EXAM_MARKS. .
Э ту жез а д а ч у можно р ешитьс п омощ ьюоп ер а ции соед иненията блиц:
SELECT DISTINCT SU.SUBJ_ID, SUBJ_NAME, HOUR, SEMESTER
FROM SUBJECT FIRST, EXAM_MARKS SECOND
WHERE FIRST.SUBJ_ID = SECOND.SUBJ_ID
AND SECOND.EXAM_DATE = ’20/01/1999’;
В э том в ыр а жении а лиа са ми та блиц яв ляютсяимена FIRST и SECOND.
М ожно исп ользов а ть п од з а п р осы, св яз ыв а ющ ие та блицу со св оей
собств енной коп ией. Н а п р имер , на д о на йти ид ентифика тор ы, фа милии и
стип енд ии студ ентов , п олуч а ющ их стип енд ию в ыше ср ед ней на кур се, на
которомони уч а тся.
SELECT DISTINCT STUDENT_ID, SURNAME, STIPEND
FROM STUDENT E1
WHERE STIPEND >
(SELECT AVG(STIPEND)
FROM STUDENT E2
53
WHERE E1.KURS = E2.KURS);
Тот жер ез ульта т можно п олуч итьс п омощ ьюслед ующ его з а п р оса :
SELECT DISTINCT STUDENT_ID, SURNAME, STIPEND
FROM STUDENT E1,
(SELECT KURS, AVG(STIPEND) AS AVG_STIPEND
FROM STUDENT E2
GROUP BY E2.KURS) E3
WHERE E1.STIPEND > AVG_STIPEND AND E1.KURS=E3.KURS;
О бр а тите в нима ние – в тор ой з а п р ос буд ет в ып ол нен гор а з д о быстр ее.
Д ело в том, ч то в п ер в ом в а р иа нте з а п р оса а гр егир ующ а я функция AVG
в ып олняется на д та блицей, ука з а нной в п од з а п р осе, д ля ка ж д о й строки
в нешнего з а п р оса . В д р угом
в а р иа нте в тор а я та блица (а лиа с E2)
обр а ба тыв а ется а гр егир ующ ей функцией од ин р а з , в р ез ульта те ч его
фор мир уется в сп омога тельна я та блица (в з а п р осе она имеет а лиа с E3), со
стр ока ми котор ой з а тем соед иняются стр оки п ер в ой та блицы (а лиа с E1).
След ует иметьв в ид у, ч то р еа льное в р емя в ып олнения з а п р оса в большой
степ ени з а в исит от оп тимиз а тор а з а п р осов конкр етной СУ Б Д .
2.10. С вя з анны е подз апросы в HAVING
В р а з д еле 2.4 ука з ыв а лось, ч то п р ед ложение GROUP BY п оз в оляет
гр уп п ир ов а тьв ыв од имые SELECT-з а п р осом з а п иси п о з на ч ению некотор ого
п оля. Исп ользов а ние п р ед ложения HAVING п оз в ол яет п р и в ыв од е
осущ еств лять фильтр а цию та ких гр уп п . Пр ед ика т п р ед ложения HAVING
оценив а ется не д ля ка жд ой стр оки р ез ульта та , а д ля ка жд ой гр уп п ы
в ыход ных з а п исей, сфор мир ов а нной п р ед ложением GROUP BY в нешнего
з а п р оса .
Пусть, на п р имер , необход имо п о д а нным из та блицы EXAM_MARKS
оп р ед елитьсумму п олуч енных студ ента ми оценок (з на ч ений п оля MARK),
сгр уп п ир ов а в з на ч ения оценок п о д а та м э кз а менов и исключ ив тед ни, когд а
ч исло студ ентов , сд а в а в ших в теч ениед няэ кз а мены, было меньше10.
SELECT EXAM_DATE, SUM(MARK)
FROM EXAM_MARKS A
GROUP BY EXAM_DATE
54
HAVING 10 <
( SELECT COUNT(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE);
Под з а п р ос в ыч исл яет колич еств о стр ок с од ной и той же д а той,
сов п а д а ющ ей с д а той, д ля котор ой сфор мир ов а на оч ер ед на я гр уп п а
основ ного з а п р оса .
УП Р АЖ НЕ НИ Я
26.Н а п ишитез а п р ос с п од з а п р осом д ля п олуч енияд а нных обо в сех оценка х
студ ента с фа милией “Ива н о в”. Пр ед п оложим, ч то его п ер сона льный
номер неиз в естен. Всегд а л и та кой з а п р ос буд ет кор р ектным?
27.Н а п ишите з а п р ос, в ыбир а ющ ий д а нные об имена х в сех студ ентов ,
имеющ их п о п р ед мету c ид ентифика тор ом 101 ба лл в ыше общ его
ср ед него ба лла .
28.Н а п ишите з а п р ос, котор ый в ып олняет в ыбор ку имен в сех студ ентов ,
имеющ их п о п р ед мету c ид ентифика тор ом 102 ба лл ниже общ его
ср ед него ба лла .
29.Н а п ишите з а п р ос, в ып ол няющ ий в ыв од колич еств а п р ед метов , п о
котор ым э кз а менов а лся ка жд ый студ ент, сд а в а в ший более 20-ти
п р ед метов .
30.Н а п ишите кома нд у SELECT, исп ользующ ую св яз а нные п од з а п р осы и
в ып олняющ ую в ыв од имен и ид ентифика тор ов студ ентов , у котор ых
стип енд ия сов п а д а ет с ма ксима льным з на ч ением стип енд ии д ля гор од а , в
котором жив ет студ ент.
31.Н а п ишите з а п р ос, котор ый п оз в оляет в ыв ести имена и ид ентифика тор ы
в сех студ ентов , д лякотор ых точ но из в естно, ч то они п р ожив а ют в гор од е,
гд енет ни од ного унив ер ситета .
32.Н а п ишите д в а з а п р оса , котор ые п оз в оляют в ыв ести имена и
ид ентифика тор ы в сех студ ентов , д ля котор ых точ но из в естно, ч то они
п р ожив а ют нев том гор од е, гд ер а сп оложен их унив ер ситет. О д ин з а п р ос
с исп ользов а нием соед инения, а д р угой – с исп ользов а нием св яз а нного
55
п од з а п р оса .
2.11. И спол ь з ование операт ора EXISTS
Исп ользуемый в SQL оп ер а тор EXISTS (СУЩЕСТВУЕТ) генер ир ует
з на ч ение и сти н а или ло ж ь, п од обно булев у в ыр а жению. Исп ользуя
п од з а п р осы в ка ч еств е а р гумента , э тот оп ер атор оценив а ет р ез ульта т
в ып олнения п од з а п р оса ка к истинный, если э тот п од з а п р ос генер ир ует
в ыход ные д а нные, то есть в случ а е сущ ест в о в а ни я (в оз в р а та ) хотя бы
од ного на йд енного з на ч ения. В п р отив ном сл уч а е р ез ульта т п од з а п р оса –
ложный. О п ер а тор
EXISTS не может п р инима ть з на ч ение unknown
(неизвестно).
Пусть, на п р имер , нужно из в леч ь из та блицы EXAM_MARKS д а нные о
студ ента х, п олуч ив ших хотябы од ну неуд ов летв ор ительную оценку.
SELECT DISTINCT STUDENT_ID
FROM EXAM_MARKS A
WHERE EXISTS
( SELECT *
FROM EXAM_MARKS B
WHERE MARK < 3
AND B.STUDENT_ID=A.STUDENT_ID);
Пр и исп ользов а нии св яз а нных п од з а п р осов п р ед ложение EXISTS
а на лиз ир ует ка жд ую стр оку та блицы, на котор ую имеется ссылка в о
в нешнем з а п р осе. Г ла в ный з а п р ос п олуч а ет стр оки-ка нд ид а ты на п р ов ер ку
услов ия. Д ля ка жд ой стр оки-ка нд ид а та в ып олняется п од з а п р ос. К а к только
п од з а п р ос на ход ит строку, гд е в столбце MARK з на ч ение уд ов летв ор яет
услов ию, он п р екр а щ а ет в ып олнение и в оз в р а щ а ет з на ч ение и сти н а
в нешнему з а п р осу, котор ый з а тем а на лиз ир ует св ою стр оку-ка нд ид а та .
Н а п р имер , тр ебуется п олуч ить ид ентифика тор ы п р ед метов обуч ения,
э кз а мены п о котор ымсд а в а лисьнеод ним, а несколькими студ ента ми:
56
SELECT DISTINCT SUBJ_ID
FROM EXAM_MARKS A
WHERE EXISTS
( SELECT *
FROM EXAM_MARKS B
WHERE A.SUBJ_ID = B.SUBJ_ID
AND A.STUDENT_ID < > B.STUDENT_ID);
Ч а сто EXISTS п р именяется с оп ер а тор ом NOT (п о-р усски NOT EXISTS
интер п р етир уется, ка к “не сущест в ует … ”). Е сли п р ед ыд ущ ий з а п р ос
сфор мулир ов а ть след ующ им обр а з ом – на йти ид ентифика тор ы п р ед метов
обуч ения, котор ые сд а в а лись од ним и только од ним студ ентом (д р угими
слов а ми, д ля котор ых не сущ еств ует д р угого сд а в а в шего студ ента ), то
д оста точ но п р осто п оста в итьNOT п ер ед EXISTS.
След ует иметь в в ид у, ч то в п од з а п р осе, ука з ыв а емом в оп ер а тор е
EXISTS, нельзяи спо льзо ва т ь а гр еги р ующ и е ф ункци и .
Воз можности п р именения в ложенных з а п р осов в есьма р а з нообр аз ны.
Н а п р имер , п устьиз та блицы STUDENT тр ебуетсяиз в леч ьстр оки д ляка жд ого
студ ента , сд а в шего болееод ного п р ед мета .
SELECT *
FROM STUDENT FIRST
WHERE EXISTS
(SELECT SUBJ_ID
FROM EXAM_MARKS SECOND
GROUP BY SUBJ_ID
HAVING COUNT(SUBJ_ID) >1
WHERE FIRST.STUDENT_ID = SECOND.STUDENT_ID);
УП Р АЖ НЕ НИ Я
33.Н а п ишите з а п р ос с EXISTS, п оз в оляющ ий в ыв ести д а нные обо в сех
студ ента х обуч а ющ ихсяв в уз а х, имеющ их р ейтинг в ыше300.
34.Н а п ишитеп р ед ыд ущ ий з а п р ос, исп ользуясоед инения.
35.Н а п ишите з а п р ос с EXISTS, в ыбир а ющ ий св ед ения обо в сех студ ента х,
д ля котор ых в том же гор од е, гд е жив ет студ ент, сущ еств уют
57
унив ер ситеты, в котор ых он неуч ится.
36.Н а п ишитез а п р ос, в ыбир а ющ ий из та блицы SUBJECT д а нныео на з в а ниях
п р ед метов обуч ения, э кз а мены п о котор ым сд а ны более ч ем од ним
студ ентом.
2.12. О перат оры сравнения см нож ест вом
з начений IN, ANY, ALL
О п ер а тор ы ср а в ненияс множеств ом з на ч ений имеют след ующ ий смысл.
IN
Ра в но любому из з на ч ений, п олуч енных в о в нутр еннем
з а п р осе.
NOT IN
Не р а в но ни од ному из з на ч ений, п олуч енных в о
в нутр еннемз а п р осе.
= ANY
То же, ч то и IN. Соотв етств ует логич ескому оп ер а тор у
OR.
> ANY, > = ANY
Бо льш е, чем
(либо бо льш е и ли р а в но ) любое
п олуч енноеч исло. Э кв ив а лентно > или > = д ляса мого
меньшего п олуч енного ч исла .
< ANY, < = ANY
М еньш е, чем (либо м еньш е и ли р а в но ) любое
п олуч енное ч исло. Э кв ив а лент < или < = д ля са мого
большего п олуч енного ч исла .
= ALL
Ра в но в сем п олуч енным з на ч ениям. Э кв ив а лентно
логич ескому оп ер а тор у AND.
> ALL, > = ALL
Бо льш е, чем (либо бо льш е и ли р а в но ) в се п олуч енные
ч исла . Э кв ив а лент > или > = д ля са мого большего
п олуч енного ч исла .
< ALL, < = ALL
М еньш е, чем (либо м еньш е и ли р а в но ) в сеп олуч енные
ч исла . Э кв ив а лентно < или < = са мого меньшего
п олуч енного ч исла .
След ует иметьв в ид у, ч то в некотор ых СУ Б Д п од д ер жив а ютсянев сеиз
э тих оп ер а тор ов .
П рим еры з апросов сиспол ь з ованием приведенны х операт оров.
Выбр а тьсв ед ения о студ ента х, п р ожив а ющ их в гор од е, гд ер а сп оложен
унив ер ситет, в котор ом они уч а тся.
58
SELECT *
FROM STUDENT S
WHERE CITY = ANY
( SELECT CITY
FROM UNIVERSITY U
WHERE U.UNIV_ID = S.UNIV_ID);
Д р угой в а р иа нт э того з а п р оса
SELECT *
FROM STUDENT S
WHERE CITY IN
(SELECT CITY
FROM UNIVERSITY U
WHERE U.UNIV_ID = S.UNIV_ID);
Выбор ка д а нных об ид ентифика тор а х студ ентов , у котор ых оценки
п р ев осход ят в елич ину, п о кр а йней мер е, од ной из оценок, п олуч енных ими
же6 октябр я1999 год а .
SELECT DISTINCT STUDENT_ID
FROM EXAM_MARKS
WHERE MARK > ANY
(SELECT MARK
FROM EXAM_MARKS
WHERE EXAM_DATE = ‘06/10/1999’);
О п ер а тор ALL, ка к п р а в ило, э ффектив но исп ользуетсяс нер а в енств а ми,
а не с р а в енств а ми, п оскольку з на ч ение р а в но в сем , котор ое д олжно
п олуч иться в э том случ а ев р ез ульта тев ып олненияп од з а п р оса , может иметь
место, только если в се р ез ульта ты ид ентич ны. Та ка я ситуа ция п р а ктич ески
не может бытьр еа лиз ов а на , та к ка к, если п од з а п р ос генер ир ует множеств о
р а з лич ных з на ч ений, то ника кое од но з на ч ение не может бытьр а в но ср а з у
в сем з на ч ениям в обыч ном смысле. В SQL в ыр а жение < > ALL р еа льно
оз на ч а ет не р а в но ни о д но м у из р ез ульта тов п од з а п р оса .
Под з а п р ос, в ыбир а ющ ий д а нные о на з в а ниях в сех унив ер ситетов с
р ейтингомболеев ысоким, ч ем р ейтинг любого унив ер ситета в Вор онеже:
SELECT *
FROM UNIVERSITY
WHERE RATING > ALL
59
( SELECT RATING
FROM UNIVERSITY
WHERE CITY = ‘Во р о н еж ’);
В э том з а п р осе в место ALL можно та кже исп ользов а ть ANY.
(Пр оа на лиз ир уйте, ка к в э том случ а е из менится смысл п р ив ед енного
з а п р оса ?)
SELECT *
FROM UNIVERSITY
WHERE NOT RATING > ANY
( SELECT RATING
FROM UNIVERSITY
WHERE CITY = ‘Во р о н еж ’);
2.13. О собенност и прим енения операт оров
ANY, ALL, EXISTS при обработ ке пуст ы х
з начений (NULL)
Н еобход имо иметьв в ид у, ч то п р и обр а ботке NULL-з на ч ений след ует
уч итыв а тьр а з лич иер еа кции на них оп ер а тор ов EXISTS, ANY и ALL.
К огд а п р а в ильный п од з а п р ос негенер ир ует ника ких в ыход ных д а нных,
оп ер а тор ALL а в тома тич ески п р инима ет з на ч ениеи сти н а , а оп ер а тор ANY –
з на ч ениело ж ь.
За п р ос
SELECT *
FROM UNIVERSITY
WHERE RATING > ANY
( SELECT RATING
FROM UNIVERSITY
WHERE CITY = ‘New York’);
негенер ир ует в ыход ных д а нных (п од р а з умев а ется, ч то в ба з енет д а нных об
унив ер ситета х из гор од а New York), в то в р емяка к з а п р ос
60
SELECT *
FROM UNIVERSITY
WHERE RATING > ALL
( SELECT RATING
FROM UNIVERSITY
WHERE CITY = ‘New York’);
п олностью в осп р оиз в ед ет та бл ицу UNIVERSITY.
Исп ользов а ние NULL-з на ч ений соз д а ет оп р ед еленные п р облемы д ля
р а ссма тр ив а емых оп ер а тор ов . К огд а в SQL ср а в нив а ются д в а з на ч ения, од но
из котор ых NULL-з на ч ение, р ез ульта т п р инима ет з на ч ение UNKNOWN
(неиз в естно). Пр ед ика т UNKNOWN, та кже ка к и FALSE-п р ед ика т, соз д а ет
ситуа цию, когд а стр ока не в ключ а ется в соста в в ыход ных д а нных, но
р ез ульта т п р и э том буд ет р а з лич ен д ляр а з ных тип ов з а п р осов , в з а в исимости
от исп ользов а нияв них ALL или ANY в место EXISTS. Ра ссмотр им в ка ч еств е
п р имер а д в е р еа лиз а ции з а п р оса : на йти в се д а нные об унив ер ситета х,
р ейтинг котор ых меньшер ейтинга любого унив ер ситета в М оскв е.
1)
SELECT *
FROM UNIVERSITY
WHERE RATING < ANY
(SELECT RATING
FROM UNIVERSITY
WHERE CITY = ‘М о ск
ва ’);
2)
SELECT *
FROM UNIVERSITY A
WHERE NOT EXISTS
(SELECT *
FROM UNIVERSITY B
WHERE A.RATING >= B.RATING
AND B.CITY = ‘М о ск
ва ’);
Пр и отсутств ии в та блица х NULL оба э ти з а п р оса в ед ут себясов ер шенно
од ина ков о. Пусть теп ер ь в та блице UNIVERSITY есть стр ока с NULLз на ч ениями в столбце RATING. В в ер сии з а п р оса c ANY в основ ном з а п р осе,
когд а в ыбир а ется п оле RATING с NULL, п р ед ика т п р инима ет з на ч ение
UNKNOWN и стр ока не в ключ а ется в соста в в ыход ных д а нных. Во в тор ом же
в а р иа нте з а п р оса , когд а NOT EXISTS в ыбир а ет э ту стр оку в основ ном
з а п р осе, NULL-з на ч ение исп ользуется в п р ед ика те п од з а п р оса , п р исв а ив а я
61
ему з на ч ение UNKNOWN. Поэ тому в р ез ульта те в ып олнения п од з а п р оса не
буд ет п олуч ено ни од ного з на ч ения и п од з а п р ос п р имет з на ч ениело ж ь. Э то
в св ою оч ер ед ьсд ела ет NOT EXISTS истинным, и, след ов а тельно, стр ока с
NULL з на ч ением в п оле RATING п оп а д ет в в ыход ные д а нные. По смыслу
з а п р оса та кой р ез ульта т яв ляется неп р а в ильным, та к ка к на са мом д еле
р ейтинг унив ер ситета , оп исыв а емого д а нной стр окой может бытьи больше
р ейтинга ка кого-либо москов ского унив ер ситета (он п р осто неиз в естен).
У ка з а нна я п р облема св яз а на с тем, ч то з на ч ение EXISTS в сегд а п р инима ет
з на ч енияи ст и на или ло ж ь, и никогд а – UNKNOWN. Э то яв ляетсяд ов од ом д ля
исп ользов а нияв та ких случ а ях оп ер а тор а ANY в место EXISTS.
2.14. И спол ь з ование COUNT вм ест о EXISTS
Пр и отсутств ии NULL-з на ч ений оп ер а тор EXISTS может быть
исп ользов а н в место ANY и ALL. Та кжев место EXISTS и NOT EXISTS могут
бытьисп ользов а ны теже са мые п од з а п р осы, но с исп ользов а нием COUNT(*)
в п р ед ложении SELECT. Н а п р имер , з а п р ос
SELECT *
FROM UNIVERSITY A
WHERE NOT EXISTS
(SELECT *
FROM UNIVERSITY B
WHERE A.RATING > = B.RATING
AND B.CITY = ‘М о ск
ва ’);
может бытьп р ед ста в лен и в след ующ ем в ид е
SELECT *
FROM UNIVERSITY A
WHERE 1 >
(SELECT COUNT(*)
FROM UNIVERSITY B
WHERE A.RATING > = B.RATING
AND B.CITY = ‘М о ск
ва ’);
62
УП Р АЖ НЕ НИ Я
37.Н а п ишите з а п р ос, в ыбир а ющ ий д а нные о на з в а ниях унив ер ситетов ,
р ейтинг котор ых р а в ен или п р ев осход ит р ейтинг Вор онежского
госуд а р ств енного унив ер ситета .
38.Н а п ишите з а п р ос, исп ользующ ий ANY или ALL, в ып ол няющ ий в ыбор ку
д а нных о студ ента х, у котор ых в гор од еих п остоянного местожительств а
нет унив ер ситета .
39.Н а п ишите з а п р ос, в ыбир а ющ ий из та блицы EXAM_MARKS д а нные о
на з в а ниях п р ед метов обуч ения, д ля котор ых з на ч ение п олуч енных на
э кз а мене оценок (п оле MARK) п р ев ыша ет любое з на ч ение оценки д ля
п р ед мета , имеющ его ид ентифика тор р а в ный 105.
40.Н а п ишитеэ тот жез а п р ос с исп ользов а нием MAX.
2.15. О перат ор объ единения UNION
О п ер а тор UNION исп ользуетсяд л яобъед инения в ыход ных д а нных д в ух
или более SQL-з а п р осов в ед иное множеств о стр ок и столбцов . Н а п р имер ,
д ля того, ч тобы п олуч ить в од ной та блице фа милии и ид ентифика тор ы
студ ентов и п р еп од а в а телей из М оскв ы, можно исп ользов а ть след ующ ий
з а п р ос.
SELECT ‘С туден т______’, SURNAME, STUDENT_ID
FROM STUDENT
WHERE CITY = ‘М о ск
ва ’
UNION
SELECT ‘Пр епо да ва тель’, SURNAME, LECTURER_ID
FROM LECTURER
WHERE CITY = ‘М о ск
ва ’;
О бр а тите в нима ние на то, ч то симв олом “;” (точ ка с з а п ятой)
ока нч ив а ется только п ослед ний з а п р ос. О тсутств ие э того симв ола в конце
SELECT-з а п р оса оз на ч а ет, ч то след ующ ий з а ним з а п р ос та кже, ка к и он
са м, яв ляетсяч а стью общ его з а п р оса с UNION.
Исп ользов а ние оп ер а тор а UNION в оз можно только п р и объед инении
63
з а п р осов , соотв етств ующ ие столбцы котор ых со в м ест и м ы по о бъ ед и нени ю.
То есть, соотв етств ующ ие ч ислов ые п оля д олжны иметь п олностью
сов п а д а ющ ие тип и р а з мер , симв ольные п оля д олжны иметь точ но
сов п а д а ющ ее колич еств о симв олов . Е сли NULL-з на ч ения з а п р ещ ены д ля
столбца хотя бы од ного любого п од з а п р оса объед инения, то они д олжны
бытьз а п р ещ ены и д ляв сех соотв етств ующ их столбцов в д р угих п од з а п р оса х
объед инения.
2.16. Уст ранение дубл ирования в UNION
В отлич ие от обыч ных з а п р осов UNION а в тома тич ески исключ а ет из
в ыход ных д а нных д ублика ты стр ок, на п р имер , в з а п р осе
SELECT CITY
FROM STUDENT
UNION
SELECT CITY
FROM LECTURER;
сов п а д а ющ иена именов а ниягор од ов буд ут исключ ены.
Е сли в се же необход имо в ка жд ом з а п р осе в ыв ести в се стр оки
нез а в исимо от того, имеются ли та кие же стр оки в д р угих объед иняемых
з а п р оса х, то след ует исп ользов а тьв о множеств енном з а п р осеконстр укцию с
оп ер а тором UNION ALL. Та к в з а п р осе
SELECT CITY
FROM STUDENT
UNION ALL
SELECT CITY
FROM LECTURER;
д ублика ты з на ч ений гор од ов , в ыв од имые в тор ой ч а стью з а п р оса , не буд ут
исключ а ться.
Пр ив ед ем ещ е од ин п р имер исп ользов а ния оп ер а тор а UNION. Пусть
необход имо соста в итьотч ет, сод ер жа щ ий д ля ка жд ой д а ты сд а ч и э кз а менов
св ед ения п о ка жд ому студ енту, п олуч ив шему ма ксима льную или
минима льную оценки.
SELECT ‘ма к
с о ц’, A.STUDENT_ID, SURNAME, MARK, EXAM_DATE
64
FROM STUDENT A, EXAM_MARKS B
WHERE (A.STUDENT_ID = B.STUDENT_ID
AND B.MARK =
(SELECT MAX(MARK)
FROM EXAM_MARKS C
WHERE C.EXAM_DATE = B.EXAM_DATE))
UNION ALL
SELECT ‘ми н о ц ’, A.STUDENT_ID, SURNAME, MARK, EXAM_DATE
FROM STUDENT A, EXAM_MARKS B
WHERE (A.STUDENT_ID = B.STUDENT_ID
AND B.MARK =
(SELECT MIN(MARK)
FROM EXAM_MARKS C
WHERE C.EXAM_DATE = B.EXAM_DATE));
Д ля отлич ия стр ок, в ыв од имых п ер в ой и в тор ой ч а стями з а п р оса , в них
в ста в лены текстов ыеконста нты ‘ма к
с о ц’ и ‘ми н о ц ’.
В п р ив ед енном з а п р осе а гр егир ующ ие функции исп ользуются в
п од з а п р оса х. Э то яв ляется нер а циона льным с точ ки з р ения в р емени,
з а тр ач ив а емого на в ып олнение з а п р оса (см. р а з д ел 2.9). Б олее э ффектив на
фор ма з а п р оса , в оз в р а щ а ющ его а на логич ный р ез ульта т:
SELECT ‘ма к
с о ц’, A.STUDENT_ID, SURNAME, E.MARK, E.EXAM_DATE
FROM STUDENT A,
(SELECT B.STUDENT_ID, B.MARK, B.EXAM_DATE
FROM EXAM_MARKS B,
(SELECT MAX(MARK) AS MAX_MARK, C.EXAM_DATE
FROM EXAM_MARKS C
GROUP BY C.EXAM_DATE) D
WHERE B.EXAM_DATE=D.EXAM_DATE
AND B.MARK=MAX_MARK) E
WHERE A.STUDENT_ID=E.STUDENT_ID
UNION ALL
SELECT ‘ми н о ц ’, A.STUDENT_ID, SURNAME, E.MARK, E.EXAM_DATE
FROM STUDENT A,
(SELECT B.STUDENT_ID, B.MARK, B.EXAM_DATE
FROM EXAM_MARKS B,
(SELECT MIN(MARK) AS MIN_MARK, C.EXAM_DATE
FROM EXAM_MARKS C
GROUP BY C.EXAM_DATE) D
65
WHERE B.EXAM_DATE=D.EXAM_DATE
AND B.MARK=MIN_MARK) E
WHERE A.STUDENT_ID=E.STUDENT_ID
2.17. И спол ь з ование UNION сORDER BY
Пр ед ложение ORDER BY п р именяется д ля уп ор яд оч ения в ыход ных
д а нных объед инения з а п р осов та к же, ка к и д ля отд ельных з а п р осов .
Послед ний п р имер , п р и необход имости уп ор яд оч ения в ыход ных д а нных
з а п р оса п о фа милиямстуд ентов и д а та мэ кз а менов , может в ыгляд етьта к:
SELECT ‘ма к
с о ц’, A.STUDENT_ID, SURNAME, E.MARK, E.EXAM_DATE
FROM STUDENT A,
(SELECT B.STUDENT_ID, B.MARK, B.EXAM_DATE
FROM EXAM_MARKS B,
(SELECT MAX(MARK) AS MAX_MARK, C.EXAM_DATE
FROM EXAM_MARKS C
GROUP BY C.EXAM_DATE) D
WHERE B.EXAM_DATE=D.EXAM_DATE
AND B.MARK=MAX_MARK) E
WHERE A.STUDENT_ID=E.STUDENT_ID
UNION ALL
SELECT ‘ми н о ц ’, A.STUDENT_ID, SURNAME, E.MARK, E.EXAM_DATE
FROM STUDENT A,
(SELECT B.STUDENT_ID, B.MARK, B.EXAM_DATE
FROM EXAM_MARKS B,
(SELECT MIN(MARK) AS MIN_MARK, C.EXAM_DATE
FROM EXAM_MARKS C
GROUP BY C.EXAM_DATE) D
WHERE B.EXAM_DATE=D.EXAM_DATE
AND B.MARK=MIN_MARK) E
WHERE A.STUDENT_ID=E.STUDENT_ID
ORDER BY SURNAME, E.EXAM_DATE;
66
2.18. В неш нее объ единение
Ч а сто п олез на оп ер а ция объед инения д в ух з а п р осов , в котор ой в торой
з а п р ос в ыбир а ет стр оки, исключ енные п ер в ым. Та ка я оп ер а ция на з ыв а ется
в нешним объед инением.
Ра ссмотр им п р имер . Пусть в та блице STUDENT имеются з а п иси о
студ ента х, в котор ых не ука з а н ид ентифика тор унив ер ситета . Тр ебуется
соста в итьсп исок студ ентов с ука з а нием на именов а нияунив ер ситета д ля тех
студ ентов , у котор ых э ти д а нные есть, но п р и э том не отбр а сыв а я и
студ ентов , у котор ых унив ер ситет не ука з а н. М ожно п олуч ить жела емые
св ед ения, сфор мир ов а в объед инение д в ух з а п р осов , од ин из котор ых
в ып олняет в ыбор ку студ ентов с на з в а ниями их унив ер ситетов , а в тор ой
в ыбир а ет студ ентов с NULL-з на ч ениями в п оле UNIV_ID. В д а нном случ а е
ока з ыв а ется п олез ной в оз можность в ста в ки в з а п р ос конста нт, в на шем
случ а е текстов ой конста нты ‘н е и звестен ’, ч тобы отметитьв сп иске тех
студ ентов , у котор ых отсутств ует инфор ма цияоб унив ер ситете.
SELECT SURNAME, NAME, UNIV_NAME
FROM STUDENT, UNIVERSITY
WHERE STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID
UNION
SELECT SURNAME, NAME, ‘н еи звестен ’
FROM STUDENT
WHERE UNIV_ID IS NULL
ORDER BY 1;
Д ля сов местимости столбцов объед иняемых з а п р осов конста нту
‘н еи звестен ’ в о в тор ом з а п р осеслед ует д оп олнитьп р обела ми та к, ч тобы ее
д лина соотв етств ов а ла д лине п оля UNIV_NAME или исп ользов а ть д ля
согла сов а ниятип ов функцию CAST. В некотор ых СУ Б Д согла сов а ние тип ов
п оляи з а мещ а ющ ей его текстов ой конста нты осущ еств ляетсяа в тома тич ески.
УП Р АЖ НЕ НИ Я
41.Соз д а йте объед инение д в ух з а п р осов , котор ые в ыд а ют з на ч ения п олей
UNIV_NAME, CITY, RATING д ляв сех унив ер ситетов . Теиз них, у котор ых
р ейтинг р а в ен или в ыше300, д олжны иметькоммента р ий ‘Вы со к
и й’, в се
оста льные– ‘Н и зк
и й’.
67
42.Н а п ишите кома нд у, котор а я в ыд а ет сп исок фа милий студ ентов , с
коммента р ием ‘успева ет’ у студ ентов , имеющ их в се п оложительные
оценки, коммента р ием ‘н е успева ет’ д ля сд а в а в ших э кз а мены, но
имеющ их хотя бы од ну неуд ов летв ор ительную оценку, и коммента р ием
‘н е сда ва л’ – д ля в сех оста льных. В в ыв од имом р ез ульта те фа милии
студ ентов уп ор яд оч итьп о а лфа в иту.
43.Выв ед ите объед иненный сп исок студ ентов и п р еп од а в а телей, жив ущ их в
М оскв е, с соотв етств ующ ими коммента р иями ‘студен т’ или
‘пр епо да ва тель’.
44.Выв ед ите объед иненный сп исок студ ентов
и п р еп од а в а телей
Вор онежского госуд а р ств енного унив ер ситета с соотв етств ующ ими
коммента р иями ‘студен т’ или ‘пр епо да ва тель’.
2.19. С оединение т абл иц сиспол ь з ованием
операт ора JOIN
Е сли в оп ер а тор еSELECT п осле ключ ев ого слов а FROM ука з ыв а ется не
од на , а д в е та блицы, то в р ез ульта те в ып олнения з а п р оса , в котор ом
отсутств ует п р ед ложение WHERE, ка жд а я стр ока од ной та блицы буд ет
соед инена с ка жд ой стр окой в торой та блицы. Та ка я оп ер а ция на з ыв а ется
д ека р т о в ы м пр о и зв ед ени ем или по лны м (CROSS) со ед и нени ем та блиц ба з ы
д а нных. Са ма п о себеэ та оп ер а ция не имеет п р а ктич еского з на ч ения, более
того, п р и ошибоч ном исп ользов а нии она может п р ив ести к неожид а нным
нешта тным ситуа циям, та к ка к в э том случ а е в отв ете на з а п р ос колич еств о
з а п исей буд ет р а в но п р оиз в ед ению ч исла з а п исей в соед иняемых та блица х,
то есть может ока з аться ч р ез в ыч а йно большим. Соед инение та блиц имеет
смысл тогд а , когд а соед иняются не в се стр оки исход ных та блиц, а только те,
котор ые интер есуют п ользов а теля. Та кое огр а нич ение может быть
осущ еств лено с п омощ ью исп ользов а ния в з а п р осе соотв етств ующ его
услов ия в п р ед ложении WHERE. Та ким обр а з ом, SQL п оз в ол яет в ыв од ить
инфор ма цию из нескольких та блиц, св яз ыв а я их п о з на ч ениям оп р ед еленных
п олей.
Н а п р имер , если необход имо п олуч ить фа милии студ ентов (та блица
STUDENT) и д ля ка жд ого студ ента – на з в а ния унив ер ситетов (та блица
68
UNIVERSITY), р а сп оложенных в гор од е, гд е жив ет студ ент, то необход имо
п олуч ить в се комбина ции з а п исей о студ ента х и унив ер ситета х в обеих
та блица х, в котор ых з на ч ение п оля CITY сов п а д а ет. Э то можно сд ела тьс
п омощ ьюслед ующ его з а п р оса .
SELECT STUDENT.SURNAME, UNIVERSITY.UNIV_NAME, STUDENT.CITY
FROM STUDENT, UNIVERSITY
WHERE STUDENT.CITY = UNIVERSITY.CITY;
Соед инение, исп ользующ ее п р ед ика ты, основ а нные на р а в енств а х,
на з ыв а ется экв и со ед и нени ем . Ра ссмотр енный п р имер соед инения та блиц
относятся к в ид у та к на з ыв а емого в нут р еннего (INNER) со ед и нени я. Пр и
та ком тип е соед инения соед иняются только те стр оки та блиц, д ля котор ых
яв ляется истинным п р ед ика т, з а д а в а емый в п р ед ложении ON в ып олняемого
з а п р оса .
Пр ив ед енный в ышез а п р ос может бытьз а п иса н ина ч е, с исп ользов а нием
ключ ев ого слов а JOIN.
SELECT STUDENT.SURNAME, UNIVERSITY.UNIV_NAME, STUDENT.CITY
FROM STUDENT INNER JOIN UNIVERSITY
ON STUDENT.CITY = UNIVERSITY.CITY;
К люч ев ое слов о INNER в з а п р осе может бытьоп ущ ено, та к ка к э та
оп цияв оп ер а тор еJOIN д ейств ует п о умолч а нию.
Ра ссмотр енный в ыше случ а й п олного соед инения (д ека р тов а
п р оиз в ед ения та блиц) с исп ользов а нием ключ ев ого слов а JOIN буд ет
в ыгляд етьслед ующ имобр а з ом
SELECT * FROM STUDENT JOIN UNIVERSITY;
ч то э кв ив а лентно
SELECT * FROM STUDENT, UNIVERSITY;
За метим, ч то в СУ Б Д Oracle з а д а в а емый ста нд а р том яз ыка SQL
оп ер а тор JOIN неп од д ер жив а ется.
69
2.19.1. О перац ии соединения т абл иц посредст вом
ссы л очной ц ел ост ност и
Инфор ма ция в та блица х STUDENT и EXAM_MARKS уже св яз а на
п оср ед ств ом п оля STUDENT_ID. В та блице STUDENT п оле STUDENT_ID
яв ляется п ер в ич ным ключ ом, а в та блице EXAM_MARKS, ссыла ющ имся на
него в нешним ключ ом. Состояние св яз а нных та ким обр а з ом та блиц
на з ыв а ется состоянием ссылоч ной целостности. В д а нном случ а ессылоч на я
целостность э тих та блиц п од р а з умев а ет, ч то ка ж д о м у з на ч ению п оля
STUDENT_ID в та блице EXAM_MARKS о бяза т ельно соотв етств ует т а ко е ж е
зна чени е п оля STUDENT_ID в та блице STUDENT. Д р угими слов а ми, в
та блице EXAM_MARKS не может бытьз а п исей, имеющ их ид ентифика тор ы
студ ентов , котор ых нет в та блице STUDENT. Ста нд а р тное п р именение
оп ер а ции соед инениясостоит в из в леч ении д а нных в тер мина х э той св яз и.
Ч тобы п олуч ить сп исок фа милий студ ентов с п олуч енными ими
оценка ми и ид ентифика тор а ми п р ед метов можно исп ользов а тьслед ующ ий
з а п р ос:
SELECT SURNAME, MARK, SUBJ_ID
FROM STUDENT, EXAM_MARKS
WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID;
Тот же са мый р ез ульта т может быть п олуч ен п р и исп ользов а нии в
з а п р осе д ля з а д а ния оп ер а ции соед инения та блиц ключ ев ого слов а JOIN.
За п р ос с оп ер а тор ом JOIN в ыгляд ит след ующ имобр а з ом
SELECT SURNAME, MARK
FROM STUDENT JOIN EXAM_MARKS
ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID;
Х отя в ыше р еч ьшла о соед инении д в ух та блиц, можно сфор мир ов а ть
з а п р осы п утем соед иненияболееч ем д в ух та блиц.
Пусть тр ебуется на йти фа милии в сех студ ентов , п олуч ив ших
неуд ов летв ор ительную оценку, в местес на з в а ниями п р ед метов обуч ения, п о
котор ым п олуч ена э та оценка .
SELECT SUBJ_NAME, SURNAME, MARK
FROM STUDENT, SUBJECT, EXAM_MARKS
WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID
AND SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID
70
AND EXAM_MARKS.MARK = 2;
То жеса моес исп ользов а ниемоп ер а тор а JOIN
SELECT SUBJ_NAME, SURNAME, MARK
FROM STUDENT JOIN SUBJECT JOIN EXAM_MARKS
ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID
AND SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID
AND EXAM_MARKS.MARK = 2;
2.19.2. В неш нее соединение т абл иц
К а к отмеч а лось р а нее, п р и исп ользов а нии в нут р еннего (INNER)
соед инения та блиц соед иняются только те их стр оки, в котор ых сов п а д а ют
з на ч ения п олей, з а д а в а емые в п р ед ложении WHERE з а п р оса . О д на ко в о
многих случ а ях э то может п р ив ести к нежела тельной п отер е инфор ма ции.
Ра ссмотр им ещ е р а з п р ив ед енный в ыше п р имер з а п р оса на в ыбор ку сп иска
фа милий студ ентов с п олуч енными ими оценка ми и ид ентифика тор а ми
п р ед метов . Пр и исп ользов а нии, ка к э то было сд ела но в р а ссма тр ив а емом
п р имер е, в нутр еннего соед инения в р ез ульта т з а п р оса неп оп а д ут студ енты,
котор ые ещ е не сд а в а ли э кз а мены и котор ые, след ов а тельно, отсутств уют в
та блицеEXAM_MARKS. Е сли же необход имо иметьз а п иси об э тих студ ента х
в в ыд а в а емом з а п р осом сп иске, то можно п р исоед инить св ед ения о
студ ента х, не сд а в а в ших э кз а мен, п утем исп ол ьзов а ния оп ер а тор а UNION с
соотв етств ующ им з а п р осом. Н а п р имер , след ующ имобр а з ом:
SELECT SURNAME, CAST MARK AS CHAR(1), CAST SUBJ_ID AS CHAR(10)
FROM STUDENT, EXAM_MARKS
WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID
UNION
SELECT SURNAME, CAST NULL AS CHAR(1), CAST NULL AS CHAR(10)
FROM STUDENT
WHERE NOT EXIST
(SELECT *
FROM EXAM_MARKS
WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID);
(з д есьфункция п р еобр а з ов а ния тип ов CAST исп ользуется д ля обесп еч ения
сов местимости тип ов п олей объед иняемых з а п р осов ).
71
Н ужный р ез ульта т, од на ко, может бытьп олуч ен и п утем исп ользов а ния
в неш нег о со ед и нени я, точ нееод ной из его р а з нов ид ностей – лев о г о в неш него
со ед и нени я, с исп ользов а нием котор ого з а п р ос буд ет в ыгляд етьслед ующ им
обр аз ом:
SELECT SURNAME, MARK
FROM STUDENT LEFT OUTER JOIN EXAM_MARKS
ON STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID;
Пр и исп ользов а нии лев о го соед инения р а сшир ение в ыв од имой та блицы
осущ еств ляетсяз а сч ет з а п исей в ход ной та блицы, имя котор ой ука з а но слев а
от оп ер а тор а JOIN.
След ует з а метить, ч то нота цияз а п р осов с в нешним соед инением в СУ Б Д
ORACLE отл ич а етсяот п р ив ед енной нота ции, з а д а в а емой ста нд а р том яз ыка
SQL. В нота ции, исп ользуемой в Oracle, э тот жез а п р ос буд ет иметьв ид
SELECT SURNAME, MARK, SUBJ_ID
FROM STUDENT, EXAM_MARKS
WHERE STUDENT.STUDENT_ID = EXAM_MARKS.STUDENT_ID(+);
Зна к (+) ста в ится у той та блицы, котор а яд оп олняетсяз а п исями с NULLз на ч ениями, ч тобы п р и соед инении та блиц в в ыход ное отношениеп оп а ли и
тез а п иси д р угой та блицы, д лякотор ых в та блицесо з на ком (+) нена ход ится
стр ок с соотв етств ующ ими з на ч ениями а тр ибутов , исп ользуемых д ля
соед инения. То естьд ля лев о го в нешнего соед инения (п о нота ции ста нд а р та
SQL) в з а п р осеORACLE-SQL ука з а тель(+) ста в итсяу пр а в о й та блицы.
Пр ив ед енный в ыше з а п р ос может быть р еа лиз ов а н и с п р именением
пр а в о г о в неш него со ед и нени я. О н буд ет иметьслед ующ ий в ид
SELECT SURNAME, MARK
FROM EXAM_MARKS RIGHT OUTER JOIN STUDENT
ON EXAM_MARKS.STUDENT_ID = STUDENT.STUDENT_ID;
Зд есь та блица STUDENT, з а сч ет з а п исей котор ой осущ еств ляется
р а сшир ениев ыв од имой та блицы, стоит сп р а в а от оп ер а тор а JOIN.
В нота ции Oracle э тот з а п р ос буд ет в ыгляд етьслед ующ им обр а з ом.
SELECT SURNAME, MARK, SUBJ_ID
FROM STUDENT, EXAM_MARKS
WHERE EXAM_MARKS.STUDENT_ID(+) = STUDENT.STUDENT_ID;
Вид но, ч то исп ользов а ние в нешнего п р а в ого или лев ого соед инения
72
п оз в оляет сущ еств енно уп р остить з а п р ос, сд ела ть его з а п ись более
комп а ктной.
Иногд а в оз ника ет необход имость в ключ ения в р ез ульта т з а п р оса
з а п исей из обеих (п р а в ой и лев ой) соед иняемых та блиц, д ля котор ых не
уд ов летв ор яется услов ие соед инения. Та кое соед инение на з ыв а ется по лны м
в неш ни м со ед и нени ем и осущ еств ляется ука з а нием в з а п р осеключ ев ых слов
FULL OUTER JOIN или UNION JOIN.
УП Р АЖ НЕ НИ Я
45.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од д а нных о фа милиях,
сд а в а в ш и х э кз а мены студ ентов , в месте с ид ентифика тор а ми ка жд ого
сд а нного ими п р ед мета обуч ения.
46.Н а п ишите з а п р ос, котор ый в ып олняет в ыбор ку з на ч ений фа милии в сех
студ ентов
с ука з а нием д ля студ ентов , сд а в а в ших э кз а мены,
ид ентифика тор ов сд а нных ими п р ед метов обуч ения.
47.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од д а нных о фа милиях
студ ентов , сд а в а в ш и х э кз а мены, в месте с на именов а ниями ка жд ого
сд а нного ими п р ед мета обуч ения.
48.Н а п ишите з а п р ос на в ыд а ч у д ля ка жд ого студ ента на з в а ний в сех
п р ед метов обуч ения, п о котор ымэ тот студ ент п олуч ил оценку 4 или 5.
49.Н а п ишите з а п р ос на в ыд а ч у д а нных о на з в а ниях в сех п р ед метов , п о
котор ым студ енты п олуч ил и только хор ошие(4 и 5) оценки. В в ыход ных
д а нных д олжны бытьп р ив ед ены фа милии студ ентов , на з в а ния п р ед метов
и оценка .
50.Н а п ишите з а п р ос, котор ый в ып олняет в ыв од сп иска унив ер ситетов с
р ейтингом, п р ев ыша ющ им 300, в месте со з на ч ением ма ксима льного
р а з мер а стип енд ии, п олуч а емой студ ента ми в э тих унив ер ситета х.
51.Н а п ишите з а п р ос на в ыд а ч у сп иска фа мил ий студ ентов (в а лфа в итном
п ор яд ке) в месте со з на ч ением р ейтинга унив ер ситета , гд е ка жд ый из них
уч ится, в ключ ив в сп исок и тех студ ентов , д ля котор ых в ба з ед а нных не
ука з а но место их уч ебы.
73
2.19.3. И спол ь з ование псевдоним ов при соединении
т абл иц
Ч а сто п р и п олуч ении инфор ма ции из та блиц ба з ы д а нных необход имо
осущ еств лятьсоед инениета блицы с еежекоп ией. Н а п р имер , э то тр ебуетсяв
случ а е, когд а тр ебуется на йти фа милии студ ентов , имеющ их од ина ков ые
имена . Пр и соед инении та блицы с еежекоп ией в в од ят п сев д онимы (а л иа сы)
та блицы. За п р ос д ля п оиска фа милий студ ентов , имеющ их од ина ков ые
имена , в ыгляд ит след ующ им обр а з ом
SELECT FIRST.SURNAME, SECOND.SURNAME
FROM STUDENT FIRST, STUDENT SECOND
WHERE FIRST.NAME = SECOND.NAME
В э том з а п росе в в ед ены д в а п сев д онима д ля од ной та блицы STUDENT,
ч то п оз в оляет кор р ектно з а д а ть в ыр а жение, св яз ыв а ющ ее д в е коп ии
та блицы. Ч тобы исключ ить п ов тор ения стр ок в в ыв од имом р ез ульта те
з а п р оса из -з а п ов тор ного ср а в нения од ной и той же п а р ы студ ентов ,
необход имо з а д а тьп ор яд ок след ов а ния д ля д в ух з на ч ений та к, ч тобы од но
з на ч ениебыло меньше, ч ем д р угое, ч то д ела ет п р ед ика т а симметр ич ным.
SELECT FIRST.SURNAME, SECOND.SURNAME
FROM STUDENT FIRST, STUDENT SECOND
WHERE FIRST.NAME = SECOND.NAME
AND FIRST.SURNAME < SECOND.SURNAME
УП Р АЖ НЕ НИ Я
52.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од сп иска в сех п а р фа милий
студ ентов , п р ожив а ющ их в од ном гор од е. Пр и э том нев ключ а тьв сп исок
комбина ции фа милий студ ентов са мих с собой (то естькомбина цию тип а
“Ив а нов -Ив а нов ”) и комбина ции фа милий студ ентов , отлич а ющ иеся
п ор яд ком след ов а ния (то естьв ключ а тьод ну из д в ух комбина ций тип а
“Ив а нов -Петр ов ” и “Петр ов -Ив а нов ”).
53.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од сп иска в сех п а р на з в а ний
унив ер ситетов , р а сп оложенных в од ном гор од е, не в ключ а я в сп исок
комбина ции на з в а ний унив ер ситетов са мих с собой и п а р ы на з в а ний
унив ер ситетов , отлич а ющ иесяп ор яд ком след ов а ния.
74
54.Н а п иса ть з а п р ос, котор ый п оз в оляет п олуч ить д а нные о на з в а ниях
унив ер ситетов и гор од ов , в котор ых они р а сп оложены, с р ейтингом,
р а в ным ил и п р ев ыша ющ имр ейтинг ВГ У .
Д О П О Л НИ Т Е Л ЬНЫ Е УП Р АЖ НЕ НИ Я НА В Ы БО Р КУ Д АННЫ Х
55.Н а п иса ть з а п р ос, в ып ол няющ ий в ыв од д а нных об имена х и фа милиях
студ ентов , п олуч ив ших хотябы од ну отлич ную оценку.
56.Н а п иса ть з а п р ос, в ып ол няющ ий в ыв од д а нных об имена х и фа милиях
студ ентов , имеющ их в есьна бор оценок (тр ойки, ч етв ер ки и п ятер ки).
57.Н а п иса ть з а п р ос, в ып олняющ ий в ыбор ку з на ч ений ид ентифика тор ов
студ ентов , имеющ их та кие же оценки, ч то и студ ент с ид ентифика тор ом
12.
58.Н а п иса ть з а п р ос, в ып олняющ ий в ыбор ку в сех п а р ид ентифика тор ов
п р еп од а в а телей, в ед ущ их од ина ков ыеп р ед меты обуч ения.
59.Н а п иса ть з а п р ос, в ып ол няющ ий в ыв од д а нных об имена х и фа милиях
студ ентов , неп олуч ив ших ни од ной отлич ной оценки.
60.Н а п иса ть з а п р ос, в ып олняющ ий в ыбор ку з на ч ений на именов а ний
п р ед метов обуч ения, на п р еп од а в а ниекотор ых отв од итсяболее50 ч а сов .
61.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од
имеющ их ни од ной оценки.
колич еств а
студ ентов ,
не
62.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од колич еств а студ ентов , имеющ их
только отлич ныеоценки.
63.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од д а нных о п р ед мета х обуч ения,
котор ыеп р еп од а ютсяп р еп од а в а телем п о фа милии К олесников .
64.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од имен и фа милий п р еп од а в а телей,
п р ов од ящ их з а нятияна п ер в ом кур се.
65.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од имен и фа милий студ ентов , место
п р ожив а ния котор ых не сов п а д а ет с гор од ом, в котор ом на ход ится их
унив ер ситет.
66.Н а п иса ть з а п р ос, в ып ол няющ ий в ыв од колич еств а э кз а менов , сд а нных
(с п оложительной оценкой) студ ентомс ид ентифика тор ом 32.
75
67.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од имен и фа милий п р еп од а в а телей,
ч ита ющ их д в а и болеер а з лич ных п р ед мета обуч ения.
68.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од имен и фа милий п р еп од а в а телей,
п р ов од ящ их з а нятияв д в ух и болеесеместр а х.
69.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од д а нных о на именов а ниях
п р ед метов обуч ения, ч ита емых д в умяи болееп р еп од а в а тел ями.
70.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од д ля ка жд ого п р ед мета обуч ения,
п р еп од а в а емого д ля студ ентов ВГ У , его на именов а ние, фа милию и имя
п р еп од а в а теля, и гор од , в котор омжив ет студ ент.
71.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од
п р ов од имых п р еп од а в а телем Л а гутиным.
колич еств а
ч а сов
з а нятий,
72.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од фа милий п р еп од а в а телей,
ч ита ющ их та киежеп р ед меты обуч ения, ч то и п р еп од а в а тельСор окин.
73.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од фа милий п р еп од а в а телей, уч ебна я
на гр уз ка котор ых (колич еств о уч ебных ч а сов ) п р ев ыша ет на гр уз ку
п р еп од а в а теляН икола ев а .
74.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од д а нных о п р еп од а в а телях,
в ед ущ их обуч ение хотя бы п о од ному из п р ед метов обуч ения, котор ые
п р еп од а ютсяп р еп од а в а телем п о фа милии Сор окин.
75.Н а п иса ть з а п р ос, в ып ол няющ ий в ыв од
д а нных о фа милиях
п р еп од а в а телей, п р еп од а ющ их студ ента м, обуч а ющ имся в унив ер ситета х
с р ейтингом, меньшим200.
76.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од д а нных о на именов а ниях
унив ер ситетов , р а сп оложенных в М оскв е, и имеющ их р ейтинг меньше,
ч ему ВГ У .
77.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од сп иска фа милий студ ентов ,
обуч а емых в унив ер ситете, р а сп оложенном в гор од е, на з в а ние котор ого
стоит п ер в ым в а лфа в итном сп искегор од ов .
78.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од сп иска студ ентов , ср ед няя оценка
котор ых п р ев ыша ет 4 ба лла .
79.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од общ его колич еств а уч ебных ч а сов
з а нятий, п р ов од имых д лястуд ентов п ер в ого кур са ВГ У .
76
80.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од ср ед него колич еств а уч ебных
ч а сов п р ед метов обуч ения, п р еп од а в а емых студ ента м в тор ого кур са ВГ У .
81.Н а п иса тьз а п р ос, в ып олняющ ий в ыв од колич еств а студ ентов , имеющ их
хотя бы од ну неуд ов летв ор ительную оценку и п р ожив а ющ их в гор од е, не
сов п а д а ющ ем с гор од ом их унив ер ситета .
82.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од сп иска фа милий студ ентов ,
имеющ их только отлич ные оценки и п р ожив а ющ их в гор од е, не
сов п а д а ющ ем с гор од ом их унив ер ситета .
83.Н а п иса ть з а п р ос, в ып олняющ ий в ыв од сп иска фа милий студ ентов ,
имеющ их д в е и более отлич ных оценки в ка жд ом семестр е, и
п р ожив а ющ их в гор од е, несов п а д а ющ ем с гор од омих унив ер ситета .
84.Пр ив ед итека к можно большефор мулир ов ок з а п р оса “Получ итьфа милии
студ ентов , сд а в а в ших э кз а мен п о инфор ма тике”.
85.Пр ив ед итека к можно большефор мулир ов ок з а п р оса “Получ итьфа милии
п р еп од а в а телей, п р еп од а ющ их инфор ма тику”.
3. М а н и пули р о ва н и е да н н ы ми
3.1. Ком анды м анипул ирования данны м и
В SQL д ля в ып олненияоп ер а ций в в од а д а нных в та блицу, их из менения
и уд а ления п р ед на з на ч ены тр и кома нд ы яз ыка ма нип улир ов а ния д а нными
(DML). Э то кома нд ы – INSERT (вставить), UPDATE (обновить), DELETE
(удалить).
К ома нд а INSERT осущ еств ляет в ста в ку в та блицу нов ой стр оки. В
п р остейшемслуч а еона имеет след ующ ий в ид :
INSERT INTO <и м ят а бли цы > VALUES (<зна чени е>, <зна чени е>, … );
Пр и та кой з а п иси ука з а нные в скобка х п осле ключ ев ого слов а VALUES
з на ч ения в в од ятся в п оля д оба в ленной в та блицу нов ой стр оки в том
п ор яд ке, в котор ом соотв етств ующ ие столбцы ука з а ны п р и соз д а нии
та блицы, то естьв оп ер а тор еCREATE TABLE.
Н а п р имер , в в од нов ой стр оки в
осущ еств лен след ующ имобр а з ом
та блицу STUDENT может быть
INSERT INTO STUDENT
VALUES (101,‘Ива н о в’,‘Алек
са н др ’, 200, 3,‘М о ск
ва ’,‘6/10/1979’, 15);
Ч тобы та ка якома нд а могла бытьв ып олнена , та блица с ука з а нным в ней
именем (STUDENT) д олжна быть п р ед в а р ительно оп р ед елена (соз д а на )
кома нд ой CREATE TABLE. Е сли в ка кое-либо п оле необход имо в ста в ить
NULL-з на ч ение, то оно в в од итсяка к обыч ноез на ч ение:
INSERT INTO STUDENT
VALUES (101,‘Ива н о в’, NULL, 200, 3,‘М о ск
ва ’,‘6/10/1979’, 15);
В случ а ях, когд а необход имо в в ести з на ч ения п олей в п ор яд ке,
отлич ном от п ор яд ка столбцов , з а д а нного кома нд ой CREATE TABLE, или
если тр ебуется в в ести з на ч ения не в о в сестолбцы, то след ует исп ользов а ть
след ующ уюфор му кома нд ы INSERT:
INSERT INTO STUDENT (STUDENT_ID, CITY, SURNAME, NAME)
VALUES (101, ‘М о ск
ва ’, ‘Ива н о в’, ‘С а ша ’);
Столбца м, на именов а ния котор ых не ука з а ны в п р ив ед енном в скобка х
сп иске, а в тома тич ески п р исв а ив а ется з на ч ение п о умолч а нию, если оно
78
на з на ч ено п р и оп иса нии та блицы (кома нд а CREATE TABLE), либо з на ч ение
NULL.
С п омощ ью кома нд ы INSERT можно из в леч ь з на ч ение из од ной
та блицы и р а з меститьего в д р угой, к п р имер у, з а п р осом след ующ его в ид а :
INSERT INTO STUDENT1
SELECT *
FROM STUDENT
WHERE CITY = ‘М о ск
ва ’;
Пр и э том та блица STUDENT1 д олжна быть п р ед в а р ительно соз д а на
кома нд ой CREATE TABLE (р а з д ел 4.1) и иметь стр уктур у, ид ентич ную
та блицеSTUDENT.
У да ление стр ок из та блицы осущ еств ляется с п омощ ью кома нд ы
DELETE.
След ующ еев ыр а жениеуд а ляет в сестр оки та блицы EXAM_MARKS1.
DELETE FROM EXAM_MARKS1;
В р ез ульта те та блица ста нов ится п устой (п осле э того она может быть
уд а лена кома нд ой DROP TABLE).
Д ля уд а ления из та блицы ср а з у нескольких стр ок, уд ов летв ор яющ их
некотор ому услов ию можно в осп ользов а ться п р ед ложением WHERE,
на п р имер ,
DELETE FROM EXAM_MARKS1
WHERE STUDENT_ID = 103;
М ожно уд а литьгр уп п у стр ок
DELETE FROM STUDENT1
WHERE CITY = ‘М о ск
ва ’;
79
К ома нд а UPDATE п оз в оляет изменять , то есть обнов лять, з на ч ения
некотор ых или в сех п олей в сущ еств ующ ей стр оке или стр ока х та блицы.
Н а п р имер , ч тобы д ля в сех унив ер ситетов , св ед ения о котор ых на ход ятся в
та блице UNIVERSITY1, из менить р ейтинг на з на ч ение 200, можно
исп ользов а тьконстр укцию:
UPDATE UNIVERSITY1
SET RATING = 200;
Д ля ука з а ния конкр етных стр ок та блицы, з на ч ения п олей котор ых
д олжны бытьиз менены, в кома нд е UPDATE можно исп ользов а тьп р ед ика т,
ука з ыв а емый в п р ед ложении WHERE.
UPDATE UNIVERSITY1
SET RATING = 200
WHERE CITY = ‘М о ск
ва ’;
В р ез ульта тев ып олненияэ того з а п р оса буд ет из менен р ейтинг только у
унив ер ситетов , р а сп оложенных в М оскв е.
К ома нд а UPDATE п оз в оляет из менятьнетолько од ин, но и множеств о
столбцов . Д ля ука з а ния конкр етных столбцов , з на ч ения котор ых д олжны
бытьмод ифицир ов а ны, исп ользуетсяп р ед ложениеSET.
Н а п р имер , на именов а ние п р ед мета обуч ения ‘М а тема ти к
а ’ (д ля него
SUBJ_ID = 43) д олжно быть з а менено, на на з в а ние ‘Вы сша я
ма тема ти к
а ’, п р и э том ид ентифика ционный номер необход имо сохр а нить,
но в соотв етств ующ ие п оля стр оки та блицы в в ести нов ые д а нные об э том
п р ед метеобуч ения. За п р ос буд ет в ыгляд етьслед ующ им обр а з ом.
UPDATE SUBJECT1
SET SUBJ_NAME = ‘Вы сша я ма тема ти к
а ’, HOUR = 36, SEMESTER
= 1
WHERE SUBJ_ID = 43;
В п р ед ложении SET кома нд ы UPDATE можно исп ользов а тьска ляр ные
в ыр а жения, ука з ыв а ющ иесп особ из менения з на ч ений п оля, в котор ыемогут
в ход итьз на ч енияиз меняемого и д р угих п олей.
UPDATE UNIVERSITY1
SET RATING = RATING*2;
80
Н а п р имер , д ля ув елич ения в та блице STUDENT1 з на ч ения п оля
STIPEND в д в а р а з а д лястуд ентов из М оскв ы можно исп ользов а тьз а п р ос
UPDATE STUDENT1
SET STIPEND = STIPEND*2
WHERE CITY = ‘М о ск
ва ’;
Пр ед ложение SET не яв ляется п р ед ика том, п оэ тому в нем можно
ука з а тьз на ч ениеNULL след ующ им обр а з ом.
UPDATE UNIVERSITY1
SET RATING = NULL
WHERE CITY = ‘М о ск
ва ’;
УП Р АЖ НЕ НИ Я
86.Н а п ишите кома нд у, котор а я в в од ит в та блицу SUBJECT стр оку д ля
нов ого п р ед мета обуч ениясо след ующ ими з на ч ениями п олей:
SEMESTER = 4; SUBJ_NAME = ‘Алгеб р а ’; HOUR = 72;
SUBJ_ID = 201.
87.Вв ед ите з а п ись д л я нов ого студ ента , котор ого з ов ут О р лов Н икола й,
обуч а ющ егося на п ер в ом кур се ВГ У , жив ущ его в Вор онеже, св ед ения о
д а тер ожд енияи р а з мер естип енд ии неиз в естны.
88.Н а п ишите кома нд у, уд а ляющ ую из та блицы EXAM_MARKS з а п иси обо
в сех оценка х студ ента , ид ентифика тор котор ого р а в ен 100.
89.Н а п ишите кома нд у, котор а я ув елич ив а ет на 5 з на ч ение р ейтинга в сех,
имеющ ихся в ба з е д а нных унив ер ситетов , р а сп оложенных в Са нктПетер бур ге.
90.Из мените в та блице з на ч ение гор од а , в котор ом п р ожив а ет студ ент
Ив а нов , на “Во р о н еж ”.
81
3.2. И спол ь з ование подз апросов в INSERT
Пр именение оп ер а тор а INSERT с п од з а п р осом п оз в оляет з а гр ужа ть
ср а з у несколько стр ок в од ну та блицу, исп ользуя инфор ма цию из д р угой
та блицы. В то в р емя ка к оп ер а тор INSERT, использующий VALUES
д оба в ляет только од ну стр оку, INSERT с п од з а п р осом д оба в ляет в та блицу
столько стр ок, сколько п од з а п р ос из в лека ет из д р угой та блицы. Пр и э том
колич еств о и тип
в оз в р а щ а емых п од з а п р осом столбцов д олжно
соотв етств ов а ть колич еств у и тип у столбцов та бл ицы, в котор ую
в ста в ляютсяд а нные.
Н а п р имер , п усть та блица STUDENT1 имеет стр уктур у, п олностью
сов п а д а ющ ую со стр уктур ой та блицы STUDENT. За п р ос, п оз в ол яющ ий
з а п олнить та блицу STUDENT1 з а п исями из та блицы STUDENT обо в сех
студ ента х из М оскв ы, в ыгляд ит след ующ им обр а з ом.
INSERT INTO STUDENT1
SELECT *
FROM STUDENT
WHERE CITY = ‘М о ск
ва ’;
Д ля того же, ч тобы д оба в итьв та блицу STUDENT1 св ед ения обо в сех
студ ента х, котор ые уча т ся в М оскв е, можно исп ользов а тьв п р ед ложении
WHERE соотв етств ующ ий п од з а п р ос. Н а п р имер ,
INSERT INTO STUDENT1
SELECT *
FROM STUDENT
WHERE UNIV_ID IN
(SELECT UNIV_ID
FROM UNIVERSITY
WHERE CITY = ‘М о ск
ва ’);
82
3.2.1. И спол ь з ование подз апросов, основанны х на
т абл иц ах внеш них з апросов
Пр ед п оложим, сущ еств ует та блица SSTUD, в котор ой хр а нятсясв ед ения
о студ ента х, обуч а ющ ихся в том же гор од е, в котор ом они жив ут. М ожно
з а п олнитьэ ту та блицу д а нными из та блицы STUDENT, исп ользуя св яз а нные
п од з а п р осы, след ующ им обр а з ом:
INSERT INTO SSTUD
SELECT *
FROM STUDENT A
WHERE CITY IN
(SELECT CITY
FROM UNIVERSITY B
WHERE A.UNIV_ID = B.UNIV_ID);
Пр ед п оложим, ч то тр ебуется в ыбр а ть сп исок студ ентов , имеющ их
ма ксима льный ба лл на ка жд ый д еньсд а ч и э кз а менов , и р а з меститьего в
д р угой та блицес именем EXAM. Э то можно осущ еств итьс п омощ ьюз а п р оса
INSERT INTO EXAM
SELECT EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE
FROM EXAM_MARKS A
WHERE MARK =
(SELECT MAX(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE);
3.2.2. И спол ь з ование подз апросов сDELETE
Пустьфилиа л унив ер ситета в Н ью-Ва сюка х ликв ид ир ов а н, и тр ебуется
уд а литьиз та блицы STUDENT з а п иси о студ ента х, котор ыета м уч ились. Э ту
оп ер а циюможно в ып олнитьс п омощ ью з а п р оса
DELETE
FROM STUDENT
WHERE UNIV_ID IN
(SELECT UNIV_ID
FROM UNIVERSITY
WHERE CITY = ‘Н ью-Ва сюк
и ’);
83
В п р ед ика те п р ед ложения FROM (п од з а п р оса ) нельзя ссыла ться на
та блицу, из котор ой осущ еств ляется уд а ление. О д на ко можно ссыла ться на
текущ ую стр оку из та блицы, яв ляющ уюся ка нд ид а том на уд а ление, то есть
на стр оку, котор а яв на стоящ еев р емяп р ов ер яетсяв основ ном п р ед ика те.
DELETE
FROM STUDENT
WHERE EXISTS
(SELECT *
FROM UNIVERSITY
WHERE RATING = 401
AND STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID);
Ч а сть AND п р ед ика та в нутр еннего з а п р оса ссыла ется на та блицу
STUDENT. К ома нд а уд а ляет д а нные о студ ента х, котор ые уч а тся в
унив ер ситета х с р ейтингом р а в ным 401. Сущ еств уют и д р угие сп особы
р ешенияэ той з а д а ч и.
DELETE
FROM STUDENT
WHERE 401 IN
(SELECT RATING
FROM UNIVERSITY
WHERE STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID);
Пустьнужно на йти на именьшеез на ч ениеоценки, п олуч енной в ка жд ый
д еньсд а ч и э кз а менов , и уд а литьиз та блицы св ед ения о студ енте, котор ый
п олуч ил э ту оценку. За п р ос буд ет иметьв ид
DELETE
FROM STUDENT
WHERE STUDENT_ID IN
(SELECT STUDENT_ID
FROM EXAM_MARKS A
WHERE MARK=
(SELECT MIN(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE));
Та к ка к столбец STUDENT_ID яв ляется п ер в ич ным ключ ом, то
уд а ляетсяед инств енна ястр ока .
Е сли в ка кой-то д еньсд а в а лся только од ин э кз а мен (то есть, п ол уч ена
только од на минима льна я оценка ), и п о ка кой-либо п р ич ине з а п ись, в
84
которой на ход ится э та оценка , тр ебуется оста в ить, то р ешение буд ет иметь
в ид :
DELETE
FROM STUDENT
WHERE STUDENT_ID IN
(SELECT STUDENT_ID
FROM EXAM_MARKS A
WHERE MARK =
(SELECT MIN(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE
AND 1 <
(SELECT COUNT(SUBJ_ID)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE)));
3.2.3. И спол ь з ование подз апросов сUPDATE
С п омощ ью кома нд ы UPDATE можно п р именятьп од з а п р осы в любой
фор ме, п р иемлемой д лякома нд ы DELETE.
Н а п р имер , исп ользуясв яз а нныеп од з а п р осы, можно ув елич итьз на ч ение
р а з мер а стип енд ии на 20 в з а п исях студ ентов , сд а в ших э кз а мены на 4 и 5.
UPDATE STUDENT1
SET STIPEND = STIPEND + 20
WHERE 4 <=
(SELECT MIN(MARK)
FROM EXAM_MARKS
WHERE
EXAM_MARKS.STUDENT_ID
STUDENT1.STUDENT_ID);
=
Д р угой з а п р ос: “У меньшитьв елич ину стип енд ии на 20 в сем студ ента м,
п олуч ив шим на э кз а менеминима льнуюоценку”.
UPDATE STUDENT1
SET STIPEND = STIPEND – 20
WHERE STUDENT_ID IN
(SELECT STUDENT_ID
FROM EXAM_MARKS A
85
WHERE MARK =
(SELECT MIN(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE));
УП Р АЖ НЕ НИ Я
91.Пустьсущ еств ует та блица с именем STUDENT1, оп р ед еления столбцов
которой п олностью сов п а д а ют с оп р ед елениями столбцов та блицы
STUDENT. Вста в ить в э ту та блицу св ед ения о студ ента х, усп ешно
сд а в ших э кз а мены болееч ем п о п яти п р ед мета м обуч ения.
92.Н а п ишите кома нд у, уд а ляющ ую из та блицы SUBJECT1 св ед ения о
п р ед мета х обуч ения, п о котор ым студ ента ми не п олуч ено ни од ной
оценки.
93.Н а п ишитез а п р ос, ув елич ив а ющ ий д а нныео в елич инестип енд ии на 20%
в сем студ ента м, у котор ых общ а ясумма ба ллов п р ев ыша ет з на ч ение50.
86
4. С о зда н и е о б ъ ек
то в б а зы да н н ы х
4.1. С оз дание т абл иц баз ы данны х
Соз д а ниеобъектов ба з ы д а нных осущ еств ляется с п омощ ью оп ер а тор ов
яз ыка оп р ед еленияд а нных (DDL).
Та бл ицы ба з ы д а нных соз д а ются с п омощ ью кома нд ы CREATE TABLE.
Э та кома нд а соз д а ет п устую та блицу, то есть та блицу, неимеющ ую стр ок.
Зна ч ения в э ту та блицу в в од ятся с п омощ ью кома нд ы INSERT. К ома нд а
CREATE TABLE оп р ед еляет имя та блицы и множеств о п оименов а нных
столбцов в ука з а нном п ор яд ке. Д ляка жд ого столбца д олжен бытьоп р ед елен
тип и р а з мер . К а жд а я соз д а в а ема я та блица д олжна иметь, п о кр а йней мер е,
од ин столбец. Синта ксис кома нд ы CREATE TABLE имеет след ующ ий в ид .
CREATE TABLE <и м ят а бли цы >
(<и м яст о лбца ><т и п д а нны х>[(<р а зм ер >)],… );
Исп ользуемые в SQL тип ы д а нных, ка к минимум, п од д ер жив а ют
ста нд а р ты ANSI (American National Standards Institute – А м ер и ка нски й
на ци о на льны й и нст и т ут ст а нд а р т о в ) (см. р а з д ел 1.5.Тип ы д а нных SQL):
CHAR(CHARACTER),
INT (INTEGER),
SMALLINT,
DEC (DECIMAL),
NUMERIC,
FLOAT,
… .
Тип д а нных, д ля котор ого обяз ательно д олжен бытьука з а н р а з мер – это
CHAR. Реа льное колич еств о симв олов , котор ое может на ход иться в п оле,
меняется от нуля (если в п оле сод ер жится NULL-з на ч ение) д о з а д а нного в
CREATE TABLE ма ксима льного з на ч ения.
След ующ ий п р имер п ока з ыв а ет кома нд у, котор а я п оз в оляет соз д а ть
та блицу STUDENT.
87
CREATE TABLE STUDENT1
(STUDENT_ID
INTEGER,
SURNAME
VARCHAR(60),
NAME
VARCHAR(60),
STIPEND
DOUBLE,
KURS
INTEGER,
CITY
VARCHAR(60),
BIRTHDAY
DATE,
UNIV_ID
INTEGER);
4.2. И спол ь з ование индексац ии дл я бы ст рого
дост упа к данны м
О п ер а ции п оиска -в ыбор ки (SELECT) д а нных из та блиц п о з на ч ениям их
п олей могут бытьсущ еств енно ускор ены п утем исп ользов а ния инд екса ции
д а нных. Инд екс сод ер жит уп ор яд оч енный (в а лфа в итном или ч ислов ом
п ор яд ке) сп исок сод ер жимого столбцов или гр уп п ы столбцов в
инд ексир уемой та блице с ид ентифика тор а ми э тих стр ок (ROWID). Д ля
п ользов а телей инд ексир ов а ние та блицы п о тем или иным столбца м
п р ед ста в ляет собой сп особ ло ги ческо го уп ор яд оч ив а ния з на ч ений
инд ексир ов а нных столбцов , п оз в оляющ его, в отлич ие от п ослед ов а тельного
п ер ебор а стр ок, сущ еств енно п ов ысить скор ость д оступ а к конкр етным
стр ока м та блицы п р и в ыбор ка х, исп ользующ их з на ч ения э тих столбцов .
Инд екса ция п оз в оляет на ход итьсод ер жа щ ий инд ексир ов а нную стр оку блок
д а нных, в ып олняя небольшое ч исло обр а щ ений к в нешнему устр ойств у
хр а ненияд а нных.
Пр и исп ользов а нии инд екса ции след ует, од на ко, иметь в в ид у, ч то
уп р а в ление инд ексом сущ еств енно з а мед ляет в р емя в ып олнения оп ер а ций,
св яз а нных с обнов лением д а нных (та ких, ка к INSERT и DELETE), та к ка к э ти
оп ер а ции тр ебуют п ер естр ойки инд ексов .
Инд ексы можно соз д а в а тька к п о од ному, та к и п о множеств у п олей.
Е сли ука з а но болееод ного п оляд лясоз д а нияед инств енного инд екса , д а нные
уп ор яд оч ив а ются п о з на ч ениям п ер в ого п оля, п о котор ому осущ еств ляется
инд ексир ов а ние.
Внутр и
п олуч ив шейся
гр уп п ы
осущ еств ляется
уп ор яд оч ив а ние п о з на ч ениям в тор ого п оля, д л я п олуч ив шихся в р ез ульта те
88
гр уп п осущ еств ляетсяуп ор яд оч ив а ниеп о з на ч ениям тр етьего п оляи т.д .
Синта ксис кома нд ы соз д а нияинд екса имеет след ующ ий в ид :
CREATE INDEX <и м яи нд екса > ON <и м ят а бли цы > (<и м яст о лбца >
[,<и м яст о лбца >]… );
Пр и э том та блица д олжна бытьужесоз д а на и сод ер жа тьстолбцы, имена
котор ых ука з а ны в кома нд е соз д а ния инд екса . Имя инд екса , оп р ед еленное в
кома нд е, д олжно быть уника льным в ба з е д а нных. Б уд уч и од на жд ы
соз д а нным, инд екс яв ляется нев ид имым д ля п ол ьзов а теля, в се оп ер а ции с
нимосущ еств ляет СУ Б Д .
П ример.
Е сли та блица EXAM_MARKS ч а сто исп ользуется д ля п оиска оценки
конкр етного студ ента п о з на ч ению п оля STUDENT_ID, то след ует соз д а ть
инд екс п о э тому п олю.
CREATE INDEX STUDENT_ID_1 ON EXAM_MARKS (STUDENT_ID);
Д ля уд а ления инд екса (п р и э том обяз а тельно тр ебуется з на тьего имя)
исп ользуетсякома нд а DROP INDEX, имеющ а яслед ующ ий синта ксис
DROP INDEX <и м яи нд екса >;
У д а ление инд екса не из меняет сод ер жимого п оля или п олей, инд екс
котор ых уд а л яется.
4.3. И з м енение сущ ест вую щ ей т абл иц ы
Д ля мод ифика ции стр уктур ы и п а р а метр ов сущ еств ующ ей та блицы
исп ользуетсякома нд а ALTER TABLE. Синта ксис кома нд ы ALTER TABLE д ля
д оба в лениястолбцов в та блицу имеет в ид
ALTER TABLE <и м ят а бли цы > ADD (<и м яст о лбца > <т и п д а нны х>
<р а зм ер >);
По э той кома нд ед лясущ еств ующ их в та блицестр ок д оба в ляетсянов ый
столбец, в котор ый з а носится NULL-з на ч ение. Э тот столбец ста нов ится
п ослед ним в та блице. М ожно д оба в лятьнесколько столбцов , в э том случ а е
их оп р ед еленияв кома нд еALTER TABLE р а з д еляютсяз а п ятой.
89
Воз можно из менение оп иса ния столбцов . Ч а сто э то св яз а но с
из менением р а з мер ов столбцов , д оба в лением или уд а лением огр а нич ений,
на кла д ыв а емых на их з на ч ения. Синта ксис кома нд ы в э том случ а еимеет в ид
ALTER TABLE <и м ят а бли цы > MODIFY <и м яст о лбца > <т и п д а нны х>
<р а зм ер /т о чно ст ь>;
След ует иметьв в ид у, ч то мод ифика ция ха р а ктер истик столбца может
осущ еств лятьсянев любом случ а е, а с уч етом след ующ их огр а нич ений:
• из менениетип а д а нных в оз можно только, если столбец п уст;
• д ля нез а п ол ненного столбца можно из менять р а з мер /точ ность. Д ля
з а п олненного столбца р а з мер /точ ность можно ув елич ить, но нел ьзя
п ониз ить.
• огр а нич ениеNOT NULL может бытьуста нов лено, если ни од но з на ч ениев
столбценесод ер жит NULL. О п цию NOT NULL в сегд а можно отменить.
• р а з р еша етсяиз менятьз на ч ения, уста нов ленныеп о умолч а нию.
4.4. Удал ение т абл иц ы
Ч тобы уд а литьсущ еств ующ ую та блицу, необход имо п р ед в а р ительно
уд а литьв се д а нные из э той та блицы, то естьсд ела тьее п устой. Та блица ,
имеющ а я стр оки, не может быть уд а лена . Синта ксис кома нд ы,
осущ еств ляющ ей уд а лениеп устой та блицы, имеет след ующ ий в ид .
DROP TABLE <и м ят а бли цы >;
УП Р АЖ НЕ НИ Я
94.Н а п ишитекома нд у CREATE TABLE д лясоз д а нията блицы LECTURER
95.Н а п ишитекома нд у CREATE TABLE д лясоз д а нията блицы SUBJECT
96.Н а п ишитекома нд у CREATE TABLE д лясоз д а нията блицы UNIVERSITY.
97.Н а п ишитекома нд у CREATE TABLE д лясоз д а нията блицы EXAM_MARKS.
98.Н а п ишитекома нд у CREATE TABLE д лясоз д а нията блицы SUBJ_LECT.
90
99.Н а п ишитекома нд у, котор а яп оз в олит быстр о в ыбр а тьд а нныео студ ента х
п о кур са м, на котор ых они уч а тся.
100. Соз д а йте инд екс, котор ый п оз в олит д ля ка жд ого студ ента быстр о
осущ еств итьп оиск оценок, сгр уп п ир ов а нных п о д а та м.
4.5. О граничения на м нож ест водопуст им ы х
з начений данны х
Д о сих п ор р а ссма тр ив а лосьтолько след ующ иеогр а нич ения– з на ч ения,
в в од имые в та блицу, д олжны иметьтип ы д а нных и р а з мер ы, сов местимыес
тип а ми/р а з мер ом д а нных столбцов , в котор ые э ти з на ч ения в в од ятся (ка к
оп р ед елено в кома нд е CREATE TABLE или ALTER TABLE). О п иса ние
та блицы может быть д оп олнено более сложными огр а нич ениями,
на кла д ыв а емыми на з на ч ения, котор ыемогут бытьв ста в лены в столбец или
гр уп п у столбцов . О гр а нич ения (CONSTRAINTS) яв ляются ч а стью
оп р ед еленията бл ицы.
Пр и соз д а нии (из менении) та блицы могут бытьоп р ед елены огр а нич ения
на в в од имыез на ч ения. В э том случ а еSQL буд ет отв ер га тьлюбоеиз них п р и
не соотв етств ии з а д а нным кр итер иям. О гр а нич ения могут быть
ста тич ескими, огр а нич ив а ющ ими з на ч ения или д иа п а з он з на ч ений,
в ста в ляемых в столбец (CHECH, NOT NULL). О ни могут иметьсв яз ьсо в семи
з на ч ениями столбца , огр а нич ив а я нов ые стр оки з на ч ениями, котор ые не
сод ер жа тся в столбца х или их на бор а х (уника льные з на ч ения, п ер в ич ные
ключ и). О гр а нич ения могут та кже оп р ед еляться св яз ью со з на ч ениями,
на ход ящ имися в д р угой та блице, д оп уска я, на п р имер , в ста в ку в столбец
только тех з на ч ений, котор ыев д а нны й м о м ент сод ер жа тся та кже в д р угом
столбце д р угой или э той же та блицы (в нешний ключ ). Э ти огр а нич ения
носят д ина мич еский ха р а ктер .
и
Сущ еств ует д в а основ ных тип а огр а нич ений – огр а нич ения на столбцы
огр а нич ения на та блицу. О гр а нич ения на столбцы (COLUMN
CONSTRAINTS) п р именимы только к отд ельным столбца м, а огр а нич ения на
та блицу (TABLE CONSTRAINTS) п р именимы к гр уп п а м, состоящ им из
од ного или более столбцов . О гр а нич ения на столбец д оба в ляются в конце
оп р ед еления столбца п осле ука з а ния тип а д а нных и п ер ед оконч а нием
91
оп иса ния столбца (з а п ятой). О гр а нич ения на та блицу р а з мещ а ются в конце
оп р ед еления та блицы, п осле оп р ед еления п ослед него столбца . К ома нд а
CREATE TABLE имеет след ующ ий синта ксис, р а сшир енный в ключ ением
огр а нич ений
CREATE TABLE <и м ят а бли цы >
(<и м яст о лбца > <т и п д а нны х> <о гр а ни чени яна ст о лбец>,
<и м яст о лбца > <т и п д а нны х> <о г р а ни чени яна ст о лбец>,…
<о гр а ни чени яна т а бли цу> (<и м яст о лбца >[,<и м яст о лбца >… ])… );
Поля, з а д а нныев кр углых скобка х п ослеоп иса нияогр а нич ений та блицы
– это п оля, на котор ыеэ ти огр а нич ения р а сп р остр а няются. О гр а нич ения на
столбцы п р именяютсяк тем столбца м, з а котор ыми они оп иса ны.
4.5.1. О граничение NOT NULL
Ч тобы з а п р етитьв оз можность исп ользов а ния в п оле NULL-з на ч ений,
можно п р и соз д а нии та блицы кома нд ой CREATE TABLE ука з а ть д ля
соотв етств ующ его столбца ключ ев ое слов о NOT NULL. Э то огр а нич ение
п р именимо только к столбца м та блицы. К а к уже гов ор илосьв ыше, NULL –
э то сп ециа льный ма р кер , обоз на ч а ющ ий тот фа кт, ч то п оле п усто. Н о он
п олез ен не в сегд а . Пер в ич ные ключ и, на п р имер , в п р инцип е не д олжны
сод ер жа ть NULL-з на ч ений (быть п устыми), п оскольку э то на р ушило бы
тр ебов а ние уника льности
п ер в ич ного
ключ а
(более стр ого –
функциона л ьную з а в исимостьа тр ибутов та блицы от п ер в ич ного ключ а ). Во
многих д р угих случ а ях та кже необход имо, ч тобы п оля о бяза т ельно
сод ер жа ли оп р ед еленные з на ч ения. Е сли ключ ев ое слов о NOT NULL
р а з мещ а ется неп оср ед ств енно п осле тип а д а нных (в ключ а я р а з мер ) столбца ,
то любые п оп ытки оста в итьз на ч ение п оля п устым (в в ести в п оле NULLз на ч ение) буд ут отв ер гнуты системой.
Н а п р имер , д лятого, ч тобы в оп р ед елении та блицы STUDENT з а п р етить
исп ользов а ние NULL-з на ч ений д л я столбцов STUDENT_ID, SURNAME и
NAME, можно з а п иса тьслед ующ ее:
CREATE TABLE STUDENT
(STUDENT_ID INTEGER NOT NULL,
92
SURNAME CHAR (25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY DATE,
UNIV_ID INTEGER);
Ва жно п омнить, ч то, если д ля столбца ука з а но NOT NULL, то п р и
исп ользов а нии кома нд ы INSERT обяз а тельно д олжно быть ука з а но
конкр етноез на ч ение, в в од имоев э то п оле. Пр и отсутств ии огр а нич енияNOT
NULL в столбце з на ч ение может отсутств ов а ть, если только не ука з а но
з на ч ение столбца п о умолч а нию (DEFAULT). Если п р и соз д а нии та блицы
огр а нич ение NOT NULL не было ука з а но, то его можно ука з а ть п оз же,
исп ользуя кома нд у ALTER TABLE. О д на ко, д ля того, ч тобы д ля в нов ь
в в од имого с п омощ ью кома нд ы ALTER TABLE столбца можно было з а д а ть
огр а нич ение NOT NULL, та блица , в котор ую д оба в ляется столбец, д олжна
бытьп устой.
4.5.2. Уникал ь ност ь как ограничение на ст ол бец
Иногд а тр ебуется, ч тобы в сез на ч ения, в в ед енныев столбец, отлич а лись
д р уг от д р уга . Н а п р имер , э того тр ебуют п ер в ич ные ключ и. Е сли п р и
соз д а нии та блицы д ля столбца ука з ыв а ется огр а нич ение UNIQUE, то ба з а
д а нных отв ер га ет любую п оп ытку в в ести в э то п оле ка кой-либо стр оки
з на ч ение, уже сод ер жа щ ееся в том же п оле д р угой стр оки. Э то огр а нич ение
п р именимо только к тем п олям, котор ыебыл и объяв лены NOT NULL. М ожно
п р ед ложить след ующ ее оп р ед еление та блицы STUDENT, исп ользующ ее
огр а нич ениеUNIQUE.
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER NOT NULL UNIQUE,
SURNAME
CHAR (25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
93
BIRTHDAY
UNIV_ID
DATE,
INTEGER);
О бъяв ляяп олеSTUDENT_ID уника льным, можно бытьув ер енным, ч то в
та блице не п ояв ится з а п исей д ля д в ух студ ентов с од ина ков ыми
ид ентифика тор а ми. Столбцы, отлич ные от п ер в ич ного ключ а , д ля котор ых
тр ебуется п од д ер жа ть уника льность з на ч ений, на з ыв а ются в оз можными
ключ а ми или уника льными ключ а ми (CANDIDATE KEYS или UNIQUE
KEYS).
4.5.3. Уникал ь ност ь как ограничение т абл иц ы
М ожно сд ела тьуника л ьными гр уп п у п олей, ука з а в UNIQUE в ка ч еств е
огр а нич ений т а бли цы . Пр и объед инении п олей в гр уп п у в а жен п ор яд ок, в
котором они ука з ыв а ются. О гр а нич ение на та блицу UNIQUE яв ляется
п олез ным, если тр ебуется п од д ер жив а ть уника льность гр уп п ы п олей.
Н а п р имер , если в на шей ба з ед а нных нед оп уска ется, ч тобы студ ент сд а в а л в
од ин д еньбольшеод ного э кз а мена , то можно в та блицеобъяв итьуника льной
комбина цию з на ч ений п олей STUDENT_ID и EXAM_DATE. Д ля э того след ует
соз д а тьта блицу EXAM_MARKS та ким сп особом.
CREATE TABLE EXAM_MARKS
(EXAM_ID
INTEGER NOT NULL,
STUDENT_ID
INTEGER NOT NULL,
SUBJ_ID
INTEGER NOT NULL,
MARK
CHAR (1),
EXAM_DATE
DATE NOT NULL,
UNIQUE (STUDENT_ID, EXAM_DATE));
О бр а тите в нима ние, ч то оба п оля в огр а нич ении та блицы UNIQUE в се
ещ еисп ользуют огр а нич ение столбца – NOT NULL. Е сли бы исп ользов а лось
огр а нич ение столбца UNIQUE д л я п оля STUDENT_ID, то та кое огр а нич ение
та блицы было бы необяз а тельным.
Е сли з на ч ения п оля STUDENT_ID д олжно бытьр а з лич ным д ля ка жд ой
стр оки в та блице EXAM_MARKS, э то можно сд ела ть, объяв ив UNIQUE ка к
огр а нич ениеса мого п оляSTUDENT_ID. В э том сл уч а енебуд ет и д в ух стр ок
с ид ентич ной комбина цией з на ч ений п олей STUDENT_ID, EXAM_DATE.
94
След ов а тельно, ука з а ние UNIQUE ка к огр а нич ение та блицы на иболее
п олез но исп ользов а ть в случ а ях, когд а не тр ебуется уника льность
инд ив ид уа льных п олей, ка к э то имеет место на са мом д еле в
р а ссма тр ив а емом п р имер е.
4.5.4. П рисвоение им ен ограничения м
О гр а нич ениям та блиц можно п р исв а ив а ть уника льные имена .
Пр еимущ еств о яв ного з а д а ния имени огр а нич ения состоит в том, ч то в э том
случ а е п р и в ыд а ч е системой сообщ ения о на р ушении уста нов ленного
огр а нич ениябуд ет ука з а но его имя, ч то уп р ощ а ет обна р ужениеошибок.
Д ля п р исв оения имени огр а нич ению исп ользуется
из мененный синта ксис кома нд CREATE TABLE и ALTER TABLE.
несколько
Пр ив ед енный в ышеп р имер з а п р оса из меняетсяслед ующ им обр а з ом:
CREATE TABLE EXAM_MARKS
(EXAM_ID
INTEGER NOT NULL,
STUDENT_ID
INTEGER NOT NULL,
SUBJ_ID
INTEGER NOT NULL,
MARK
CHAR (1),
EXAM_DATE
DATE NOT NULL,
CONSTRAINT STUD_SUBJ_CONSTR
UNIQUE (STUDENT_ID, EXAM_DATE);
В э том з а п р осе STUD_SUBJ_CONSTR –
ука з а нному огр а нич ению та блицы.
э то
имя, п р исв оенное
4.5.5. О граничение первичны х кл ю чей
П ер в и чны е ключи т а бли цы – э то сп ециа льные случ а и комбинир ов а ния
огр а нич ений UNIQUE и NOT NULL. Пер в ич ные ключ и имеют след ующ ие
особенности:
• та блица может сод ер жа тьтолько од ин п ер в ич ный ключ ;
• в нешниеключ и п о умолч а ниюссыла ютсяна п ер в ич ный ключ та блицы;
• п ер в ич ный ключ яв ляется ид ентифика тор ом стр ок та блицы (стр оки,
од на ко, могут ид ентифицир ов а тьсяи д р угими сп особа ми).
95
У луч шенный в а р иа нт соз д а ния та блицы STUDENT1 с объяв ленным
п ер в ич ным ключ омимеет теп ер ьслед ующ ий в ид :
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER);
4.5.6. С ост авны е первичны е кл ю чи
О гр а нич ение PRIMARY KEY может та кже быть п р именено д ля
нескольких п олей, соста в ляющ их уника льную комбина цию з на ч ений –
со ст а в но й п ер в ич ный ключ . Ра ссмотр им та блицу EXAM_MARKS. О ч ев ид но,
ч то ни к п олю ид ентифика тор а студ ента (STUDENT_ID), ни к п ол ю
ид ентифика тор а п р ед мета обуч ения (EXAM_ID) п о отд ельности нельзя
п р ед ъяв итьтр ебов а ние уника льности. О д на ко, д ля того, ч тобы в та блице не
могли п ояв иться р а з ныез а п иси д ляод ина ков ых комбина ций з на ч ений п олей
STUDENT_ID и EXAM_ID (конкр етный студ ент на конкр етном э кз а мене не
может п олуч ить более од ной оценки), имеет смысл объяв ить уника льной
комбина цию э тих п олей. Д л я э того мы можем п р именить огр а нич ение
та блицы PRIMARY KEY, объяв ив п а р у EXAM_ID и STUDENT_ID п ер в ич ным
ключ омта блицы:
CREATE TABLE NEW_EXAM_MARKS
(STUDENT_ID
INTEGER NOT NULL,
SUBJ_ID
INTEGER NOT NULL,
MARK
INTEGER,
DATA
DATE,
CONSTRAINT EX_PR_KEY PRIMARY KEY (EXAM_ID, STUDENT_ID));
96
4.5.7. П роверка з начений пол ей
О гр а нич ение CHECK п оз в оляет оп р ед елятьуслов ие, котор ому д олжно
уд ов летв ор ятьв в од имое в п оле та блицы з на ч ение, п р ежд е ч ем оно буд ет
п р инято. Л юба я п оп ытка обнов итьили з а менитьз на ч ение п оля та кими, д ля
котор ых п р ед ика т, з а д а в а емый огр а нич ением CHECK, имеет з на ч ение ло ж ь,
буд ет отв ер га ться.
Ра ссмотр им та блицу STUDENT. Зна ч ение столбца STIPEND в э той
та блице STUDENT в ыр а жа ется д есятич ным ч ислом. Н а ложим на з на ч ения
э того столбца след ующ ееогр а нич ение– в елич ина р а з мер а стип енд ии д олжна
бытьменьше200.
Соотв етств ующ ий з а п р ос имеет след ующ ий в ид .
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER CHECK (STIPEND < 200),
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER);
4.5.8. П роверка ограничиваю щ их усл овий с
испол ь з ованием сост авны х пол ей
О гр а нич ение CHECK можно исп ользов а ть в ка ч еств е та блич ного
огр а нич ения, то естьп р и необход имости в ключ итьболееод ного п олястр оки
в огр а нич ив а ющ ееуслов ие.
Пр ед п оложим, ч то огр а нич ение на р а з мер стип енд ии (меньше 200)
д олжно р а сп р остр а няться только на студ ентов , жив ущ их в Вор онеже. Э то
можно ука з а тьв з а п р осесо след ующ им та блич ным огр а нич ением CHECK:
97
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR(25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR(15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER UNIQUE,
CHECK(STIPEND < 200 AND CITY = ‘Во р о н еж ’));
или в несколько д р угой з а п иси
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR(25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR(15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER UNIQUE,
CONSTRAINT STUD_CHECK CHECK (STIPEND < 200
AND CITY = ‘Во р о н еж ’));
4.5.9. Уст ановка з начений поум ол чанию
В SQL имеется в оз можностьп р и в ста в кев та блицу стр оки, не ука з ыв а я
з на ч ений некотор ого п оля, оп р ед елятьз на ч ение э того п оля п о умолч а нию.
Н а иболееч а сто исп ользуемым з на ч ением п о умолч а нию яв ляетсяNULL. Э то
з на ч ение п р инима ется п о умолч а нию д ля любого столбца , д ля которого не
было уста нов лено огр а нич ениеNOT NULL.
Зна ч ение п оля п о умолч а нию ука з ыв а ется в кома нд е CREATE TABLE
тем жесп особом, ч то и огр а нич ениестолбца , с п омощ ьюключ ев ого слов а
DEFAULT <зна чени е по ум о лча ни ю>.
Стр ого гов ор я, оп ция DEFAULT не имеет огр а нич ительного св ойств а ,
та к ка к она не огр а нич ив а ет з на ч ения, в в од имые в
п оле, а п р осто
98
конкр етиз ир ует з на ч ениеп оляв случ а е, если оно не бы ло за д а но .
Пр ед п оложим, ч то основ на я ма сса студ ентов , инфор ма ция о котор ых
на ход ится в та блице STUDENT, п р ожив а ет в Вор онеже. Ч тобы п р и з а д а нии
а тр ибутов не в в од ить д ля большинств а студ ентов на з в а ние гор од а
‘Во р о н еж ’, можно уста нов итьего ка к з на ч ение п оля CITY п о умолч а нию,
оп р ед елив та блицу STUDENT след ующ им обр а з ом:
CREATE TABLE STUDENT
( STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25) NOT NULL,
NAME
CHAR (10) NOT NULL,
STIPEND
INTEGER CHECK (STIPEND < 200),
KURS
INTEGER,
CITY
CHAR (15) DEFAULT ‘Во р о н еж ’,
BIRTHDAY
DATE,
UNIV_ID
INTEGER);
Д р уга яцельп р а ктич еского п р имененияз а д а нияз на ч енияп о умолч а нию
– э то исп ользов а ние его ка к а льтер на тив ы д ля NULL. К а к уже отмеч а лось
в ыше, п р исутств ие NULL в ка ч еств е в оз можных з на ч ений п оля сущ еств енно
усложняет интер п р ета цию оп ер а ций ср а в нения, в котор ых уч а ств уют
з на ч енията ких п олей, п оскольку NULL п р ед ста в ляет собой п р из на к того, ч то
фа ктич еское з на ч ение п оля неи зв ест но или нео пр ед еленно . След ов а тельно,
стр ого гов ор я, ср а в нение с ним любого конкр етного з на ч ения в р а мка х
д в уз на ч ной булев ой логики яв ляется не кор р ектным, з а исключ ением
сп ециа льной оп ер а ции ср а в нения IS NULL, котор а я оп р ед еляет, яв ляется ли
сод ер жимое п оля ка ким-либо з на ч ением или оно отсутств ует.
Д ейств ительно, ка ким обр а з ом в р а мка х д в уз на ч ной логики отв етить на
в оп р ос истинно или ложно услов ие: CITY = ‘Во р о н еж ’, если текущ ее
з на ч ениеп оляCITY неиз в естно (сод ер жит NULL).
Во многих случ а ях исп ользов а ние в место NULL з на ч ения,
п од ста в ляемого в п оле п о умолч а нию, может сущ еств енно уп р остить
исп ользов а ниез на ч ений п оляв п р ед ика та х.
Н а п р имер , можно уста нов ить д ля столбца оп цию NOT NULL, а д ля
неоп р ед еленных з на ч ений ч ислов ого тип а уста нов ить з на ч ение п о
99
умолч а нию “р а в но нулю”, или д ляп олей тип а CHAR – п р обел, исп ользов а ние
котор ых в оп ер а циях ср а в нениянев ыз ыв а ет ника ких п р облем.
Пр и исп ользов а нии з на ч ений п о умолч а нию в п р инцип е д оп устимо
п р именятьогр а нич ения UNIQUE или PRIMARY KEY в э том п оле. Пр и э том,
од на ко, след ует иметьв в ид у отсутств иев та ком огр а нич ении п р а ктич еского
смысла , п оскольку только од на стр ока в та блице сможет п р инятьз на ч ение,
сов п а д а ющ ее с э тим з на ч ением п о умолч а нию. Д ля та кого п р именения
з а д а ния п о умолч а нию необход имо (д о в ста в ки д р угой стр оки с уста нов кой
п о умолч а нию) мод ифицир ов а ть п р ед ыд ущ ую стр оку, сод ер жа щ ую та кое
з на ч ение.
УП Р АЖ НЕ НИ Я
1. Соз д а йтета блицу EXAM_MARKS та к, ч тобы нед оп уска лся в в од в та блицу
д в ух з а п исей об оценка х од ного студ ента п о конкр етным э кз а мену и
п р ед мету обуч ения, а та кже, ч тобы не д оп уска лось п р ов ед ение д в ух
э кз а менов п о любым п р ед мета м в од ин д ень.
2. Соз д а йте та блицу п р ед метов обуч ения SUBJECT та к, ч тобы колич еств о
отв од имых на п р ед мет ч а сов п о умолч а нию было р а в но 36, не
д оп уска лисьз а п иси с отсутств ующ им колич еств ом ч а сов , п оле SUBJ_ID
яв лялось п ер в ич ным ключ ом та блицы, и з на ч ения семестр ов (п оле
SEMESTR) лежа ли в д иа п а з онеот 1-го д о 12-ти.
3. Соз д а йте та блицу EXAM_MARKS та ким обр а з ом, ч тобы з на ч ения п оля
EXAM_ID были больше з на ч ений п оля SUBJ_ID, а з на ч ения п оля
SUBJ_ID были больше з на ч ений п оля STUDENT_ID; п устьта кже буд ут
з а п р ещ ены з на ч енияNULL в любом из э тих тр ех п олей.
100
4.6. П оддерж ка ц ел ост ност и данны х
В та блица х р а ссма тр ив а емой ба з ы д а нных з на ч ения некотор ых п олей
св яз а ны д р уг с д р угом. Та к п оле STUDENT_ID в та блице STUDENT и п оле
STUDENT_ID в та блицеEXAM_MARKS св яз а ны тем, ч то оп исыв а ют од ни и те
же объекты, то есть сод ер жа т ид ентифика тор ы студ ентов , инфор ма ция о
котор ых хр а нится в ба з е. Б олее того, з на ч ения ид ентифика тор ов студ ентов ,
котор ые д оп устимы в та блице EXAM_MARKS, д олжны в ыбир а ться только из
сп иска з на ч ений STUDENT_ID, фа ктич ески п р исутств ующ их в та блице
STUDENT, то есть п р ина д лежа щ их р еа льно оп иса нным в ба з е студ ента м.
А на логич но, з на ч ения п оля UNIV_ID та бл ицы STUDENT д олжны
соотв етств ов а ть ид ентифика тор а м унив ер ситетов UNIV_ID, фа ктич ески
п р исутств ующ им в та блице UNIVERSITY, а з на ч ения п оля SUBJ_ID
та блицы EXAM_MARKS д олжны соотв етств ов а тьид ентифика тор а м п р ед метов
обуч ения, фа ктич ески п р исутств ующ им в та бл ицеSYBJECT.
О гр а нич ения, на кла д ыв а емые ука з а нным тип ом св яз и, на з ыв а ются
о гр а ни чени ям и ссы ло чно й цело ст но ст и . О ни соста в ляют в а жную ч а сть
оп иса ния ха р а ктер истик п р ед метной обла сти, обесп еч ения кор р ектности
д а нных, хр а нящ ихся в та блица х. К ома нд ы оп иса ния та блиц DML имеют
ср ед ств а , п оз в оляющ ие оп исыв а ть огр а нич ения ссылоч ной целостности и
обесп еч ив а тьп од д ер жа ниета кой целостности п р и ма нип уляциях з на ч ениями
п олей ба з ы д а нных.
4.6.1. В неш ние и родит ел ь ские кл ю чи
К огд а ка жд ое з на ч ение, п р исутств ующ ее в од ном п оле та блицы,
п р ед ста в лено в д р угом п олед р угой или э той жета блицы, гов ор ят, ч то п ер в ое
п олессыла ется на в тор ое. Э то ука з ыв а ет на п р ямую св яз ьмежд у з на ч ениями
д в ух п олей. Поле, котор ое ссыла ется на д р угое п оле, на з ыв а ется в неш ним
к лю ч ом , а п оле, на котор ое ссыла ется д р угое п оле, на з ыв а ется
р одит ель ск им к лю ч ом . Та к ч то п оле UNIV_ID та блицы STUDENT – это
в нешний ключ (оно ссыла ется на п оле д р угой та блицы), а п оле UNIV_ID
та блицы UNIVERSITY, на ко т о р о е ссыла ется э тот в нешний ключ – э то
р од ительский ключ .
101
Х отя в п р ив ед енном п р имер е имена в нешнего и р од ительского ключ ей
сов п а д а ют, они не о бяза т ельно д олжны бытьод ина ков ыми, хотя ч а сто их
соз на тельно з а д а ют од ина ков ыми, ч тобы соед инениебыло болеена гляд ным.
4.6.2. С ост авны е внеш ние кл ю чи
Н а п р а ктике в нешний ключ не обяз а тельно может состоятьтолько из
од ного п оля. Под обно п ер в ич ному ключ у, в нешний ключ может состоятьиз
любого ч исла п олей. Внешний ключ и р од ительский ключ , на котор ый он
ссыла ется, конеч но же, д олжны бытьоп р ед елены на од ина ков ом множеств е
п олей (п о колич еств у п олей, тип а м п олей и п ор яд ку след ов а ния п олей).
Внешние ключ и, состоящ ие из од ного п оля – п р именяемые в тип ов ых
та блица х на стоящ его из д а ния, на иболееч а сты на п р а ктике. Ч тобы сохр а нить
п р остоту обсужд ения, буд ем гов ор итьо в нешнем ключ е, ка к об од иноч ном
столбце, хотя в се, ч то буд ет из ла га ться о п оле, котор ое яв ляется в нешним
ключ ом, сп р а в ед лив о и д ля соста в ных в нешних кл юч ей, оп р ед еленных на
гр уп п еп олей.
4.6.3. С м ы сл внеш негои родит ел ь скогокл ю чей
К огд а п оле яв ляется в нешним ключ ом, оно оп р ед еленным обр а з ом
св яз а но с та блицей, на котор ую э тот ключ ссыла ется. К а жд ое з на ч ение в
э том п оле (в нешнем ключ е) неп оср ед ств енно п р ив яз а но к конкр етному
з на ч ению в д р угом п оле (р од ительском ключ е). Зна ч ения р од ительского
ключ а д олжны бытьуника льными, та к он од нов р еменно яв ляется ключ ом
отношения. Зна ч ения в нешнего ключ а не о бяза т ельно д олжны быть
уника льными, то есть в отношении может быть любое ч исло стр ок с
од ина ков ыми з на ч ениями а тр ибутов , яв ляющ ихся в нешним ключ ом. Пр и
э том стр оки, сод ер жа щ ие од ина ков ые з на ч ения в нешнего ключ а д олжны
о бяза т ельно ссыла ться на конкр етное, п р исутств ующ ее в д а нный момент в
та блице, з на ч ение р од ительского ключ а . К р оме того, ни в од ной стр оке
та блицы не д олжно бытьз на ч ений в нешнего ключ а , д ля котор ых в текущ ий
момент отсутств уют соотв етств ующ ие з на ч ения р од ительского ключ а .
Д р угими слов а ми не д олжно быть та к на з ыв а емых “в исяч их” ссылок
102
в нешнего ключ а . Е сли ука з а нные тр ебов а ния в ып олняются в конкр етный
момент сущ еств ов а ния ба з ы д а нных, то гов ор ят, ч то д а нные на ход ятся в
со гла со в а нно м состоянии, а са ма ба з а на ход ится в состоянии ссы ло чно й
цело ст но ст и .
4.6.4. О граничение FOREIGN KEY (внеш негокл ю ча)
Д ля р ешения в оп р осов п од д ер жа ния ссылоч ной целостности в SQL
исп ользуется огр а нич ение FOREIGN KEY. Н а з на ч ение FOREIGN KEY – э то
огр а нич ение д оп устимых
з на ч ений
п ол я множеств ом з на ч ений
р од ительского ключ а , ссылка на котор ый ука з ыв а ется п р и оп иса нии д а нного
огр а нич енияFOREIGN KEY.
Пр облемы обесп еч ения ссылоч ной целостности в оз ника ют ка к п р и
в в од е з на ч ений п оля, яв ляющ егося в нешним ключ ом, та к и п р и
мод ифика ции/уд а лении з на ч ений п оля, на котор ое ссыла ется э тот ключ
(р од ительского ключ а ). О д но из д ейств ий огр а нич ения FOREIGN KEY – э то
отклонение (блокир ов ка ) в в од а з на ч ений в нешнего ключ а , отсутств ующ их в
та блице с р од ительским ключ ом. Та кже э то огр а нич ение в оз д ейств ует на
в оз можностьиз менятьили уд а лятьз на ч енияр од ительского ключ а .
О гр а нич ениеFOREIGN KEY исп ользуется в кома нд а х CREATE TABLE и
ALTER TABLE п р и соз д а нии или мод ифика ции та блицы, котор а я сод ер жит
п оле, котор ое тр ебуется объяв итьв нешним ключ ом. В кома нд еука з ыв а ется
имя р од ительского ключ а , на котор ый имеется ссылка в огр а нич ении
FOREIGN KEY.
103
4.6.5. В неш ний кл ю ч как ограничение т абл иц ы
Синта ксис огр а нич енияFOREIGN KEY имеет след ующ ий в ид .
FOREIGN KEY < с п и с о к с т о л бцо в >
REFERENCES
< ро ди т ел ь с к а я т а бл и ца >
[< ро ди т ел ь с к и й к л ю ч >];
В э том п р ед ложении с п и с о к с т о л бцо в – э то сп исок из од ного или более
столбцов та блицы, котор ыебуд ут соз д а ны или из менены кома нд а ми CREATE
TABLE или ALTER TABLE (д олжны бытьотд елены д р уг от д р уга з а п ятыми).
Па р а метр
ро ди т ел ь с к а я т а бл и ца – э то имя та блицы, сод ер жа щ ей
р од ительский ключ . Э то, в ч а стности, может быть и та блицей, котор а я
соз д а ется или из меняется текущ ей кома нд ой. Па р а метр ро ди т ел ь с к и й к л ю ч
п р ед ста в ляет собой сп исок столбцов р од ительской та блицы, котор ые
соста в ляют собств енно р од ительский ключ . О ба сп иска столбцов ,
оп р ед еляющ их в нешний и р од ительский ключ и, д олжны бытьсов местимы, а
именно:
• сод ер жа тьод ина ков оеч исло столбцов .
• п ослед ов а тельность(1-й, 2-й, 3-й и т.д .) столбцов сп иска в нешнего ключ а
д олжны иметь тип ы д а нных и р а з мер ы, сов п а д а ющ ие с
соотв етств ующ ими (1-м, 2-м, 3-м и т.д .) столбца ми сп иска р од ительского
ключ а .
Соз д а д им та блицу STUDENT с п олем UNIV_ID, оп р ед еленным в
ка ч еств ев нешнего кл юч а , ссыла ющ егосяна та блицу UNIVERSITY:
CREATE TABLE STUDENT
( STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25),
NAME
CHAR (10),
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER REFERENCES,
CONSTRAINT UNIV_FOR_KEY FOREIGN KEY (UNIV_ID)
REFERENCES UNIVERSITY (UNIV_ID));
104
Пр и п р именении кома нд ы ALTER TABLE к ка кой-либо та блице д ля
з а д а нияогр а нич енияFOREIGN KEY, з на ч енияв нешнего ключ а э той та блицы
и р од ительского ключ а соотв етств ующ ей та бл ицы д олжны на ход иться в
состоянии ссылоч ной целостности. В п р отив ном случ а е кома нд а буд ет
отклонена .
Синта ксис кома нд ы ALTER TABLE в э томслуч а еимеет след ующ ий в ид :
ALTER TABLE <и м ят а бли цы >
ADD CONSTRAINT < и м я о гра ни чени я >
FOREIGN KEY (< с п и с о к с т о л бцо в внеш него к л ю ча > )
REFERENCES
< и м я ро ди т ел ь с к о й т а бл и цы>
[(< с п и с о к с т о л бцо в ро ди т ел ь с к о го к л ю ча >)];
Н а п р имер , кома нд а
ALTER TABLE STUDENT
ADD CONSTRAINT STUD_UNIV_FOR_KEY
FOREIGN KEY (UNIV_ID)
REFERENCES UNIVERSITY (UNIV_ID);
д оба в ляет огр а нич ениев нешнего кл юч а д лята блицы STUDENT.
4.6.6. В неш ний кл ю ч как ограничение ст ол бц ов
О гр а нич ение в нешнего ключ а может ука з ыв а ться нед ля в сей та блицы,
ка к э то было п ока з а но в ыше, а неп оср ед ств енно на соотв етств ующ ий
столбец та блицы. Пр и та ком в а р иа нте, на з ыв а емом ссы ло чны м о гр а ни чени ем
ст о лбца , ключ ев оеслов о FOREIGN KEY фа ктич ески неисп ользуется. Пр осто
исп ользуется ключ ев ое слов о REFERENCES и д а лее ука з ыв а ется имя
р од ительского ключ а , п од обно след ующ ему п р имер у.
CREATE TABLE STUDENT
( STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25),
NAME
CHAR (10),
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY
DATE,
UNIV_ID INTEGER REFERENCES UNIVERSITY(UNIV_ID));
105
К ома нд а оп р ед еляет п оле STUDENT.UNIV_ID ка к в нешний ключ ,
исп ользующ ий
в
ка ч еств е
р од ительского
ключ а
п оле
UNIVERSITY.UNIV_ID, яв ляющ еесяключ ом та бл ицы UNIVERSITY.
Э та фор ма э кв ив а лентна след ующ ему огр а нич ениюта блицы STUDENT:
FOREIGN KEY (UNIV_ID) REGERENCES UNIVERSITY (UNIV_ID)
или, в д р угой з а п иси,
CONSTRAINT UNIV_FOR_KEY FOREIGN KEY (UNIV_ID)
REFERENCES UNIVERSITY (UNIV_ID).
Е сли в р од ительской та блице у р од ительского ключ а ука з а но
огр а нич ение PRIMARY KEY, то п р и ука з а нии огр а нич ения FOREIGN KEY,
на кла д ыв а емого на та блицу или на столбцы, м о ж но не ука зы в а т ь спи со к
ст о лбцо в р о д и т ельско го ключа . Е стеств енно, в случ а еисп ользов а нияключ ей
со многими п олями, п ор яд ок столбцов в соотв етств ующ их в нешних и
п ер в ич ных ключ а х д олжен сов п а д а ть, и в любом случ а е, п р инцип
сов местимости межд у д в умяключ а ми д олжен бытьсоблюд ен.
Н а п р имер , если огр а нич ениеPRIMARY KEY р а з мещ ено в п олеUNIV_ID
та блицы UNIVERSITY
CREATE TABLE UNIVERSITY
( UNIV_ID
INTEGER PRIMARY KEY,
UNIV_NAME
CHAR(10),
RATING
INTEGER,
CITY
CHAR(15));
то в та блице STUDENT п оле UNIV_ID можно исп ользов а ть в ка ч еств е
в нешнего ключ а , неука з ыв а яв ссылкеимяр од ительского ключ а :
CREATE TABLE STUDENT
(STUDENT_ID
INTEGER PRIMARY KEY,
SURNAME
CHAR (25),
NAME
CHAR (10),
STIPEND
INTEGER,
KURS
INTEGER,
CITY
CHAR (15),
BIRTHDAY
DATE,
UNIV_ID
INTEGER REFERENCES UNIVERSITY);
Та ка я в оз можностьв стр а ив а ла сьв яз ык д л яобесп еч енияисп ользов а ния
106
п ер в ич ных ключ ей в ка ч еств ер од ительских.
4.6.7. П оддерж ание ссы л очной ц ел ост ност и и
ограничения з начений родит ел ь скогокл ю ча
Под д ер жа ние ссылоч ной целостности тр ебует в ып ол нения некотор ых
огр а нич ений на з на ч ения, котор ыемогут бытьз а д а ны в п олях, объяв ленных
ка к в нешний ключ и р од ительский ключ . Н а бор з на ч ений р од ительского
ключ а д олжен быть та ким, ч тобы га р а нтир ов а ть, ч то ка жд ому з на ч ению
в нешнего ключ а в р од ительской та бл ицеобяз а тельно соотв етств ов а ла од на и
только од на стр ока , ука з а нна я соотв етств ующ им р од ительским ключ ом. Э то
оз на ч а ет, ч то р од ительский ключ д олжен бытьуни ка льны м и не сод ер жа ть
п устых з на ч ений (NULL). След ов а тельно, п р и объяв лении в нешнего ключ а
необход имо убед иться, ч то в се п оля, котор ые исп ользуются ка к
р од ительские ключ и, имеют или огр а нич ение PRIMARY KEY или
огр а нич енияUNIQUE и NOT NULL.
4.6.8. И спол ь з ование первичногокл ю ча в качест ве
уникал ь ноговнеш негокл ю ча
Ссылка в нешних ключ ей только на п ер в ич ные ключ и сч ита ется
хор ошим стилем п р огр а ммир ов а ния SQL-з а п р осов . В э том случ а е
исп ользуемые в нешние кл юч и св яз ыв а ются не п р осто с род ительскими
ключ а ми, на котор ые они ссыла ются, а с од ной конкр етной стр окой
р од ительской та бл ицы, в котор ой буд ет на йд ено соотв етств ующ ее з на ч ение
р од ительского ключ а . Са м п о себе р од ительский ключ не обесп еч ив а ет
ника кой инфор ма ции, котор а я бы не была уже п р ед ста в лена в о в нешнем
ключ е. Внешний ключ – э то не п р осто св яз ь межд у д в умя ид ентич ными
з на ч ениями столбцов д в ух та блиц, но э то – св яз ьм еж д у д в ум я ст р о ка м и
д в ух т а бли ц.
Та к ка к на з на ч ение п ер в ич ного ключ а состоит именно в том, ч тобы
од ноз на ч но ид ентифицир ов а тьстр оку, то исп ользов а ние ссылки на него в
ка ч еств е в нешнего ключ а яв ляется более логич ным и более од ноз на ч ным
в ыбор ом д ля в нешнего ключ а . Внешний кл юч , котор ый не имеет ника кой
д р угой цели кр оме св яз ыв а ния стр ок, на п омина ет п ер в ич ный ключ ,
исп ользуемый исключ ительно д ля ид ентифика ции стр ок, и яв ляется
107
хор ошим ср ед ств ом сохр а нения на гляд ности и п р остоты стр уктур ы ба з ы
д а нных.
4.6.9.
О граничения з начений внеш негокл ю ча
Внешний ключ может сод ер жа ть только те з на ч ения, котор ые
фа ктич ески п р ед ста в лены в р од ительском ключ е, или яв ляются п устыми
(NULL). Поп ытка в в ести д р угие з на ч ения в э тот ключ д олжна быть
отклонена , п оэ тому объяв лениев нешнего ключ а , ка к NOT NULL, неяв ляется
обяз а тельным.
4.6.10. Д ей ст вие ограничений внеш негои родит ел ь ского
кл ю чей при испол ь з овании ком анд м одиф икац ии
К а к ужегов ор илось, п р и исп ользов а нии кома нд INSERT и UPDATE д ля
мод ифика ции з на ч ений столбца , объяв ленного ка к в неш ни й ключ, в нов ь
в в од имые з на ч ения д олжны уже быть обяз а тельно п р ед ста в лены в
фа ктич ески
п р исутств ующ их
з на ч ениях
столбца ,
объяв ленного
р од ительским ключ ом. Пр и э том можно п омещ а тьв э ти п оляп устые(NULL)
з на ч ения, несмотр я на то, ч то з на ч ения NULL не д оп устимы в р од ительских
ключ а х. М ожно та кже уд а лять (DELETE) любые стр оки с в нешними
ключ а ми из та блицы, в котор ой э ти ключ и объяв лены.
Пр и необход имости мод ифика ции з на ч ений р о д и т ельско го ключа д ело
обстоит ина ч е. Исп ользов а ниекома нд ы INSERT, котор а яосущ еств л яет в в од
нов ой з а п иси, не в ыз ыв а ет ника ких особенностей, п р и котор ых в оз можно
на р ушение ссылоч ной целостности. О д на ко кома нд а UPDATE, из меняющ а я
з на ч ение р од ительского ключ а и кома нд а DELETE, уд а ляющ а я стр оку,
сод ер жа щ ую та кой ключ , сод ер жа т в оз можностьна р ушениясогла сов а нности
з на ч ений р од ительского и ссыла ющ ихсяна него в нешних ключ ей. Н а п р имер ,
может в оз никнуть та к на з ыв а ема я “в и сяча я” ссылка в нешнего ключ а на
несущ еств ующ ее з на ч ение р од ительского ключ а , ч то сов ер шенно не
д оп устимо. Ч тобы п р и п р именении кома нд UPDATE и DELETE к п олю,
яв ляющ емуся р од ительским ключ ом, не на р уша ла сь целостность ссылки,
в оз можны след ующ иев а р иа нты д ейств ий.
108
• Л юбые из менения з на ч ений р од ительского ключ а за пр ещ а ют ся и п р и
п оп ытке их сов ер шения отв ер га ются (огр а нич ение NO ACTION или
RESTRICT). Э та сп ецифика цияд ейств ияп р именяетсяп о умолч а нию.
• Из менения з на ч ений р од ительского ключ а р а зр еш а ют ся, но п р и э том
а в тома тич ески осущ еств ляетсяко р р екци яв сех з на ч ений в нешних ключ ей,
ссыла ющ ихся на мод ифицир уемое з на ч ение р од ительского ключ а . Э то
на з ыв а етсяка ска д ны м и зм енени ем (огр а нич ение CASCADE).
• Из менения з на ч ений р од ительского ключ а р а зр еш а ют ся, но п р и э том
соотв етств ующ иез на ч енияв нешнего ключ а а в тома тич ески уд а ляют ся, то
естьз а меняютсяз на ч ением NULL (огр а нич ение SET NULL).
• Из менения з на ч ений р од ительского ключ а р а зр еш а ют ся, но п р и э том
соотв етств ующ ие з на ч ения в нешнего ключ а а в тома тич ески за м еняют ся
з на ч ением п о умолч а нию(огр а нич ение SET DEFAULT).
Пр и оп иса нии в нешнего ключ а д олжно ука з ыв а ться, ка кой из
п р ив ед енных в а р иа нтов д ейств ий след ует п р именять, п р ич ем в общ ем случ а е
э то д олжно быть ука з а но р а з д ельно д ля ка жд ой из кома нд UPDATE и
DELETE. В ка ч еств еп р имер а исп ользов а нияогр а нич ений, на кла д ыв а емых на
оп ер а ции мод ифика ции р од ительских ключ ей, можно п р ив ести след ующ ий
з а п р ос:
CREATE TABLE NEW_EXAM_MARKS
( STUDENT_ID
INTEGER NOT NULL,
SUBJ_ID
INTEGER NOT NULL,
MARK
INTEGER,
DATA
DATE,
CONSTRAINT EXAM_PR_KEY PRIMARY KEY (STUDENT_ID, SUBJ_ID),
CONSTRAINT SUBJ_ID_FOR_KEY FOREIGN KEY (SUBJ_ID)
REFERENCES SUBJECT,
CONSTRAINT STUDENT_ID_FOR_KEY FOREIGN KEY (STUDENT_ID)
REFERENCES STUDENT
ON UPDATE CASCADE
ON DELETE NO ACTION);
В э том п р имер е п р и п оп ытке из менения з на ч ения п оля STUDENT_ID
та блицы STUDENT буд ет а в тома тич ески обесп еч ив а ться ка ска д на я
кор р ектир ов ка э тих з на ч ений в та блице EXAM_MARKS. То есть п р и
109
из менении ид ентифика тор а студ ента STUDENT_ID в та блице STUDENT
сохр а нятся в се ссылки на его оценки. О д на ко люба я п оп ытка уд а ления
(DELETE) з а п иси о студ ентеиз та блицы STUDENT буд ет отв ер га ться, есл и в
та блицеEXAM_MARKS сущ еств уют з а п иси об оценка х д а нного студ ента .
УП Р АЖ НЕ НИ Я
101. Соз д а йте та блицу с именем SUBJECT_1, с теми же п олями, ч то в
та блице SUBJECT (п р ед мет обуч ения). Поле SUBJ_ID яв ляется
п ер в ич ным ключ ом.
102. Соз д а йте та блицу с именем SUBJ_LECT_1 (уч ебные д исцип лины
п р еп од а в а телей),
с
п олями
LECTURER_ID
(ид ентифика тор
п р еп од а в а теля) и SUBJ_ID (ид ентифика тор п р еп од а в а емой д исцип лины).
Пер в ич ным ключ ом (соста в ным) та блицы яв ляется п а р а а тр ибутов
LECTURER_ID и SUBJ_ID, кр оме того, п оле LECTURER_ID яв ляется
в нешним ключ ом, ссыла ющ имся на та блицу LECTURER_1, а на логич ную
та блице LECTURER (п р еп од а в а тель), а п оле SUBJ_ID яв ляется в нешним
ключ ом, ссыла ющ имся на та блицу SUBJECT_1, а на логич ную та блице
SUBJECT.
103. Соз д а йтета блицу с именем SUBJ_LECT_1 ка к в п р ед ыд ущ ем з а д а нии,
но д оба в ьте д ля в сех ее в нешних ключ ей р ежим обесп еч ения ссылоч ной
целостности, з а п р ещ а ющ ий обнов ление и уд а ление соотв етств ующ их
р од ительских ключ ей.
104. Соз д а йте та блицу с именем LECTURER_1, с теми же п ол ями, ч то в
та блице LECTURER. Пер в ич ным ключ ом та блицы яв ляется а тр ибут
LECTURER_ID, кр оме того, п оле UNIV_ID яв ляется в нешним ключ ом,
ссыла ющ имся на та блицу UNIVERSITY_1 (а на лог UNIVERSITY). Д ля
э того п оля уста нов ите ка ска д ные р ежимы обесп еч ения целостности д ля
кома нд UPDATE и DELETE.
105. Соз д а йте та блицу с именем UNIVERSITY_1, с теми же п олями, ч то в
та блице UNIVERSITY (унив ер ситеты). Поле UNIV_ID яв ляется
п ер в ич ным ключ ом.
106.
Соз д а йте та блицу с именем EXAM_MARKS_1. О на д олжна сод ер жа ть
та кие же п оля, ч то и та блица EXAM_MARKS (э кз а мена ционные оценки).
110
К омбина ция п олей EXAM_ID, STUDENT_ID и SUBJ_ID яв ляется
п ер в ич ным ключ ом. К р ометого, п ол яSTUDENT_ID и SUBJ_ID яв ляются
в нешним ключ а ми, ссыла ющ имися соотв етств енно на та блицы
STUDENT_1 и SUBJECT_1. Д ля э тих п олей уста нов итер ежим ка ска д ного
обесп еч ения ссылоч ной целостности п р и оп ер а ции обнов ления
соотв етств ующ их п ер в ич ных ключ ей, и р ежим блокир ов ки п р и п оп ытке
уд а ленияр од ительского ключ а п р и на лич ии ссылки на него.
107. Соз д а йтета блицу с именем STUDENT_1. О на д олжна сод ер жа тьта кие
же п оля, ч то и та блица STUDENT и нов ое п оле SENIOR_STUDENT
(ста р оста ), з на ч ением котор ого д олжен быть ид ентифика тор студ ента ,
яв ляющ егося ста р остой гр уп п ы, в котор ой уч ится д а нный студ ент.
У ка житенеобход имыед ляэ того огр а нич енияссылоч ной целостности.
108. Соз д а йте та блицу STUDENT_2 а на логич ную та блице STUDENT, в
которой п оле UNIV_ID (ид ентифика тор унив ер ситета ) яв ляется в нешним
ключ ом, ссыла ющ имся на та блицу UNIVERSITY_1, и та ким обр а з ом,
ч тобы п р и уд а лении из та блицы UNIVERSITY_1 стр оки с инфор ма цией о
ка ком-либо унив ер ситете в соотв етств ующ их з а п исях та блицы
STUDENT_2 п олеUNIV_ID оч ищ а лось(з а мещ а лосьна NULL).
109. С п омощ ью кома нд ы CREATE TABLE соз д а йте з а п р осы д ля
фор мир ов а ния та блиц уч ебной ба з ы д а нных, п р ед ста в ленной в р а з д еле
1.7, с ука з а нием п ер в ич ных ключ ей, но без ука з а ния огр а нич ений
в нешних ключ ей. За тем с п омощ ью кома нд ы ALTER TABLE ука жите д ля
сфор мир ов а нных та блиц в се огр а нич ения, в том ч исле и огр а нич ения
ссылоч ной целостности.
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 <и м я п редст а вл ени я>
121
УП Р АЖ НЕ НИ Я
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, котор а я п р ед оста в лена п ользов а телю в ба з ов ой та блице, буд ет
а в тома тич ески р а сп р остр а няться на п р ед ста в ление. Е сли п р ив илегии на
обнов ление отсутств уют, то их нев оз можно п олуч ить и в соз д а нных
131
п р ед ста в лениях, д а же если са ми э ти п р ед ста в ления обнов ляемые. Та к ка к
в нешние ключ и не п р именяются в п р ед ста в лениях, то и п р ив илегия
REFERENCES никогд а неисп ользуетсяп р и соз д а нии п р ед ста в лений.
6.6.1. О граничение привил егии SELECT дл я
определ енны х ст ол бц ов
Пр ед п оложим,
необход имо
обесп еч ить п ользов а телю
PETROV
в оз можностьд оступ а только к столбца м STUDENT_ID и SURNAME та блицы
STUDENT. Э то можно сд ела ть, п оместив имена э тих столбцов в
п р ед ста в ление
CREATE VIEW STUDENT_VIEW AS
SELECT STUDENT_ID, SURNAME
FROM STUDENT;
и п р ед оста в ить п ользов а телю PETROV п р ив илегию SELECT в соз д а нном
п р ед ста в лении, а нев са мой та блицеSTUDENT:
GRANT SELECT ON STUDENT_VIEW TO PETROV;
Д ля столбцов можно соз д ать р а з лич ные п р ив илегии, од на ко, след ует
иметьв в ид у, ч то д лякома нд ы INSERT э то буд ет оз на ч а тьв ста в ку з на ч ений
п о умолч а нию, а д лякома нд ы DELETE огр а нич ениестолбца небуд ет в ообщ е
иметьз на ч ения.
6.6.2. О граничение привил егий дл я определ енны х ст рок
Пр ед ста в ления п оз в оляют огр а нич ить (фильтр ов а ть) п р ив илегии д ля
оп р ед еленных стр ок та блицы. Д ля э того естеств енно исп ользов а ть в
п р ед ста в лении п р ед ика т, котор ый оп р ед елит, ка кие стр оки в ключ ены в
п р ед ста в ление. Ч тобы п р ед оста в итьп ользов а телю PETROV п р ив илегию в ид а
UPDATE в та блице UNIVERSITY д ля в сех з а п исей о М осков ских
унив ер ситета х, можно соз д а тьслед ующ ееп р ед ста в ление:
CREATE VIEW MOSC_UNIVERSITY AS
SELECT * FROM UNIVERSITY
WHERE CITY = ‘М о ск
ва ’
WITH CHECK OPTION;
132
За тем можно п ер ед а ть п р ив илегию UPDATE
п ользов а телю PETROV:
в
э той
та блице
GRANT UPDATE ON MOSC_UNIVERSITY TO PETROV;
В отлич ие от п р ив илегии UPDATE д л я оп р ед еленных столбцов , котор а я
р а сп р остр а нена на в се стр оки та блицы UNIVERSITY, д а нна я п р ив илегия
относится только к стр ока м, д ля котор ых з на ч ение п оля CITY р а в но
‘М о ск
ва ’. Пр ед ложение WITH CHECK OPTION п р ед охр а няет п ользов а теля
PETROV от з а мены з на ч ения п ол я CITY на любое з на ч ение, кр оме з на ч ения
‘М о ск
ва ’.
6.6.3. П редост авл ение дост упа т ол ь кок из вл еченны м
данны м
Д р уга я в оз можностьсостоит в том, ч тобы уста на в лив а тьп ользов а телям
п р ив илегии на д оступ к уже из в леч енным д а нным, а не к з на ч ениям в
та блице. Д ляэ того уд обно исп ользов а тьа гр егир ующ иефункции. Н а п р имер ,
соз д а д им п р ед ста в ление, котор ое д а ет инфор ма цию о колич еств е оценок,
ср ед неми общ емба лла х д лястуд ентов на ка жд ый д ень:
CREATE VIEW DATETOTALS AS
SELECT EXAM_DATE, COUNT (*) AS KOL, SUM (MARK) AS SUMMA,
AVG (MARK) AS TOT
FROM EXAM_MARKS
GROUP BY EXAM_DATE;
Теп ер ьможно п ер ед а тьп ользов а телю PETROV п р ив илегию SELECT в
соз д а нномп р ед ста в лении DATETOTALS с п омощ ьюз а п р оса :
GRANT SELECT ON DATETOTALS TO PETROV;
133
6.6.4. И спол ь з ование предст авл ений в качест ве
ал ь т ернат ивы ограничения м
Пр ед ста в ленияс WITH CHECK OPTION могут исп ользов а ться в ка ч еств е
а льтер на тив ы огр а нич ениям. Н а п р имер , необход имо уд остов ер иться, ч то в се
з на ч ения п оля CITY в та блице STUDENT р а в ны на з в а ниям конкр етных
гор од ов . Д ля э того можно уста нов итьогр а нич ение CHECK неп оср ед ств енно
на столбец CITY. О д на ко п оз жеего из менениебуд ет з а тр уд нено. В ка ч еств е
а льтер на тив ы можно соз д а ть п р ед ста в ление, исключ а ющ ее неп р а в ильные
з на ч енияCITY:
CREATE VIEW CURCITYES AS
SELECT *
FROM STUDENT
WHERE CITY IN (‘М о ск
ва ’, ‘Во р о н еж ’)
WITH CHECK OPTION;
Теп ер ь, в место того, ч тобы п р ед оста в лять п ользов а телям п р ив илегии
обнов ления в та блице STUDENT, можно п р ед оста в ить соотв етств ующ ие
п р ив илегии в п р ед ста в лении CURCITYES. Пр еимущ еств о та кого п од ход а
состоит в том, ч то п р и необход имости из менения можно уд а лить э то
п р ед ста в ление, соз д а тьнов ое, и п р ед оста в итьв э том нов ом п р ед ста в лении
п р ив илегии п ользов а телям. Та ка я оп ер а ция в ып олняется п р ощ е, ч ем
из менение огр а нич ений в та блице. Н ед оста тком э того метод а яв ляется то,
ч то в ла д елец та блицы STUDENT та кже д олжен исп ользов а ть э то нов ое
п р ед ста в ление, ина ч еего собств енныекома нд ы та кженебуд ут п р иняты.
6.7. Д ругие т ипы привил егий
Д о сих п ор не р а ссмотр ены в оп р осы уста нов ки целого р яд а д р угих
п р ив илегий, а именно:
• К то имеет п р а в о соз д а в а тьта блицы?
• К то имеет п р а в о из менять, уд а л ять, или огр а нич ив а тьта блицы?
• Д олжны ли п р а в а соз д а ния ба з ов ых та блиц отлич а ться от п р а в соз д а ния
п р ед ста в лений?
• Д олжен ли сущ еств ов а ть супер по льзо в а т ель, то есть п ользов а тель,
134
отв еч а ющ ий з а п од д ер жа ние ба з ы д а нных и, след ов а тел ьно, имеющ ий
на ибольшие, или п олные п р ив илегии, котор ые не п р ед оста в ляются
обыч ному п ользов а телю?
Пр ив илегии, котор ые не оп р ед еляются в тер мина х сп ециа льных
объектов д а нных, на з ыв а ются пр и в и лег и ям и си ст ем ы , или пр а в а м и ба зы
д а нны х. Э ти п р ив илегии в ключ а ют в себя п р а в о соз д а в а тьобъекты д а нных,
отлич а ющ иеся от ба з ов ых та блиц (обыч но соз д а в а емых несколькими
п ользов а телями) и п р ед ста в лений (обыч но соз д а в а емых большинств ом
п ользов а телей). Пр ив илегии системы д ля соз д а ния п р ед ста в лений д олжны
д оп олнять, а не з а менятьп р ив илегии объекта , котор ые ста нд а р т тр ебует от
соз д а телей п р ед ста в лений (оп иса ны р а нее). К р оме того, в любой системе
в сегд а имеются некотор ые тип ы суп ер п ользов а телей, то естьп ользов а телей,
котор ыеимеют большинств о или в се п р ив илегии, и котор ыемогут п ер ед а ть
св ой ста тус суп ер п ользов а теля кому-л ибо с п омощ ью п р ив илегии или
гр уп п ы п р ив илегий. Та кого р од а п ользов а телем яв л яется та к на з ыв а емый
а д м и ни ст р а т о р ба зы д а нны х, или DBA (DataBase Administrator).
6.8. Т ипичны е привил егии сист ем ы
Пр и общ ем п од ход еимеетсятр и ба з ов ых п р ив илегии системы:
• CONNECT (Подключить),
• RESOURCE (Ресурс) и
• DBA (Администратор Базы Данных).
Пр ив илегия CONNECT состоит из п р а в а з а р егистр ир ов а ться и п р а в а
соз д а в а тьп р ед ста в ленияи синонимы, если п ер ед а ны п р ив илегии объекта .
Пр ив илегияRESOURCE состоит из п р а в а соз д а в а тьба з ов ыета блицы.
Пр ив илегия DBA – э то п р ив илегия а д министр а тор а ба з ы д а нных, то есть
суп ер п ользов а теля, котор ому п р ед оста в ляются са мые в ысокие п олномоч ия
п р и р а боте с ба з ой д а нных. Э ту п р ив илегию может иметьод ин или более
п ользов а телей с функциями а д министр а тор а ба з ы д а нных. К ома нд а GRANT (в
из мененной фор ме) может п р именяться ка к с п р ив илегиями объекта , та к и с
системными п р ив илегиями.
135
6.9. С оз дание и удал ение пол ь з оват ел ей
В большинств е р еа лиз а ций SQL нов ого п ользов а теля соз д а ет
п ользов а тель с п р ив илегией DBA, то есть а д министр а тор баз ы д а нных,
котор ый а в тома тич ески п р ед оста в ляет нов ому п ользов а телю п р ив илегию
CONNECT. В э том случ а е обыч но д оба в ляется п р ед ложение IDENTIFIED
BY, ука з ыв а ющ ееп а р ольд ляэ того п ользов а теля. Н а п р имер , кома нд а
GRANT CONNECT TO PETROV IDENTIFIED BY ‘PETROVPASSWORD’;
п р ив ед ет к соз д а нию п ользов а теляс именем PETROV, п р ед оста в ит ему п р а в о
р егистр ир ов а ться в
ба з е д а нных,
и
на з на ч а ет
ему
п а р оль
“PETROVPASSWORD”. После э того, та к ка к PETROV уже яв ляется
з а р егистр ир ов а нным п ользов а телем, он (или п ользов а тел ь DBA) может
исп ользов а ть э ту же кома нд у д ля из менения д а нного п а р оля
“PETROVPASSWORD”.
К огд а п ользов а тель A п р ед оста в ляет п р ив илегию CONNECT д р угому
п ользов а телю B, гов ор ят, ч то п ользов а тель A “со зд а ет ” п ользов а теляB. Пр и
э том п ользов а тель A обяз а тельно д олжен иметь п р ив илегию DBA. Е сли
п ользов а тель B буд ет соз д а в а ть ба з ов ые та блицы (а не только
п р ед ста в ления), ему та кже д олжна быть п р ед оста в лена п р ив илегия
RESOURCE. Н о п р и э том в оз ника ет д р уга я п р облема . Пр и п оп ыткеуд а ления
п ользов а телем A п р ив илегии CONNECT п ользов а теля B, котор ый уже имеет
соз д а нные им та блицы, э та кома нд а уд а ления п р ив илегии буд ет отклонена ,
п оскольку ее д ейств ие оста в ит э ти та блицы без в ла д ельца , ч то не
д оп уска ется. Поэ тому, п р ежд е ч ем уд а литьп р ив илегию CONNECT ка комулибо п ользов а телю, сна ч а ла необход имо уд а лить из ба з ы д а нных в се
соз д а нные э тим п ользов а телем та блицы. Пр ив илегию RESOURCE уд а лять
отд ельно не тр ебуется, д оста точ но уд а лить CONNECT, ч тобы уд а лить
п ользов а теля.
УП Р АЖ НЕ НИ Я
116. Пер ед а йте п ользов а телю PETROV п р а в о на из менение в ба з е д а нных
з на ч ений оценок д ляз а п исей о студ ента х.
117. Пер ед а йте п ользов а телю
SIDOROV
прав о
п ер ед а в а ть д р угим
136
п ользов а телям п р а в а на осущ еств лениез а п р осов к та блицеEXAM_MARKS.
118. О тмените п р ив илегию INSERT п о отношению к та блице STUDENT у
п ользов а теля IVANOV и у в сех д р угих п ользов а телей, котор ым
п р ив илегия, в св ою оч ер ед ь, была п р ед оста в лена э тим п ользов а телем
IVANOV.
119. Пер ед а йте п ользов а телю SIDOROV п р а в о в ып олнятьоп ер а ции в ста в ки
или обнов ления д ля та блицы UNIVERSITY, но только д ля з а п исей об
унив ер ситета х, з на ч ения р ейтингов котор ых лежа т в д иа п а з онеот 300 д о
400.
120. Ра з р ешите п ользов а телю PETROV д ела ть з а п р осы к та блице
EXAM_MARKS, но з а п р етитеему из менятьв э той та блицез на ч енияоценок
студ ента м, имеющ им неуд ов летв ор ительные(=2) оценки.
6.10. С оз дание синоним ов (SYNONYM)
К а жд ый р а з п р и ссылке к ба з ов ой та блице или п р ед ста в лению, не
яв ляющ имися собств енностью п ользов а теля, тр ебуется уста нов ить в
ка ч еств е п р ефикса к имени э той та блицы имя ее в ла д ельца , п оскольку
система не сможет оп р ед елитьместона хожд ение та блицы, та к ка к у р а з ных
п ользов а телей могут ока з а ться та блицы с од ина ков ыми имена ми.
Исп ользов а ние д линных имен с п р ефикса ми может ока з а ться неуд обным.
Поэ тому большинств о р еа лиз а ций SQL п оз в оляют соз д а в а ть д ля та блиц
синонимы (ч то неяв ляетсяста нд а р том ANSI). Си но ни м – э то а льтер на тив ное
имя та блицы. Пр и соз д а нии синонимов п ользов а тель ста нов ится его
собств енником, п оэ тому необход имость исп ользов а ния п р ефикса к имени
та блицы д ля него отп а д а ет. Пользов а тельимеет п р а в о соз д а в а тьсиноним д ля
та блицы, если он имеет, п о кр а йней мер е, од ну п р ив илегию в од ном или
болеестолбца х э той та блицы.
С п омощ ью кома нд ы CREATE SYNONYM п ользов а тельIVANOV может
д ля та блицы с именем PETROV.STUDENT соз д а ть синоним с именем
CLIENTS след ующ им обр а з ом.
CREATE SYNONYM CLIENTS FOR PETROV.STUDENT;
137
Теп ер ь п ользов а тель IVANOV может исп ользов а ть та блицу с именем
CLIENTS в кома нд еточ но та к же, ка к имяPETROV.STUDENT.
К а к уже гов ор илось, п р ефикс п ол ьзов а теля – э то фа ктич ески ч а сть
имени любой та блицы. Всякий р а з , когд а п ользов а тель не ука з ыв а ет
собств енное имя в месте с именем св оей та блицы, SQL п о умолч а нию
п од ста в ляет ид ентифика тор п ользов а теля в ка ч еств е п р ефикса имени
та блицы. След ов а тельно, д в а од ина ков ых имени та бл ицы, но св яз а нные с
р а з лич ными в ла д ельца ми, ста нов ятся неид ентич ными и, след ов а тельно, не
п р ив од ят к ка кой-либо п ута нице в з а п р оса х. Та ким обр а з ом, д в а
п ользов а теля могут соз д а в а ть д в е п олностью нез а в исимые та блицы с
од ина ков ыми имена ми, но э то та кжеоз на ч а ет, ч то од ин п ользов а тельможет
соз д а тьп р ед ста в ление, основ а нноена имени, стоящ ем п ослеимени та блицы,
и исп ользуемым д р угим п ользов а телем. Э то иногд а д ела етсяв случ а ях, когд а
п р ед ста в лениеисп ользуется ка к з а мена са мой исход ной та блицы, на п р имер ,
если п р ед ста в ление п р осто исп ользует CHECK OPTION ка к з а менитель
огр а нич енияCHECK в ба з ов ой та блице. М ожно та кжесоз д а в а ть собств енные
синонимы п ол ьзов а теля, имена котор ых буд ут та кими же, ка к и
п ер в она ч а льные имена та блиц. Н а п р имер , п ользов а тель PETROV может
оп р ед елитьимя STUDENT ка к св ой синоним д лята блицы IVANOV.STUDENT
с п омощ ьюз а п р оса :
CREATE SYNONYM STUDENT FOR IVANOV.STUDENT;
С точ ки з р ения SQL, теп ер ьимеютсяд в а р а з ных имени од ной та блицы:
IVANOV.STUDENT и PETROV.STUDENT. О д на ко ка жд ый из э тих
п ользов а телей может обр а щ а ться к д а нной та блице, исп ользуя имя
STUDENT. SQL, ка к гов ор илось в ыше, са м д оба в ит к э тому имени
нед оста ющ иеимена п ользов а телей в ка ч еств еп р ефиксов .
138
6.11. С иноним ы общ егопол ь з ования
(PUBLIC)
Е сли п ла нир уется исп ользов а ть та блицу STUDENT большим ч ислом
п ользов а телей, уд обнее, ч тобы в сеп ользов а тели ссыла лиськ ней с п омощ ью
од ного и того же имени. Э то д а ст в оз можность, на п р имер , исп ользов а ть
ука з а нное имя без огр а нич ений в п р икла д ных п р огр а мма х. Ч тобы соз д а ть
ед иноеимяд ля в сех п ользов а телей, соз д а етсяобщ ий синоним.
Н а п р имер , если в се п ользов а тели буд ут в ыз ыв а тьта бл ицу STUDENT с
д а нными о студ ента х, можно п р исв оить ей о бщи й синоним STUDENT
след ующ им обр а з ом:
CREATE PUBLIC SYNONYM STUDENT FOR STUDENT;
О бщ ие синонимы в основ ном соз д а ются в ла д ельца ми объектов или
п ользов а телями с п р ив илегиями а д министр а тор а ба з ы д а нных (п ользов а тель
DBA). Д р угим п ользов а телям п р и э том д олжны быть п р ед оста в лены
соотв етств ующ ие п р ив илегии в та блице STUDENT, ч тобы она была им
д оступ на . Д а жеесли имяяв ляетсяобщ им, са ма та блица общ ей неяв ляется.
6.12. Удал ение синоним ов
О бщ ие и д р угие синонимы могут уд а ляться кома нд ой DROP SYNONYM.
Синонимы могут уд а лятьсятолько их в ла д ельца ми, кр омеобщ их синонимов ,
котор ые могут уд а ляться соотв етств ующ ими п р ив илегир ов а нными
п ользов а телями (обыч но э то п ользов а тели DBA). Ч тобы уд а лить, на п р имер ,
синоним CLIENTS, когд а в место него уже п ояв ился общ ий синоним
STUDENT, п ользов а тельможет в в ести кома нд у
DROP SYNONYM CLIENTS;
139
7. Упр а влен и етр а н за к
ци ями
В п р оцессе в ып олнения п ослед ов а тельности кома нд SQL та блицы ба з ы
д а нных не в сегд а могут на ход иться в согла сов а нном состоянии. В случ а е
в оз никнов ения
ка ких-либо
сбоев ,
когд а
логич ески
св яз а нна я
п ослед ов а тельность з а п р осов не д ов ед ена д о конца , в оз можно на р ушение
целостности д а нных в ба з е. Д ля обесп еч ения целостности д а нных логич ески
св яз а нные п ослед ов а тельности з а п р осов , нед елимые с точ ки з р ения
в оз д ейств ия на ба з у д а нных, объед иняют в та к на з ыв а емые т р а нза кци и .
За п р осы, соста в ляющ ие тр а нз а кцию, д олжны или в ып олняться в се
п олностью – с п ер в ого д о п ослед него, и тогд а тр а нз а кция з а в ер ша ется
кома нд ой COMMIT, или, если в силу ка ких-либо в нешних п р ич ин э то
ока з ыв а ется нев оз можным, в несенные з а п р оса ми тр а нз а кции из менения в
ба з е д а нных д олжны а ннулир ов а ться кома нд ой ROLLBACK. Во в тор ом
случ а е ба з а д а нных в оз в р а щ а ется в целостное состояние на момент,
п р ед шеств ующ ий на ч а лу тр а нз а кции. Э то на з ыв а ют о т ка т о м тр а нз а кции.
Н ов а я тр а нз а кция на ч ина ется п осле ка жд ой кома нд ы COMMIT или
ROLLBACK.
В большинств е р еа лиз а ций можно уста нов ить п а р а метр , на з ыв а емый
AUTOCOMMIT. О н буд ет а в тома тич ески з а п омина ть в се в ып олняемые
д ейств ия на д д а нными. Д ейств ия, котор ые п р ив ед ут к ошибке п р и
нез а в ер шенной тр а нз а кции, в сегд а буд ут а в тома тич ески “отка та ны” обр а тно.
Имеется в оз можностьуста нов ки р ежима AUTOCOMMIT а в тома тич ески
п р и р егистр а ции. Е сли сеа нс п ользов а теля з а в ер ша ется а в а р ийно, на п р имер ,
п р оиз ошел сбой системы или в ып олнена п ер ез а гр уз ка п ользов а теля, то
текущ а я тр а нз а кция в ып олнит а в тома тич еский отка т из менений. Э то – од на
из в оз можностей уп р а в ления в ып олнением д иа логов ой обр а ботки з а п р осов
п утем р а з д еления кома нд на большое колич еств о р а з лич ных тр а нз а кций.
О д иноч на я тр а нз а кция не д олжна сод ер жа ть слишком много несв яз а нных
кома нд , на п р а ктике она ч а сто состоит из ед инств енной кома нд ы. Х ор ошее
п р а в ило, котор ому можно след ов а ть– это соз д а в а тьтр а нз а кции из од ной
кома нд ы или нескольких близ ко св яз а нных кома нд .
Н а п р имер , тр ебуетсяуд а литьсв ед енияо студ ентеп о фа милии ‘Ива н о в’
из ба з ы д а нных. Пр ежд е, ч ем св ед ения из та блицы STUDENT буд ут уд а лены,
140
тр ебуетсяосущ еств итьоп р ед еленныед ейств ияс д а нными об э том студ ентев
д р угих та блица х, в ч а стности с д а нными о его оценка х. Н еобход имо
уста нов итьсоотв етств ующ ее э тому студ енту п оле STUDENT_ID в та блице
EXAM_MARKS в NULL. После э того можно уд а литьз а п исьоб э том студ енте
из та блицы STUDENT. Э ти д ейств ияв ып олняютсяс п омощ ью д в ух з а п р осов
UPDATE EXAM_MARKS
SET STUDENT_ID = NULL
WHERE STUDENT_ID = 1004;
DELETE FROM STUDENT
WHERE STUDENT_ID = 1004;
Е сли в оз ника ет п р облема с уд а лением з а п иси о студ енте с фа милией
‘Ива н о в’ (в оз можно, имеется д р угой в нешний кл юч , ссыла ющ ийся на него,
о котор ом не было из в естно, и, соотв етств енно, не уч тено п р и уд а лении),
можно было бы отменитьв сесд ела нныеиз менения, п о кр а йней мер е, д о тех
п ор , п ока п р облема небуд ет р ешена . Д ляэ того п р ив ед енную гр уп п у кома нд
след ует обр а ба тыв а ть ка к од иноч ную тр а нз а кцию, п р ед усма тр ив а я ее
з а в ер шениес п омощ ью кома нд ы COMMIT или ROLLBACK – в з а в исимости от
р ез ульта та .
УП Р АЖ НЕ НИ Я
121. Вы п ер ед а ли п р а в о SELECT в та блице EXAM_MARKS п ользов а тел ю
IVANOV. Вв ед итекома нд у та к, ч тобы в ы могли ссыла ться к э той та блице,
ка к к EXAM_MARKS, неисп ользуяимяIVANOV в ка ч еств еп р ефикса .
122. Е сли п р оиз ойд ет сбой п ита ния, ч то случ ится со в семи из менениями,
сд ела нными в о в р емятекущ ей тр а нз а кции?
141
Пр едметн ы й ук
а за тель
DBA, 126
DDL, 4, 77
DML, 5
escape-симв ол, 20, 21
SQL
в строенный, 4
интера ктив ный, 4
а д министр а тор ба з ы д а нных, 126
ба з а д а нных уч ебна я, 10
та бл ица EXAM_MARKS, 12
та бл ица LECTURER, 10
та бл ица STUDENT, 10
та бл ица SUBJ_LECT, 12
та бл ица SUBJECT, 11
та бл ица UNIVERSITY, 11
в ста в ка
стол бца , 79
строк, 68, 72
д ека р тов о п р оиз в ед ение, 58
из менени ета блицы, 79, 83
инд екса ция, 78
соз д аниеинд екса , 79
уд а лениеинд екса , 79
исп ользов а ниесимв ола *, 14
ключ
в нешний (FOREIGN KEY), 3, 60, 84, 91, 92,
93, 94, 95, 98, 100, 101
в оз можный, 84
п ерв ич ный (PRIMERY KEY), 2, 83, 85, 86,
90, 96, 97
р од ител ь
ский, 91, 92, 93, 94, 97, 98
уника льный, 84
ключ ев ыеслов а, 9
кома нд ы, 9
ALTER TABLE, 79, 80, 83, 93, 94, 95
ADD, 79
MODIFY, 80
д оба в лениестолбца , 79
из менениеоп иса ниястолбцов , 80
синта ксис, 79, 85, 95
COMMIT, 131
CREATE INDEX, 79
CREATE TABLE, 68, 77, 82, 88, 93
синта ксис, 85
CREATE USER, 118, 127
CREATE VIEW, 102
DELETE, 68, 69, 73, 75, 98, 105, 123
огра нич ениеуд а лениярод итель
ского
ключ а
CASCADE, 99
NO ACTION, 99
RESTRICT, 99
SET DEFAULT, 99
SET NULL, 99
DROP INDEX, 79
DROP TABLE, 80
DROP USER, 118
DROP VIEW, 112
GRANT, 118, 120, 122, 126
INSERT, 68, 69, 72, 77, 83, 98, 106, 123
VALUES, 68, 72
в ста в итьNULL-з нач ение, 68
REVOKE, 118, 122
ROLLBACK, 131
SELECT, 13, 78, 112
а ргументы
ALL, 34
DISTINCT, 3, 15, 34
исп ользов аниесимв ола *, 14
оп ератор
JOIN, 59, 60
оп ератор объед иненията блиц
UNION, 13
в нешнееобъед инение, 57
п ред ложения
FROM, 13
FROM:, 13
GROUP BY, 34
GROUP BY, 13
HAVING, 13, 35, 42, 44
ORDER BY, 13, 39, 40, 56
ASC, 39
DESC, 39
WHERE, 13, 16, 19, 70, 72
синтаксис, 13
UPDATE, 68, 70, 75, 98, 104
огр анич ениемод ификации
р од ител ь
ского ключ а
CASCADE, 99
NO ACTION, 99
RESTRICT, 99
SET NULL, 99
п ред ложение
SET, 70, 71, 116
синтаксис, 70
манип улиров аниед а нными, 68
оп ера тор соед иненията блиц
JOIN, 58, 61, 62, 63
CROSS, 58
FULL OUTER JOIN, 63
INNER, 59, 61
LEFT OUTER JOIN, 62
RIGHT OUTER JOIN, 62
UNION JOIN, 63
логика тр ехз на ч на я, 8, 37
ма нип улир ов а ниед а нными, 68
142
мод ельд а нных, 1
обнов ление, 70
обоз на ч енияп р и оп иса нии си нта ксиса
кома нд , 9
огр а нич ения, 81, 85
ALTER TABLE, 93
CHECK, 87, 125, 129
CONSTRAINT, 81, 85
CREATE TABLE, 93
DEFAULT, 83, 88, 89
DELETE, 98
FOREIGN KEY, 93, 94, 95, 98
INSERT, 98
NOT NULL, 81, 82
PRIMARY KEY, 86, 90, 96, 97
UNIQUE, 83, 84, 85, 90
UPDATE, 98
WITH CHECK OPTION, 116, 124, 125, 129
а ль
тернатив ы д ляNULL, 89
в кома нд а х
ALTER TABLE, 83, 85
CREATE TABLE, 77, 82, 85
INSERT, 83
в в од з на ч ений п оля, 93
з на ч енияп о умолч а нию, 88
ключ
в нешний (FOREIGN KEY), 93, 94, 95, 98
п ерв ич ный (PRIMERY KEY), 81, 83, 85,
86, 90, 96, 97
род ительский, 91, 92, 93, 94, 97, 98, 99
мод ифика ция, 98
соста в ной, 86, 92
мод ифика цияз нач ений п оля, 93
п рисв оениеимен, 85
п ров ерка з на ч ений п олей, 87
ссыл оч на яцелостность, 91, 94, 97, 98
стол бца , 81, 95
та бл ицы, 81, 82, 84, 86, 94, 95
уд а лениез на ч ений п оля, 93
уд а ленияи мод ифика ции род ительского
кл юч а ON DELETE и ON UPDATE
CASCADE, 99
NO ACTION:, 99
RESTRICT, 99
SET DEFAULT, 99
SET NULL, 99
уника льность, 83, 84, 85, 90
оп ер а тор ы
– (в ыч ита ние), 23
* (умножение), 23
/ (д еление), 23
|| (конка тена циястрок), 23
+ (сложение), 23
ALL, 50
ANY, 50
BETWEEN, 19, 20, 21, 117
COUNT, 52
EXISTS, 46, 50, 52
IN, 19, 42, 43, 48, 49, 73, 74, 75, 76, 115, 125
IS NOT NULL, 8
IS NULL, 8
LIKE, 19, 20, 21
NOT IN, 19, 48
UNION, 54, 56
конка тенациястр ок, 8
сра в нение, 2, 16, 89
отмена п р ив илегий, 122
отношение, 1
атрибут, 1
д омен, 2
з а голов ок, 1
ка рд ина льноеч исл о, 2
ключ
в нешний (FOREIGN KEY), 3
п ер в ич ный (PRIMERY KEY), 2
кортеж, 1
св ойств а , 2
степ ень, 2
п а р оль, 118, 127
IDENTIFIED BY, 118, 127
п од з а п р осы, 73
в команд а х
DELETE, 73
UPDATE, 75
в п ред ложениях
FROM, 74
HAVING, 42
в п ред ста в лениях, 111
в л оженные, 41
св яз а нные, 43, 46
в п ред ложении HAVING, 44
п ользов а тели, 118
соз д а ние, 118, 127
уд а ление, 118
п р а в а д оступ а , см. п р ив илегии , 118
п р ед ста в ление(VIEW) , 102, 104
а грегиров анное, 109
в ста в ка строки, 108
д ругих п ред ста в лений, 116
з а щ ита д анных, 114
исп ользов ание
UNION и UNION ALL, 112
исп ользов аниекома нд ы
DELETE, 105
GROUP BY, 109
INSERT, 68, 108, 123
маскирующ ее, 105
столбцы, 105, 108
мод ифициров ание, 105
строки, 106
143
мод ифициров ание, 106, 108
многих та блиц, 110
мод ифициров а ние, 70, 75, 104
исп оль
з ов а ние
DISTINCT, 113
GROUP BY, 113
HAVING, 113
п од з а п росы, 113
мод ифициров а ниез на ч ений, 113
необнов л яемое, 113, 114
обнов ляемое, 113, 122
огра нич ениеисп ользов анияSELECT, 112
п од з ап р осы, 111
соз д ание, 102
стол бцов , 104
та бл иц, 103
уд а ление, 112
п р ефикс, 129
п р ив илегии, 118, 120, 125
а ргументы
ALL, 121
ALL PRIVILEGES, 121
PUBLIC, 121
баз ы д анных, 126
в баз ов ых таблица х, 121
в п ред ста в лениях, 121
в ид ы, 119
ALTER, 119
DELETE, 119, 122
EXECUTE, 119
INDEX, 119
INSERT, 119, 122
REFERENCES, 119, 121, 123
SELECT, 119, 120, 123, 124
SYNONYM, 119
UPDATE, 119, 122, 123
в ид ы п рив илегий, 118
исп оль
з ов а ниеп ред ста в лений, 122
огра нич ениед лястрок, 123
отмена , 118
р егистрации, 126
системы, 126
CONNECT, 126, 127
DBA, 126, 127
RESOURCE, 126, 127
А д министра тор Б аз ы Д а нных, 126
ПО Д К Л Ю Ч ИТЬ, 126
РЕ СУ РС, 126
соз д ав ать
ба з ов ыета блицы, 126
п ред ста в ления, 126
синонимы, 126
уста нов ка , 118, 120, 126
филь
тра ция, 122
п сев д онимы, 64
р еляционна ямод ельд а нных, 1
сбои, 130
симв ольныеконста нты, 22
синонимы, 128
CREATE SYNONYM, 128
DROP SYNONYM, 130
общ его п ользов ания(PUBLIC), 130
соз д а ние, 128
уд а ление, 130
соед инение, 60
в нешнее, 61, 62
лев ое, 62
п олное, 63
п ра в ое, 62
синтаксис ORACLE, 62
в нутреннее(INNER), 59, 61
исп ользов аниеп сев д онимов , 64
п олное(CROSS), 58
экв исоед инение, 59
соз д а ние
инд ексов , 79
объектов баз ы д а нных, 77
п ол ь
з ов а телей, 118
п ред ста в лений, 102
синонимов , 128, 129
та блиц баз ы д а нных, 77
ср а в нение, 2, 16, 89
ссылоч на яцелостность, 3, 60, 91, 92, 93,
94, 95, 97, 98, 99, 100, 101
ста нд а р ты ANSI, 77
столбец
д оба в ление, 79
из менениеоп иса ния, 80
стр ока
в ста в ка , 68
ид ентифика торы строк ROWID, 78
уд а ление, 69, 75, 123
суп ер п ользов а тель, 126
та блица , 1
ба з ов а я, 102
в иртуа льная, 104, 110
из менение, 79, 83
именов анна я, 102
род ительска я, 94
уд а ление, 80
тип ы д а нн ых, 5, 20, 21, 77
д а та и в ремя, 7
п роп ущ енныед а нные(NULL), 8, 36, 50, 68,
71, 81, 82, 85, 89
строка симв олов
CHAR, 5, 77
CHARVARYING, 6
CHARACTER, 5, 77
CHARACTER VARYING, 6
144
VARCHAR, 6
ч исл ов ыетип ы, 6
DECIMAL, 6, 77
DOUBLE PRECISION, 7
FLOAT, 7, 77
INTEGER, 6, 77
NUMBER, 7
NUMERIC, 7, 77
REAL, 7
SMALLINT, 77
SMOLLINT, 6
тр а нз а кция, 130
AUTOCOMMIT, 131
з а в ершение, 131
COMMIT, 131
ROLLBACK, 131
норма ль
ное, 131
отка т, 131
уд а ление
инд ексов , 79
п ользов ателей, 118
п ред ста в лений, 112
синонимов , 130
строк, 69, 75, 123
та бл иц ба з ы д а нных, 69, 80
функции
а грегирующ ие, 33
AVG, 33, 37
COUNT, 33, 36
COUNT(*), 34
MAX, 33
MIN, 33
SUM, 33
в строенные, 22
ABS, 27
CAST, 31
CEIL, 27
COS, 28
COSH, 28
EXP, 28
FLOOR, 27
INITCAP, 24
INSTR, 26
LENGTH, 26
LOWER, 24
LPAD, 24
LTRIM, 25
POWER, 28
ROUND, 27
RPAD, 25
RTRIM, 25
SIGN, 28
SIN, 28
SINH, 28
SQRT, 28
SUBSTR, 25
TAN, 28
TANH, 28
TO_CHAR, 29
TO_DATE, 30
TO_NUMBER, 30
TRUNC, 27
UPPER, 24
п реобр аз ов аниебукв , 24
работы с ч исла ми, 27
симв ольныестроков ые, 24
целостностьд а нных, 131
э кв исоед инение, 59
яз ык
обработки д анных (DML), 5
оп ред еленияд а нных (DDL), 4, 77
145
П рил ож ение 1. З адачи попроект ированию БД
В п р иложении 2 п р ив од ятся тексты з а д а ч п о п р оектир ов а нию ба з
д а нных, относящ ихся к р а з лич ным п р ед метным обла стям. Тр ебуется в
соотв етств ии с услов иями з а д а ч :
– сфор мир ов а тьстр уктур у та бл иц ба з д а нных,
– п од обр а тьп од ход ящ иеимена та блица м и их п олям,
– обесп еч ить тр ебов а ния нор ма лиз а ции та блиц ба з д а нных (то есть
п р ив ед ениек п ятой нор ма льной фор ме),
– сфор мир ов а ть SQL з а п р осы д ля соз д а ния та блиц ба з д а нных с
ука з а нием п ер в ич ных и в нешних ключ ей и необход имых
огр а нич ений, SQL з а п р осы д ля д оба в ления, из менения и в ыбор ки
необход имых д а нных.
Пр и р ешении з а д а ч
п р ед п ола га ется исп ользов а ние ср ед ств ,
п оз в оляющ их р а з р а ба тыв а тьсхемы ба з д а нных, и п р иложений, р а бота ющ их
с ба з а ми д а нных (Power Designer, Oracle Developer, ERWin, Power Builder,
Borland Delphi, C++ Builder, и д р .)
За да ча 1. Л ет о пи сь о ст р о ва Са нт а Бели нд а
Г д е-то в в еликом океа не лежит в ообр а жа емый остр ов Са нта
Б елинд а . Вот ужетр иста лет в ед ется п од р обна я летоп исьостр ов а .
В летоп ись з а носятся и д а нные обо в сех люд ях, хоть ка кое-то
в р емяп р ожив а в ших на остр ов е. За п исыв а ютсяих имена , п ол, д а ты
р ожд ения и смер ти. Х р а нятся та м и имена их р од ителей, если
из в естно, кто они. У некотор ых отсутств уют св ед ения об отце, у
некотор ых – о ма тер и, а ч а стьлюд ей, суд я п о з а п исям, – кр углые
сир оты. Из летоп иси можно уз на ть, когд а был п остр оен ка жд ый
д ом, стоящ ий на остр ов е (а если сейч а с его уже нет, то когд а он
был снесен), точ ный а д р ес и п од р обный п ла н э того д ома , кто и
когд а в нем жил.
Точ но та к же, ка к и столетия на з а д , на остров е д ейств уют
п р ед п р инима тели, з а нима ющ иеся, в ч а стности, лов лей р ыбы,
з а готов кой са ха р ного тр остника и та ба ка . Б ольшинств о из них в се
д ела ют са ми, а некотор ыена нима ют р а ботников , з а ключ а яс ними
146
контр а кты р а з ной п р од олжительности. Имеются з а п иси и о том,
кто кого на нима л, на ка кую р а боту, когд а на ч а лся и з а конч ился
контр а кт. Собств енно, кр уг з а нятий жителей остр ов а кр а йне
нев елик и не меняется в ека ми. Н еуд ив ительно п оэ тому, ч то в
летоп иси п од р обно оп исыв а ется ка жд ое д ело, буд ь то р ыбна я
лов ля ил и в ып еч ка хлеба . Все п р ед п р инима тели – ур оженцы
остров а . Н екотор ые объед иняются в кооп ер а тив ы, и п о з а п исям
можно уста нов ить, кто уч а ств ов а л в д еле, когд а в ступ ил и когд а
в ышел из него, ка ким п а ем в ла д ел. Имеются кр а ткие оп иса ния
д еятельности ка жд ого п р ед п р инима теля или кооп ер а тив а ,
сообщ а ющ ие, в том ч исле, когд а было на ч а то д ело, когд а и п оч ему
п р екр а щ ено.
Пр ед ла га ется сфор мир ов а тьсистему нор ма лиз ов а нных та блиц, в
котор ых можно было бы хр а нить в сю э ту многообр а з ную
инфор ма цию. Под ыщ ите в ыр а з ительные имена д ля та блиц и
п олей, сна бд ив их п р и необход имости соотв етств ующ ими
п ояснениями.
За да ча 2. Ба за д а нны х “Ска чки ” .
В инфор ма ционной системе клуба любителей ска ч ек д олжна быть
п р ед ста в лена инфор ма ция об уч а ств ующ их в ска ч ка х лоша д ях
(клич ка , п ол, в оз р а ст), их в ла д ельца х (имя, а д р ес, телефон) и
жокеях (имя, а д р ес, в оз р а ст, р ейтинг). Н еобход имо сфор мир ов а ть
та блицы д ля хр а нения инфор ма ции п о ка жд ому состяз а нию: д а та ,
в р емя и место п р ов ед енияска ч ек (ип п од р ом), на з в а ниесостяз а ний
(если та ков ое имеется), номер а з а ез д ов , клич ки уч а ств ующ их в
з а ез д а х лоша д ей и имена жокеев , з а нятыеими места и п ока з а нное
в з а ез д ев р емя.
За да ча 3. Ба за д а нны х «Х р о ни ки в о схо ж д ени й» в а льпи ни ст ско м клубе.
В ба з е д а нных д олжны з а п исыв а ться д а ты на ч а ла и з а в ер шения
ка жд ого в осхожд ения, имена и а д р еса уч а ств ов а в ших в нем
а льп инистов , на з в а ниеи в ысота гор ы, стр а на и р а йон, гд еэ та гора
р а сп оложена . Пр исв ойте в ыр а з ител ьные имена та блица м и п олям
д ля хр а нения ука з а нной инфор ма ции. Н а п иса ть з а п р осы,
осущ еств ляющ иеслед ующ иеоп ер а ции:
147
1) Д ля в в ед енного п ользов а телем интер в а ла д а т п ока з а тьсп исок гор
с ука з а нием д а ты п ослед него в осхожд ения. Д ля ка жд ой гор ы
сфор мир ов а ть в хр онологич еском п ор яд ке сп исок гр уп п ,
осущ еств ляв ших в осхожд ение.
2) Пр ед оста в ить в оз можность д оба в ления нов ой в ер шины
ука з а нием еена з в а ния, в ысоты и стр а ны местоп оложения.
с
3) Пр ед оста в итьв оз можностьиз менения д а нных о в ер шине, если на
неенебыло в осхожд ения.
4) Пока з а ть сп исок а льп инистов , осущ еств ляв ших в осхожд ение в
ука з а нный интер в а л д а т. Д ля ка жд ого а льп иниста в ыв ести сп исок
гор , на котор ые он осущ еств лял в осхожд ения в э тот п ер иод , с
ука з а нием на з в а ниягр уп п ы и д а ты в осхожд ения.
5) Пр ед оста в ить в оз можность д оба в ления нов ого а льп иниста
соста в ука з а нной гр уп п ы.
в
6) Пока з а ть инфор ма цию о колич еств е в осхожд ений ка жд ого
а льп иниста на ка жд ую гор у. Пр и в ыв од есп исок отсор тир ов а тьп о
колич еств у в осхожд ений.
7) Пока з а тьсп исок в осхожд ений (гр уп п ), котор ые осущ еств лялисьв
ука з а нный п ользов а телем п ер иод в р емени. Д ля ка жд ой гр уп п ы
п ока з а тьеесоста в .
8) Пр ед оста в ить в оз можностьд оба в ления нов ой гр уп п ы, ука з а в ее
на з в а ние, в ер шину, в р емяна ч а ла в осхожд ения.
9) Пр ед оста в итьинфор ма цию о том, сколько а льп инистов п обыв а ли
на ка жд ой гор е. Сп исок отсор тир ов а тьв а лфа в итном п ор яд ке п о
на з в а нию в ер шин.
За да ча 4. Ба за д а нны х м ед и ци нско го ко о пер а т и в а .
Б а з у д а нных исп ользует д ля р а боты коллектив в р а ч ей. В та блицы
д олжны бытьз а несены имя, п ол, д а та р ожд енияи д ома шний а д р ес
ка жд ого их п а циента . Всякий р а з , когд а в р а ч осма тр ив а ет
больного (п р ишед шего на п р ием или на д ому), фиксир уется д а та
и место п р ов ед ения осмотр а , симп томы, д иа гноз и п р ед п иса ния
больному, п р оста в ляется имя п а циента и имя в р а ч а . Е сли в р а ч
п р оп исыв а ет больному ка кое-либо лека р ств о, в та блицу з а носится
148
на з в а ние лека р ств а , сп особ его п р иема , слов есное оп иса ние
п р ед п ола га емого д ейств ияи в оз можных п обоч ных э ффектов .
За да ча 5. Ба за д а нны х «Го р о д ска яД ум а ».
В ба з е хр а нятся имена , а д р еса , д ома шние и служебные телефоны
в сех ч ленов Д умы. В Д умер а бота ет п ор яд ка сор ока комиссий, в се
уч а стники котор ых яв ляются ч лена ми Д умы. К а жд а я комиссия
имеет св ой п р офиль, на п р имер , в оп р осы обр а з ов а ния, п р облемы,
св яз а нныес жильем, и та к д а лее. Д а нные п о ка жд ой из комиссий
в ключ а ют: п р ед сед а тельи соста в , п р ежние(з а 10 п р ед ыд ущ их лет)
п р ед сед а тели и ч лены э той комиссии, д а ты в ключ енияи в ыход а из
соста в а комиссии, из бр а ния ее п р ед сед а телей. Ч лены Д умы могут
з а сед а тьв нескольких комиссиях. В ба з у з а носятся в р емя и место
п р ов ед ения ка жд ого з а сед а ния комиссии с ука з а нием д еп ута тов и
служа щ их Д умы, котор ыеуч а ств уют в его ор га низ а ции.
1) Пока з а тьсп исок комиссий, д ляка жд ой – еесоста в и п р ед сед а теля.
2) Пр ед оста в итьв оз можностьд оба в лениянов ого ч лена комиссии.
3) Д ляв в ед енного п ользов а телем интер в а ла д а т и на з в а ниякомиссии
п ока з а тьв хр онологич еском п ор яд кев сех ееп р ед сед а телей.
4) Пока з а ть сп исок ч ленов Д умы, д ля ка жд ого из них – сп исок
комиссий, в котор ых он уч а ств ов а л и/или был п р ед сед а телем.
5) Пр ед оста в ить в оз можность д оба в ления нов ой комиссии,
ука з а нием п р ед сед а теля.
с
6) Д ляука з а нного интер в а ла д а т и комиссии в ыд а тьсп исок ч ленов с
ука з а нием колич еств а п р оп ущ енных з а сед а ний.
7) Выв ести сп исок з а сед а ний в ука з а нный интер в а л д а т в
хр онологич еском п ор яд ке, д ля ка жд ого з а сед а ния – сп исок
п р исутств ующ их.
8) Пр ед оста в ить в оз можность д оба в ления нов ого з а сед а ния, с
ука з а нием п р исутств ующ их.
9) По ка жд ой комиссии п ока з а тьколич еств о п р ов ед енных з а сед а ний
в ука з а нный п ер иод в р емени.
149
За да ча 6. Ба за д а нны х р ы бо ло в но й ф и р м ы .
Фир ме п р ина д лежит небольша я флотилия р ыболов ных ка тер ов .
К а жд ый ка тер имеет “п а сп ор т”, куд а з а несены его на з в а ние, тип ,
в од оиз мещ ение и д а та п остр ойки. Фир ма р егистр ир ует ка жд ый
в ыход на лов , з а п исыв а я на з в а ние ка тер а , имена и а д р еса ч ленов
кома нд ы с ука з а нием их д олжностей (ка п ита н, боцма н и т.д .), д а ты
в ыход а и в оз в р а щ ения, а та кже в ес п ойма нной р ыбы отд ельно п о
сор та м (на п р имер , тр ески). За в р емя од ного р ейса ка тер может
п осетитьнесколько р ыболов ных мест (ба нок). Фиксир уется д а та
п р иход а на ка жд ую ба нку и д а та отп лытия, ка ч еств о в ылов ленной
р ыбы (отлич ное, хор ошее, п лохое). Н а бор ту улов не
в з в ешив а ется. Н а п иса ть з а п р осы, осущ еств ляющ ие след ующ ие
оп ер а ции:
1) По ука з а нному тип у и интер в а лу д а т в ыв ести в се ка тер а ,
осущ еств ляв шие в ыход в мор е, ука з а в д ля ка жд ого в
хр онологич еском п ор яд кез а п иси о в ыход е в мор еи з на ч ением
улов а .
2) Пр ед оста в итьв оз можностьд оба в ления в ыход а ка тер а в мор ес
ука з а ниемкома нд ы.
3) Д ля ука з а нного интер в а ла д а т в ыв ести д ляка жд ого сор та р ыбы
сп исок ка тер ов с на ибольшимулов ом.
4) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок ба нок, с
ука з а нием ср ед него улов а з а э тот п ер иод . Д л я ка жд ой ба нки
в ыв ести сп исок ка тер ов , осущ еств ляв ших лов .
5) Пр ед оста в ить в оз можность д оба в ления нов ой
ука з а ниемд а нных о ней.
ба нки
с
6) Д ляз а д а нной ба нки в ыв ести сп исок ка тер ов , котор ыеп олуч или
улов в ышеср ед него.
7) Выв ести сп исок сор тов р ыбы и д ля ка жд ого сор та – сп исок
р ейсов с ука з а нием д а ты в ыход а и в оз в р а щ ения, в елич ины
улов а . Пр и э том сп исок п ока з а нных р ейсов д олжен быть
огр а нич ен интер в а ломд а т.
8) Д ля в ыбр а нного п ользов а телем р ейса и ба нки д оба в итьд а нные
о сор теи колич еств еп ойма нной р ыбы.
150
9) Пр ед оста в ить
в оз можность
п ользов а телю
ха р а ктер истики в ыбр а нного ка тер а .
из менять
10) Д ля ука з а нного интер в а ла д а т в ыв ести в хр онологич еском
п ор яд кесп исок р ейсов з а э тот п ер иод в р емени, с ука з а нием д ля
ка жд ого р ейса п ойма нного колич еств а ка жд ого сор та р ыбы.
11) Пр ед оста в итьв оз можностьд оба в лениянов ого ка тер а .
12) Д ля ука з а нного сор та р ыбы и ба нки в ыв ести сп исок р ейсов с
ука з а нием колич еств а п ойма нной р ыбы. Сп исок д олжен быть
отсор тир ов а н в п ор яд ке уменьшения колич еств а п ойма нной
р ыбы.
За да ча 7. Ба за д а нны х ф и р м ы , пр о в о д ящейа укци о ны .
Фир ма з а нима ется п р од а жей с а укциона а нтикв а р ных из д елий и
п р оиз в ед ений искусств а . Вла д ельцы в ещ ей, в ыста в ляемых на
п р ов од имых
фир мой
а укциона х,
юр ид ич ески
яв ляются
п р од а в ца ми. Л ица , п р иобр ета ющ ие э ти в ещ и, именуются
п окуп а телями. Получ ив от п р од а в цов п а р тию п р ед метов , фир ма
р еша ет, на котор ом из а укционов в ыгод нее п р ед ста в ить
конкр етный п р ед мет. Пер ед п р ов ед ением оч ер ед ного а укциона
ка жд ой из в ыста в ляемых на нем в ещ ей п р исв а ив а ется отд ельный
номер лота . Д в е в ещ и, п р од а в а емые на р а з лич ных а укциона х,
могут иметьод ина ков ыеномер а лотов .
В книга х фир мы д ела ется з а п ись о ка жд ом а укционе. Та м
отмеч а ются д а та , место и в р емя его п р ов ед ения, а та кже
сп ецифика (на п р имер , в ыста в ляютсяка р тины, на п иса нныема слом
и не р а нее 1900 г.). За носятся та кже св ед ения о ка жд ом
п р од а в а емом п р ед мете: а укцион, на котор ый он з а яв лен, номер
лота , п р од а в ец, отп р а в на я цена и кр а ткое слов есное оп иса ние.
Пр од а в цу р а з р еша ется в ыста в лять любое колич еств о в ещ ей, а
п окуп а тель имеет п р а в о п р иобр ета ть любое колич еств о в ещ ей.
О д но и то же лицо или фир ма может в ыступ а тьи ка к п р од а в ец, и
ка к п окуп а тель. После а укциона служа щ ие фир мы, п р ов од ящ ей
а укционы, з а п исыв а ют фа ктич ескую цену, уп ла ч енную з а
п р од а нный п р ед мет, и фиксир уют д а нныеп окуп а теля.
151
Н а п иса тьз а п р осы, осущ еств ляющ иеслед ующ иеоп ер а ции:
1) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок а укционов в
хр онологич еском п ор яд ке с ука з а нием на именов а ния, д а ты и
места п р ов ед ения. Д ля ка жд ого из них п ока з а ть сп исок
в ыста в ленных в ещ ей.
2) Д оба в ить д ля п р од а жи на ука з а нный п ользов а телем а укцион
п р ед мет искусств а с ука з а нием на ч а льной цены.
3) Выв ести сп исок а укционов с ука з а нием отсор тиров а нных п о
в елич инесумма р ных д оход ов от п р од а жи.
4) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок п р од а нных на
а укциона х п р ед метов . Д ля ка жд ого из п р ед метов д а ть сп исок
а укционов , гд ев ыста в лялсяэ тот жеп р ед мет.
5) Пр ед оста в ить в оз можность д оба в ления фа кта
ука з а нном а укционез а д а нного п р ед мета .
п р од а жи
на
6) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок п р од а в цов в
п ор яд ке убыв а ния общ ей суммы, п олуч енной ими от п р од а жи
п р ед метов в э тот п р омежуток в р емени.
7) Выв ести сп исок п окуп а телей и д ля ка жд ого из них – сп исок
а укционов , гд ебыли сд ела ны п р иобр етения в ука з а нный интер в а л
д а т.
8) Пр ед оста в ить в оз можность д оба в ления з а п иси о п р ов од имом
а укционе(место, в р емя).
9) Д ля
ука з а нного
места
в ыв ести
сп исок
а укционов ,
отсор тир ов а нных п о колич еств у в ыста в ленных в ещ ей.
10) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок п р од а в цов ,
котор ыеп р инима л и уч а стиев а укциона х, с ука з а нием д ляка жд ого
из них сп иска в ыста в ленных п р ед метов .
11) Пр ед оста в итьв оз можностьд оба в ления и из менения инфор ма ции
о п р од а в ца х и п окуп а телях.
12) Выв ести сп исок п окуп а телей с ука з а нием колич еств а
п р иобр етенных п р ед метов в ука з а нный п ер иод в р емени.
152
За да ча 8. Ба за д а нны х м узы ка льно го м а га зи на .
Та блицы ба з ы д а нных сод ер жа т инфор ма цию о муз ыка нта х,
муз ыка льных п р оиз в ед ениях и обстоятельств а х их исп олнения.
Н ескольких муз ыка нтов , обр а з ующ их ед иный коллектив ,
на з ыв а ются а нса мблем. Э то может быть кла ссич еский ор кестр ,
д жа з ов а я гр уп п а , кв а р тет, кв интет и т.д . К муз ыка нта м
п р ич исляют исп олнителей (игр а ющ их на од ном ил и нескольких
инстр умента х), комп оз итор ов , д ир ижер ов и р уков од ителей
а нса мблей.
К р оме того, в ба з е д а нных хр а нится инфор ма ция о комп а ктд иска х, котор ыми тор гует ма га з ин. К а жд ый комп а кт-д иск, а
точ нее, его на клейка , ид ентифицир уется отд ельным номер ом, та к
ч то в сем его коп иям, соз д а нным в р а з ное в р емя, п р исв оены
од ина ков ые номер а . Н а комп а кт-д иске может быть з а п иса но
несколько в а р иа нтов исп олненияод ного и того жеп р оиз в ед ения–
д ля ка жд ого из них в ба з е з а в ед ена отд ельна я з а п ись. К огд а
в ыход ит нов ый комп а кт-д иск,
р егистр ир уется на з в а ние
в ып устив шей его комп а нии (на п р имер , EMI), а та кже а д р ес
оп тов ой фир мы, у котор ой ма га з ин может п р иобр ести э тот
комп а кт-д иск. Н е исключ ено, ч то комп а ния–п р оиз в од итель
з а нима ется и оп тов ой п р од а жей комп а кт-д исков . М а га з ин
фиксир ует текущ ие оп тов ые и р оз нич ные цены на ка жд ый
комп а кт-д иск, д а ту его в ып уска , колич еств о э кз емп ляр ов ,
п р од а нных з а п р ошлый год и в нынешнем год у, а та кжеч исло ещ е
неп р од а нных комп а кт-д исков .
За да ча 9. Ба за д а нны х кег ельно йли ги .
Ста в ится з а д а ч а сп р оектир ов а ть ба з у д а нных д ля секр ета р я
кегельной лиги небольшого гор од ка , р а сп оложенного на Ср ед нем
За п а д е СШ А . В ней секр ета р ьбуд ет хр а нитьв сю инфор ма цию,
относящ уюсяк кегельной лиге, а ср ед ств а ми СУ Б Д – фор мир ов а ть
еженед ельные отч еты о состоянии лиги. Сп ециа льный отч ет
п р ед п ола га етсяфор мир ов а тьв концесез она .
Секр ета р ю п она д обятся фа милии и имена ч ленов лиги, их
телефонныеномер а и а д р еса . Та к ка к в лигу могут в ход итьтолько
жители гор од ка , нет необход имости хр а нения д ля ка жд ого игр ока
153
на з в а ния гор од а и п оч тов ого инд екса . Интер ес п р ед ста в ляют
ч исло оч ков , на бр а нных ка жд ым игр оком в еженед ельной сер ии из
тр ех в стр еч , в котор ых он п р инял уч а стие, и его текущ а я
р ез ульта тив ность (ср ед нее ч исло на бир а емых оч ков в од ной
в стр еч е). Секр ета р ю необход имо з на ть д ля ка жд ого игр ока
на з в а ние кома нд ы, з а котор ую он в ыступ а ет, и фа милию (и имя)
ка п ита на ка жд ой кома нд ы. Помимо на з в а ния, секр ета р ьп ла нир ует
на з на ч итька жд ой кома нд еуника льный номер .
Исход ныез на ч енияр ез ульта тив ности ка жд ого игр ока необход имы
ка к п р и оп р ед елении в конце сез она д остигшего на ибольшего
п р огр есса в лиге игр ока , та к и п р и в ыч ислении га нд ика п а д ля
ка жд ого игр ока на п ер в ую нед елю нов ого сез она . Л уч ша я игр а
ка жд ого игр ока и луч шие сер ии п отр ебуются п р и р а сп р ед елении
п р из ов в концесез она .
Секр ета р ь п ла нир ует в ключ а ть в
еженед ельные отч еты
инфор ма цию об общ ем ч исле на бр а нных оч ков и общ ем ч исле
п р ов ед енных игр ка жд ым игр оком, э та инфор ма ция исп ользуется
п р и в ыч ислении их текущ ей р ез ульта тив ности и текущ его
га нд ика п а . Исп ользуемый в лиге га нд ика п соста в ляет 75% от
р а з ности межд у 200 и р ез ульта тив ностью игр ока , п р и э том
отр ица тельный га нд ика п не д оп уска ется. Е сли р ез ульта том
в ыч исления га нд ика п а яв ляется д р обна я в елич ина , то она
усека ется. Пер ер а сч ет га нд ика п а осущ еств ляетсяка жд ую нед елю.
Н а ка жд ую нед елю ка жд ой кома нд е тр ебуется на з на ч а ть
п лощ а д ку, на котор ой она буд ет в ыступ а ть. Э ту инфор ма цию
хр а нить в Б Д не нужно (соп ер ники в ыступ а ют на смежных
п лощ а д ка х).
Н а конец, в Б Д д олжна сод ер жа тьсяв сяинфор ма ция, необход има я
д ля р а сч ета п оложения кома нд . К ома нд е з а сч итыв а ется од на
п обед а з а ка жд ую игр у, в котор ой ей уд а лось на бр а ть больше
оч ков (в ыбитьбольше кеглей) (с уч етом га нд ика п а ), ч ем кома нд е
соп ер ников . Точ но та кже кома нд е з а сч итыв а ется од но п ор а жение
з а ка жд ую в стр еч у, в котор ой э та кома нд а в ыбила меньшее
колич еств о кеглей, ч ем кома нд а соп ер ников . К ома нд е та кже
з а сч итыв а ется од на п обед а (п ор а жение) в случ а е, если п о
ср а в нению с кома нд ой соп ер ников ею на бр а но больше (меньше)
154
оч ков з а тр и в стр еч и, состояв шиеся на нед еле. Та ким обр а з ом, на
ка жд ой нед еле р а з ыгр ыв а ется 4 кома нд ных оч ка (п обед или
п ор а жений). В случ а е нич ейного р ез ульта та ка жд а я кома нд а
п олуч а ет 1/2 п обед ы и 1/2 п ор а жения. В случ а е неяв ки более ч ем
д в ух ч ленов кома нд ы, их кома нд е а в тома тич ески з а сч итыв а ется 4
п ор а жения, а кома нд есоп ер ников – 4 п обед ы. В общ ий р ез ульта т
кома нд е, котор ой з а сч ита на неяв ка , оч ки не п р иба в ляются, д а же
если яв ив шиеся игр оки в э той в стр еч е в ыступ или, од на ко, в
инд ив ид уа льные п ока з а тели – ч исло на бр а нных оч ков и
п р ов ед енных в стр еч – буд ут в несены соотв етств ующ иеиз менения.
Н а п иса тьз а п р осы, осущ еств ляющ иеслед ующ иеоп ер а ции:
1) Д ля ука з а нного интер в а ла д а т п ока з а ть сп исок в ыступ а ющ их
кома нд . Д ляка жд ой из них в ыв ести соста в и ка п ита на кома нд ы.
2) Пр ед оста в итьв оз можностьд оба в лениянов ой кома нд ы.
3) Выв ести сп исок игр ов ых п лощ а д ок с ука з а нием колич еств а
п р ов ед енных игр на ка жд ой их них.
4) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок игр ов ых п лощ а д ок,
с ука з а ниемсп иска игр а в ших на них кома нд .
5) Пр ед оста в ить в оз можность з а п олнения р ез ульта тов игр ы д в ух
кома нд на ука з а нной п лощ а д ке.
6) Выв ести
сп исок
п лощ а д ок
с
ука з а нием
р ез ульта тив ности игр оков на ка жд ой из них.
сумма р ной
За да ча 10. Ба за д а нны х би бли о т еки .
Ра з р а бота тьинфор ма ционную систему обслужив а ниябиблиотеки,
котор а ясод ер жит след ующ ую инфор ма цию: на з в а ниекниги, ФИО
а в тор ов , на именов а ние из д а тельств а , год из д а ния, колич еств о
стр а ниц, колич еств о илл юстр а ций, стоимость, на з в а ние филиа ла
библиотеки или книгохр а нилищ а , в котор ых на ход ится книга ,
колич еств о имеющ ихся в библиотеке э кз емп ляр ов конкр етной
книги, колич еств о студ ентов , котор ым в ыд а в а ла сь конкр етна я
книга , на з в а ния фа культетов , в уч ебном п р оцессе котор ых
исп ользуетсяука з а нна якнига .
155
За да ча 11. Ба за д а нны х по учет у успев а ем о ст и ст уд ент о в .
Б а з а д а нных д олжна сод ер жа тьд а нные:
о контингенте студ ентов – фа милия, имя, отч еств о, год
п оступ ления, фор ма обуч ения (д нев на я/в еч ер няя/з а оч на я), номер
или на з в а ниегр уп п ы;
об уч ебном п ла не– на з в а ниесп ециа льности, д исцип лина , семестр ,
колич еств о отв од имых на д исцип лину ч а сов , фор ма отч етности
(э кз а мен/з а ч ет);
о жур на ле усп ев а емости студ ентов
д исцип лина , оценка .
– год /семестр , студ ент,
За да ча 12. Ба за д а нны х д ляучет а а уд и т о р но го ф о нд а уни в ер си т ет а .
Б а з а д а нных д олжна сод ер жа ть след ующ ую инфор ма цию об
а уд итор ном фонд е унив ер ситета : – на именов а ние кор п уса , в
котором р а сп оложено п омещ ение, номер комна ты, р а сп оложение
комна ты в кор п усе, шир ина и д лина комна ты в метр а х, на з на ч ение
и в ид п омещ ения, п од р а з д еление унив ер ситета , з а котор ым
з а кр еп лено п омещ ение. В ба з е д а нных та кже д олжна быть
инфор ма ция о в ысоте п отолков в п омещ ениях (в з а в исимости от
места р а сп оложения п омещ ений в кор п усе). След ует та кже
уч итыв а ть, ч то стр уктур а п од р а з д елений унив ер ситета имеет
иер а р хич еский в ид , когд а од ни п од р а з д еления в ход ят в соста в
д р угих (фа культет, ка фед р а , ла бор а тор ия, … ).
Помимо SQL з а п р осов д ля соз д а ния та блиц ба з ы д а нных,
соста в ьте з а п р ос на соз д а ние п р ед ста в ления (VIEW), в котор ом
п омимо п р ив ед енной в ыше инфор ма ции п р исутств ов а ли бы
д а нныео п лощ а д ях и объема х ка жд ого п омещ ения.
За да ча 13. Ба за д а нны х р ег и ст р а ци и пр о и сш ест в и й.
Н еобход имо соз д а тьба з у д а нных р егистр а ции п р оисшеств ий. Б а з а
д олжна сод ер жа ть:
• д а нные д ля р егистр а ции сообщ ений о п р оисшеств иях
(р егистр а ционный номер сообщ ения, д а та р егистр а ции, кр а тка я
фа була (тип п р оисшеств ия));
• инфор ма цию о п р инятом п о п р оисшеств ию р ешении (отка з а но
156
в в оз бужд ении д ел, уд ов летв ор ено ход а та йств о о в оз бужд ении
уголов ного д ела с ука з а нием р егистр а ционный номер а
з а в ед енного д ела , отп р а в лено п о тер р итор иа льному п р из на ку);
• инфор ма цию о лица х, в инов ных или п од оз р ев а емых в
сов ер шении п р оисшеств ия (р егистр а ционный номер лица ,
фа милия, имя, отч еств о, а д р ес, колич еств о суд имостей),
отношение конкр етных лиц к конкр етным п р оисшеств иям
(в инов ник, п отер п ев ший, п од оз р ев а емый, св ид етель, ...).
За да ча 14. Ба за д а нны х д ляо бслуж и в а ни яр а бо т ы ко нф ер енци и .
Б а з а д а нных д олжна сод ер жа ть сп р а в оч ник п ер сона лий
уч а стников конфер енции (фа милия, имя, отч еств о, уч ена ястеп ень,
уч еное з в а ние, на уч ное на п р а в ление, место р а боты, ка фед ра
(отд ел), д олжность, стр а на , гор од , п оч тов ый инд екс, а д р ес,
р а боч ий телефон, д ома шний телефон, e-mail), и инфор ма цию,
св яз а нную с уч а стием в конфер енции (д окла д ч ик или уч а стник,
д а та р а ссылки п ер в ого п р игла шения, д а та п оступ ления з а яв ки,
тема д окла д а , отметка о п оступ лении тез исов , д а та р а ссылки
в тор ого п р игла шения, д а та п оступ ления ор гв з носа , р а з мер
п оступ ив шего ор гв з носа , д а та п р иез д а , д а та отъез д а , п отр ебностьв
гостинице).
За да ча 15. Ба за д а нны х д ляо бслуж и в а ни яскла д а .
Б а з а д а нных д олжна обесп еч итьа в тома тиз а цию скла д ского уч ета .
В ней д олжны сод ер жа тьсяслед ующ иед а нные:
• инфор ма ция о “ед иница х хр а нения” – номер ор д ер а , д а та , код
п оста в щ ика , ба ла нсный сч ет, код соп р ов од ительного д окумента
п о сп р а в оч нику д окументов , номер соп р ов од ительного
д окумента , код ма тер иа ла п о сп р а в оч нику ма тер иа лов , сч ет
ма тер иа ла , код ед иницы из мер ения, кол ич еств о п р ишед шего
ма тер иа ла , цена ед иницы из мер ения;
• инфор ма ция о хр а нящ ихся на скла д е ма тер иа ла х – сп р а в оч ник
ма тер иа лов – код кла сса ма тер иа ла , код гр уп п ы ма тер иа ла ,
на именов а ниема тер иа ла ;
• инфор ма ция о ед иница х из мер ения конкр етных в ид ов
ма тер иа лов – код ма тер иа ла , ед иница из мер ения (метр ы,
килогр а ммы, литр ы и т.д .).
157
• инфор ма ция о п оста в щ ика х ма тер иа лов – код п оста в щ ика , его
на именов а ние, ИН Н , юр ид ич еский а д р ес (инд екс, гор од , улица ,
д ом), а д р ес ба нка (инд екс, гор од , улица , д ом), номер
ба нков ского сч ета ;
За да ча 16. Ба за д а нны х ф и р м ы .
Фир ма отка з а ла сь от п р иобр етения некотор ых тов а р ов у св оих
п оста в щ иков , р ешив са мостоятельно на ла д итьих п р оиз в од ств о. С
э той целью она ор га низ ов а ла сеть сп ециа лиз ир ов а нных цехов ,
ка жд ый из котор ых п р инима ет оп р ед еленное уч а стие в
технологич еском п р оцессе.
К а жд ому в ид у в ып уска емой п р од укции п р исв а ив а ется, ка к
обыч но, св ой шифр тов а р а , п од котор ым он з на ч ится в фа йле
тов а р ных з а п а сов . Э тот же номер служит и шифр ом п р од укта . В
з а п иси с э тим шифр ом ука з ыв а ется, когд а была из готов лена
п ослед няя п а р тия э того п р од укта , ка ков а ее стоимость, сколько
оп ер а ций п отр ебов а лось.
О п ер а цией сч ита ется з а конч енна я ч а сть п р оцесса п р оиз в од ств а ,
котор а я целиком в ып олняется сила ми од ного цеха в соотв етств ии
с технич ескими тр ебов а ниями, п ер еч исленными на отд ельном
ч ер теже. Д ля ка жд ого п р од укта и д ля ка жд ой оп ер а ции в ба з е
д а нных фир мы з а в ед ена з а п ись, сод ер жа щ а я оп иса ние оп ер а ции,
ее ср ед нюю п р од олжительность и номер ч ер тежа , п о котор ому
можно отыска ть тр ебуемый ч ер теж. К р оме того, ука з ыв а ется
номер цеха , обыч но п р оиз в од ящ его д а ннуюоп ер а цию.
В з а п ись, св яз а ннуюс конкр етной оп ер а цией, з а носятсяп отр ебные
колич еств а р а сход ных ма тер иа лов , а та кже п р исв оенные им
шифр ы тов а р а . Ра сход ными на з ыв а ют та кие ма тер иа лы, ка к,
на п р имер , э лектр ич еский ка бель, котор ый нельзя исп ользов а ть
п ов тор но. Пр и в ыд а ч ер а сход ного ма тер иа ла со скла д а в п р оцессе
п од готов ки к в ып олнению оп ер а ции, р егистр ир уется фа ктич ески
в ыд а нное кол ич еств о, соотв етств ующ ий шифр тов а р а , номер
служа щ его, отв етств енного з а в ыд а ч у, д а та и в р емяв ыд а ч и, номер
оп ер а ции и номер на р яд а на п р ов ед ение р а бот (о котором
несколько ниже). Реа льно з а тр а ч енное колич еств о ма тер иа ла
может несов п а д а тьс р а сч етным, (на п р имер , из -з а бр а ка ).
158
К а жд ый из цехов р а сп ола га ет тр ебуемым инстр умента р ием и
обор уд ов а нием. Пр и в ып олнении некотор ых оп ер а ций их иногд а
нед оста точ но, и цех в ынужд ен обр а щ а ться в центр а льную
инстр умента льную з а нед оста ющ ими. К а жд ый тип инстр умента
сна бжен отд ельным номер ом и на него з а в ед ена з а п ись со
слов есным оп иса нием. К р оме того, отмеч а ется, ка кое колич еств о
инстр ументов э того тип а в ыд елено цеха м и ка кое оста лось в
инстр умента льной. Э кз емп ляр ы инстр умента конкр етного тип а ,
на п р имер , га еч ные ключ и од ного р а з мер а , р а з лич а ются п о св оим
инд ив ид уа льным номер а м. Н а фир ме д л я ка жд ого тип а
инстр умента имеется з а п ись, сод ер жа щ а я п ер еч ень в сех
инд ив ид уа льных номер ов . К р оме того, ука з а ны д а ты их
п оступ ленияна скла д .
По ка жд ой оп ер а ции в фир ме отмеч а ют тип ы и колич еств а
инстр ументов э тих тип ов , котор ыед олжны исп ользов а ться п р и ее
в ып олнении. К огд а инстр ументы д ейств ительно бер утсясо скла д а ,
фиксир уется инд ив ид уа льный номер ка жд ого э кз емп ляр а ,
ука з ыв а ются номер з а ка з а в шего их цеха и номер на р яд а на
п р ов ед ение р а бот. И в э том случ а е з а тр ебов а нное колич еств о не
в сегд а сов п а д а ет с з а ка з а нным.
Н а р яд на п р ов ед ение р а бот п о фор ме на п омина ет з а ка з на
п р иобр етение тов а р ов , но, в отлич ие от п ослед него, на п р а в ляется
неп оста в щ ику, а в од ин из цехов . О фор мляется на р яд п осле того,
ка к р уков од ств о фир мы соч тет необход имым в ып устить п а р тию
некотор ого п р од укта . В на р яд з а носятся шифр п р од укта , д а та
офор мления на р яд а , ср ок, к котор ому д олжен быть в ып олнен
з а ка з , а та кжетр ебуемоеколич еств о п р од укта .
Ра з р а бота йте стр уктур у та блиц ба з ы д а нных, п од бер ите имена
та блиц и п олей, в котор ых могла бы р а з меститься в ся э та
инфор ма ция.
Н а п ишитеSQL-з а п р осы, осущ еств ляющ иеслед ующ иеоп ер а ции:
1) Д ля в ыбр а нного цеха в ыд а тьсп исок в ып олняемых им оп ер а ций.
Д ля ка жд ой оп ер а ции п ока з а тьсп исок р а сход ных ма тер иа лов с
ука з а нием колич еств а .
2) Пока з а ть сп исок инстр ументов
д оба в лениянов ого.
и п р ед оста в ить в оз можность
159
3) Выд а тьсп исок исп ользуемых инстр ументов , отсор тир ов а нных п о
колич еств у их исп ользов а нияв р а з лич ных на р яд а х.
4) Д ля ука з а нного интер в а ла д а т в ыв ести сп исок на р яд ов в
хр онологич еском п ор яд ке, д ля ка жд ого из котор ых п ока з а ть
сп исок исп ользуемых инстр ументов .
5) Пока з а ть сп исок оп ер а ций
д оба в лениянов ой оп ер а ции.
и
п р ед оста в ить в оз можность
6) Выд а ть сп исок р а сход уемых ма тер иа лов , отсор тир ов а нных п о
колич еств у их исп ользов а нияв р а з лич ных на р яд а х.
7) Выд а ть сп исок тов а р ов , с ука з а нием исп ользуемых п р и их
из готов лении инстр ументов .
8) Пока з а ть сп исок на р яд ов в хр онологич еском п ор яд ке и
п р ед оста в итьв оз можностьд оба в лениянов ого.
9) Выд а тьотч ет о п р оиз в од ств е тов а р ов р а з лич ными цеха ми, ука з а в
на именов а ниецеха , на з в а ниетов а р а и его колич еств о.
Л и тер а тур а
1. Д ейт К . Вв ед ениев системы ба з д а нных. 6-еиз д а ние: Пер . с а нгл. – К .; М .;
СПб.: Из д а тельский д ом “Вильямс”, 1999.- 848 с., ил.
2. М а р тин Г р а бер . Вв ед ениев SQL. – М .: “Л О РИ”, 1996
3. SQL. Э нциклоп ед ияп ользов а теля: Пер . с а нгл./ Л а д а ни Х а нс.- К иев :
Д иа Софт, 1998.- 624 с.
4. Г .Д жексон. Пр оектир ов а ниер еляционных ба з д а нных д ляисп ользов а ния
с микр о-Э ВМ .- М .: М ир , 1991
5. У льма н Д ж. Б а з ы д а нных на Па ска ле. - М .: М а шиностр оение, 1990. –
462 с.
6. Пушников А .Ю . Вв ед ениев системы уп р а в ленияба з а ми д а нных. Ч а сть1.
Реляционна ямод ельд а нных: У ч ебноеп особие/ Из д -еБ а шкир ского ун-та .
– У фа . 1999. – 108 с.
7. Пушников А .Ю . Вв ед ениев системы уп р а в ленияба з а ми д а нных. Ч а сть2.
160
Н ор ма льныефор мы отношений и тр а нз а кции: У ч ебноеп особие/ Из д -е
Б а шкир ского ун-та . – У фа . 1999. – 108 с.
Download