2 SQL тілінің формалары


SQL құрылымданған сұратулар тілі келесі формаларда жүзеге асады:

  • Интерактивті SQL.
  • Статистикалық SQL.
  • Динамикалық SQL.
  • Ішкі SQL.

Интерактивті SQL ақырлы қолданушыға интерактивті режимде SQL-операторларды орындауға мүмкіндік береді. Барлық ДҚБЖ интерактивті режимде деректер қорымен жұмыс инструментальды құралдарын ұсынады. Мысалы, Oracle деректер қорын басқару жүйесі SQL*Plus утилитасын қосады, соңғысы жолдық режимде SQL операторларының көбін орындауға мүмкіндік береді.

Статистикалық SQL ішкі SQL немесе модульды SQL ретінде жүзеге асады. Статистикалық SQL операторлары программаны компиляциялау уақытында алдын ала анықталып қояды. SQL.

Динамикалық SQL программаны орындау уақытында SQL операторларын орындауға мүмкіндік береді.

Ішкі SQL басқа программалау тілдерінде программа кодына SQL операторларын қосуға мүмкіндік береді.

SQL операторлар тобы

SQL тілі:

  • Кейде SQL тілі командалары деп аталатын, тіл операторлары;
  • Мәліметтер типі;
  • Ішкі функциялар жиыны.

Өздерінің логикалық мәндері бойынша SQL тілі операторлары келесі топтарға бөлінеді:

  • DDL мәліметтерді анықтау тілі (Data Definition Language);
  • мәліметтерді басқару тілі DML (Data Manipulation Language).

Мәліметтерді анықтау тілі деректер қорының обьектілерін басқаратын операторлардан тұрады. Соңғыларға индекстер, кестелер және ұсыныстар жатады. Әр нақты бір деректер қоры үшін стандартта қарастырылған обектілер жиынын кеңейтетін өз обьектілер жиыны бар. Кейбір ДҚБЖ, мысалы Oracle сияқты, бір қолданушының меншігіндегі барлық обьектілер деректер қоры схемасын құрады. Сонымен қатар, SQL92 стандартында схема терминімен байланысқан кестелер тобын атай бастады.

Мәліметтерді басқару тілі деректер қоры кестелерінің мазмұнын басқаратын және осы кестелерден ақпаратты алып шығу операторларынан тұрады.

DML тілі келесі операторларды анықтайды:

  • SELECT – бір немес бірнеше кестеден мәліметтерді алу;
  • INSERT – кестелерге жолды қосу;
  • DELETE – кестелерден жолды алып тастау;
  • UPDATE – кестедегі өрістер мәнін өзгерту.

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.

Бағанға қойылатын шектеулер келесі жазбалармен берілуі мүмкін:

  • NOT NULL – кез келген қосылатын немесе өзгертілетін баған мәні NULL ден өзгеше болуы керек..
  • UNIQUE – бағанның барлық мәндері уникалды болу керек.
  • PRIMARY KEY – бір бағанды бастапқы кілт ретінде орнатады, біруақытта бағанның барлық мәндері уникалды болады.
  • CHECK (condition) – жақшада берілетін шартты баған мәндерін салыстыру үшін қолданады және келесі мәндердә қайтарады, TRUE, FALSE немесе UNKNOWN. Егер SQL-операторын орындау барысында FALSE мәні қайтарылатын болса, онда оператор орындалмайды.
  • REFERENCES table (fields_list) – берілген кесте бағандарының мәндерінің ата – аналық кесте бағандарының мәндеріне сәйкес болуын талап етеді.

Кестелерге қойылатын шектеулер келесі жазбалармен көрсетідуі мүмкін:

  • CHECK (condition) - жақшада берілетін шартты баған мәндерін салыстыру үшін қолданады және келесі мәндердә қайтарады, TRUE, FALSE немесе UNKNOWN. Егер SQL-операторын орындау барысында FALSE мәні қайтарылатын болса, онда оператор орындалмайды.
  • FOREIGN KEY (fields_list) – бұл шектеу чыртқы кілті бойынша бағандарға арналған REFERENCES ұқсайды, және сыртқы кілтте көрсетілген барлық мәндер ата–аналық кілтте көрсетілген барлық мәндерге сәйкестігіне кепілдік береді, сілтемелік бүтіндікті қамтамасыз етеді. Осы шектеулерде қолданылатын бағандар деректерінің типтері сәйкес келу керек, ал ата–аналық және сыртқы кілт бір–біріне сәйкес келу керек(тұрақты базалық кесте, глобаоьды уақытша кесте, локальды уақытша кесте) .

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 жазбалары келесі қасиеттерге ие:

  • CASCADE – ата аналық кілтте болған өзгерістерді сыртқы кілттерге тарату (MATCH PARTIAL үшін – уникалды сәйкес жолдар үшін ғана).
  • SET NULL – сыртқы кілт мәндері келесі ережелер бойынша NULL айналады: MATCH FULL үшін – сыртқы кілттің барлық мәндері алмастырылады; MATCH PARTIAL үшін – уникалды сәйкес жолдарда тек қаүа ата аналық кілтте болған өзгерістерге сәйкес келетін бағандар мәндері ғана өзгереді
  • SET DEFAULT – сыртқы кілт мәндері SET NULL ережелерімен ағымдағы мәндерге ауысады, бірақ MATCH FULL сәйкестік типінде сыртқы кілттің тек қана ата аналық кілт мәндеріне сәйкес келетін мәндері ғана өзгертіледі (сыртқы кілттің NULL мәні өзгертіледі).

NO ACTION – сыртқы кілттерде ешқандай әрекеттер жасалмайды, сілтемелік бүтінділікті бүлдірмейтін ата аналық кәлт мәндері ғана өзгереді.

DEFFERABLE жазбасы транзакеция аяғына дейін уақыт өткен шектеулерді тексеруді көрсетеді NOT DEFFERABLE жазбасы сілтемелік бүтінділік бақылануы әр INSERT , DELETE және UPDATE операторларында орындалатынын анықтайды.

Шектеулерді тексеру режимә әр сеанстың басында орнатылады, содан кейін SET CONSTRAINTS MODE SQL-операторымен немесе локальды жазбалар DEFFERABLE и NOT DEFFERABLE арқылы өзгертілуі мүмкін.