SQL құрылымданған сұратулар тілі келесі формаларда жүзеге асады:
Интерактивті SQL ақырлы қолданушыға интерактивті режимде SQL-операторларды орындауға мүмкіндік береді. Барлық ДҚБЖ интерактивті режимде деректер қорымен жұмыс инструментальды құралдарын ұсынады. Мысалы, Oracle деректер қорын басқару жүйесі SQL*Plus утилитасын қосады, соңғысы жолдық режимде SQL операторларының көбін орындауға мүмкіндік береді.
Статистикалық SQL ішкі SQL немесе модульды SQL ретінде жүзеге асады. Статистикалық SQL операторлары программаны компиляциялау уақытында алдын ала анықталып қояды. SQL.
Динамикалық SQL программаны орындау уақытында SQL операторларын орындауға мүмкіндік береді.
Ішкі SQL басқа программалау тілдерінде программа кодына SQL операторларын қосуға мүмкіндік береді.
SQL операторлар тобы
SQL тілі:
Өздерінің логикалық мәндері бойынша SQL тілі операторлары келесі топтарға бөлінеді:
Мәліметтерді анықтау тілі деректер қорының обьектілерін басқаратын операторлардан тұрады. Соңғыларға индекстер, кестелер және ұсыныстар жатады. Әр нақты бір деректер қоры үшін стандартта қарастырылған обектілер жиынын кеңейтетін өз обьектілер жиыны бар. Кейбір ДҚБЖ, мысалы Oracle сияқты, бір қолданушының меншігіндегі барлық обьектілер деректер қоры схемасын құрады. Сонымен қатар, SQL92 стандартында схема терминімен байланысқан кестелер тобын атай бастады.
Мәліметтерді басқару тілі деректер қоры кестелерінің мазмұнын басқаратын және осы кестелерден ақпаратты алып шығу операторларынан тұрады.
DML тілі келесі операторларды анықтайды:
SQL-операторларының орындалу фазалары
SELECT A,B,C, FROM X,Y WHERE A<500 AND C='ASF' |
|
parse |
Операторды синтаксистік талдау |
validate |
Қолданушы привлегиясын тексеру, желілік каталогтар, кестелер мен өрістер атауларын тексеру |
access plan |
Мәліметтерге қолжетім жоспарын генерациялау. Қолжетімділі жоспары – деректер қорында сақталатын мәліметтерге қатысты орындалатын кодтың екілік түрде берілуі. |
optimize |
Қолжетімділік жоспарын тиімділендіру. Мәліметтерді іздеу жылдамдығын арттыру үшін индекстер пайдаланады. өзара байланысты кестелерді пайдалануды тиімділендіру |
execute |
Операторды орындау |
SQL тілін пайдалану
ДҚБЖ қосылу
SQL операторларын тереңірек қарастыруға кіріспестен бұрын, қолданушының ДҚБЖ жұмыс істеу сценариін қарастырайық.
Бастапқы қадам ретінде ДҚБЖ қосылуды орындаған дұрыс. Мысалы, CONNECT TO MyDB1 USER User1/Password1;.
TO жазбасы байланыс орындалатын мәліметтер қорын мамандандырады. USER жазбасы деректер қорымен жұмыс істетйтін қолданушы аты мен паролін анықтайды.
SQL тілінің операторлары мен функциялары жолдық мәндерге қарағанда регистерге әсер етпейді. Бірақ SQL тілінің стандартындағы сияқты дәрісте операторлар үлкен әріптермен жазылып отырады, ал өрістер, кестелер және жалған аттар кіші «ріптермен белгіленеді.
Мәліметтермен жұмыс істеместен бұын келесі әрекеттер орындалуы қажет:
Кесте құру
Кестені құру үшін CREATE TABLE операторы қолданылады, SQL92 стандартында келесі түрде жазылады:
CREATE [ { GLOBAL | LOCAL } ] TEMPORARY]
TABLE кесте аты
( { column | [table_constraint] } . , ..
[ ON COMMIT { DELETE | PRESERVE} ROWS ] );
column келесідегідей анықталады
өріс_аты {domain | datatype [size]}
[column_constraint:]
[ DEFAULT default_value ]
[ COLLATE collate_value ]
GLOBAL TEMPORARY немесе LOCAL TEMPORARY жазбалары уақытша кестенің құрылуын көрсетеді
ON COMMIT жазбасы тек қана уақытша кестелер үшін пайдаланылады. Уақытша кестелер үшін ағым бойынша ON COMMIT DELETE ROWS жазбасы қарастырылады.
Кестенің атынан кейін доға жақшалардың ішіне үтір арқылы, өрістер (бағандар деп аталатын) мен шектеулер тізімі көрсетіледі. әр өрістің аты мен типі бар (datatype). Тип домен ретінде немесе SQL операторының кез келген типі ретінде анықталады. Мысалы, SQL тілі келесі типтерге ие : integer, char (символдар_саны), varchar (символдар_саны), int, smallint, float, date.
DEFAULT жазбасы ағымдағы мәнді анықтайды. Бұл доменде көрсетілген ағымдағы мәнге қарағанда жоғары приоритетке ие (егер деректер типінің орына домен пайдаланған болса).
Кесте үшін шектеу (table_constraint) және баған үшін шектеу (column_constraint), бүтінділік шектеуі деп те атала береді, кестеге енгізілетін мәліметке белгілі бір шарт қояды.
Бағанға қойылатын шектеулер бағанды сипаттағаннан кейін ғана көрсетіледі, ал кестеге арналған шектеулер – кез келген баған сипатталған соң үтір арқылы жазылады.
В стандарте SQL92 ограничения должны иметь имена, которые генерируются СУБД. В наиболее продвинутых БД, в частности Oracle, доступ к ограничениям возможен посредством служебных таблиц словаря базы данных и дополнительного набора команд языка SQL.
Бағанға қойылатын шектеулер келесі жазбалармен берілуі мүмкін:
Кестелерге қойылатын шектеулер келесі жазбалармен көрсетідуі мүмкін:
SQL92 стандарты әр SQL-операторды орындау алдында және ағымдағы транзакция аяқталғанда шектеулерді баұылау режимін орнатады. Соңғы жағдайда транзакция ішінде бүтіндікті сақтау бүлінуіне жол береді.Бұл режим REFERENCES қатысты кестелерге мәліметтерді енгізуге өте тиімді.
Кестелер үшін шектеулерді анықтау
Шектеулерді сипаттау SQL92 стандартында келесі формальды сипаттауға ие:
table_constraint анықталады
[ CONSTRAINT constraint_name ]
{ PRIMARY KEY (аты_өріс .,:) }
| { UNIQUE (аты_өріс .,:) }
| { FOREIGN KEY (аты_өріс .,:) }
{ REFERENCES аты_кесте [(аты_өріс .,:)]
[ref_specification] }
| { CHECK (condition) }
[[ NOT ] DEFFERABLE ]
column_constraint анықталады
[ CONSTRAINT constraint_name ]
{ NOT NULL } | { PRIMARY KEY } | UNIQUE
| { REFERENCES аты_кесте [(аты_өріс .,:) ]
[ref_specification]}
| { CHECK (condition) }
| [ INITIALLY DEFFERED | INITIALLY IMMEDIATE ]
[[ NOT ] DEFFERABLE ]
ref_specification определяется как
[ MATCH {FULL | PARTIAL } ]
[ ON UPDATE
{ CASCADE | SET NULL | SET DEFAULT |
NO ACTION } ]
[ ON DELETE
{ CASCADE | SET NULL | SET DEFAULT |
NO ACTION } ]
REF_SPECIFICATION келесі шектеулерге ата–аналық кестелерде өзгерістерді орындау барысындағы әрекеттер мен сәйкестік типтерін анықтайды, FOREIGN KEY және REFERENCES. Сәйкестік MATCH FULL (толық сәйкестік) болып анықталуы мүмкін немесе MATCH PARTIAL (бөлшектік сәйкестік).
Толық сәйкестікте атан аналық кілт пен сыртқы кіл мәндері толығымен сәйкесуі қажет, немесе сыртқы кілттің барлық мәндері NULL болу керек.
Бөлшектік сәйкестікте сыртқы кілттің кейбір мәндері NULL тең болуы мүмкін және сыртқы кілттің әр жолының мәні NULL өзгеше болуы қажет, ата аналық кілт мәндерәне сәйкес болуы қажет.
Егер сәйкестік типі көрсетілмеген болса, онда сыртқы кілттің кез келген мәні ата аналық кілтте бар деп болжанады, бірақ сонымен бірге сыртқа кілтте NULL мәні болуы мүмкін (бөлшектік немесе толық).
tbl1 кестесін қарайық, атан аналық кілттері f2 және f3 для бағандары ретінде анықталған, tbl2 кестесі сыртқы кілттері және c1 және c2 қарастырайық. Егер tbl1 tbl2 кестелері келесі мәндерге ие болса:
tbl1 |
tbl2 |
|||||
f1 |
f2 |
f3 |
c0 |
c1 |
c2 |
c3 |
1 |
11 |
100 |
1 |
NULL |
NULL |
ff |
2 |
12 |
200 |
2 |
11 |
NULL |
gg |
3 |
13 |
300 |
3 |
11 |
100 |
hh |
4 |
13 |
300 |
4 |
NULL |
200 |
ii |
Онда MATCH FULL көрсетілген кезде сілтемелік бүтінділік шектеуі екінші кестеге тек қана бірінші және үшінші жолдарды енгізуге ғана мүмкіндік береді (біріншісінде сыртқы кілт мәні ретінде NULL, ал үшіншісінде - сыртқы кілт толығымен ата аналық кілтпен сәйкеседі. MATCH PARTIAL көрсетілген кезде сілтемелік бүтіндік шектеулері екінші кестеге барлық көрсетілген жолдарды енгізуге мүмкіндік береді (бірінші жолды – мүмкін сәйкеспейтін мән ретінді, екінші және төртінші – NULL бөлшектік мәнге сәйкес келеді, үшінші – уникалды сәйкес).
Атан аналық кілтке өзгерістер енгізу әрекеттері келесі жазбалармен көрсентілуі мүмкін, ON UPDATE және ON DELETE.
ON UPDATE және ON DELETE жазбалары келесі қасиеттерге ие:
NO ACTION – сыртқы кілттерде ешқандай әрекеттер жасалмайды, сілтемелік бүтінділікті бүлдірмейтін ата аналық кәлт мәндері ғана өзгереді.
DEFFERABLE жазбасы транзакеция аяғына дейін уақыт өткен шектеулерді тексеруді көрсетеді NOT DEFFERABLE жазбасы сілтемелік бүтінділік бақылануы әр INSERT , DELETE және UPDATE операторларында орындалатынын анықтайды.
Шектеулерді тексеру режимә әр сеанстың басында орнатылады, содан кейін SET CONSTRAINTS MODE SQL-операторымен немесе локальды жазбалар DEFFERABLE и NOT DEFFERABLE арқылы өзгертілуі мүмкін.