6. Ұсыныстарды құру


Бейнелеу, кейде түр деп аталатын, сақталғансұратуды орындау нәтижесі ретінде алынатын логикалық кестені анықтайды. Бейнелеу – бұл қандайда бір виртуалды логикалық кесте, ол SQL-операторда бір бейнеге сілтеме көрсетілген жағдайда қайта құрылып отырады. Берілген бейнелеуді анықтайтын сұратуды орындаудың нәтижесі ретінде нәтижелік жиын деректер қорының басқа кестелерінің өрістерінен құрылады.сұратуда ұсынымды құру үшін қолданылатын кестелер қарапайым негізгі кестелер деп аталады.

Ұсыным сызба объектісі болып табылады да, деректер қорының логикалық кестесі ретінде қолданылады.

Ұсынымды анықтау үшін CREATE VIEW операторы қолданылады.

CREATE VIEW операторы

CREATE VIEW операторы SQL-92 стандартында келесі формальды сипаттауға ие:

CREATE VIEW table_name [(field .,:) ]

AS (SELECT_operator

[WITH [CASCADED | LOCAL]

CHECK OPTION ] );

Ұсыным атынан кейін көрсетілетін өрістер тізімі (field) сұаруда қолданылатын негізгі кесте бағандарының атауларын өзгертуге мүмкіндік береді. Бұл кестелерді біріктіруде қолданылатынсұратуларда бағандар аттары сәйкескен жағдайда қолданылуы мүмкін; өрістерінің аттары әртүрлі кестелердің бағандарының біріктірілуі салдарынан алынған есептелетін бағандарды атау үшін де қолданылады.

Ұсынымды құру үшін пайдаланатын SELECT сұрату операторы келесі екі yscfy&f bt болуы мүмкін:

  • кеңейтілген;
  • тұрақты.

SELECT операторының кеңейтілген нысаны SELECT * конструкциясы ретінде беріледі,сұратудан алынатын өрістер тізімін қатаң шектемейді. Бұл ALTER TABLE операторы арқылы кесе құрылымын өзгерткенде ұсыным синтаксисін өзгертпейді. Бірақ бұл кемшілікте болуы мүмкін, себебі ұсынымдар ұсынатын SQL-операторлар бағандар сандарынан, типіне және атауларына тәуелді болса.

SELECT операторының тұрақты формасысұратуға қатысы бар бағандар санын қатаң қадағалай отырып SELECT бағандар тізімі конструкциясы арқылы беріледі.

Негізгі кестелер өзгерісі ұсынымға қалай әсер ететіндігін ALTER TABLE операторында көрсетуге болады:

  • RESTRICT жазбасы егер берілген бағандарға ұсыным түрінде сілтеме бар болса кестенің өзгеруін қайтаратын шектеулерді анықтайды;
  • CASCADE жазбасы өшірілетін бағандағы барлық ұсынымдар бағанмен бірге өшірілетінін көрсетеді (сонымен қатар өшірілетін бағанға сілтенетін немесе FOREIGN KEY шектеулері бар барлық сыртқы кілттер де өшіріледі).

ALTER TABLE операторы SQL-92 стандартында келесі формальды сипаттауға ие:

ALTER TABLE table_name

{ ADD [COLUMN] column_name column_type

[(size)]

[column_ constraint] }

| { ALTER [COLUMN]column_name

{ SET DEFAULT value } | DROP DEFAULT }

| { DROP [COLUMN] column_name

RESTRICT | CASCADE }

| { ADD table_ constraint }

| { DROP CONSTRAINT constraint_name

RESTRICT | CASCADE };

ALTER TABLE операторы стандартқа толығымен сәйкестік деңгейі үшін ғана қажеть, бірақ кейбір коммерциялық ДҚБЖ аталған операторды жүзеге асырады, бірақ кейбір шектеулер мен кеңейтілулер енгізеді.

Келесі оператор барлық өзгеретін кестенің f2 бағанына сілтенген ұсынымдарды өшіретін кестедегі өзгерісті бейнелейді:

ALTER TABLE tbl1 DROP COLUMN f2 CASCADE;

Ұсынымдардағы мәліметтерді өзгерту

Егер ұсынымдарда DELETE, INSERT немесе UPDATE операторлары көрсетілген болса, , онда барлық өзгерістер ұсынымдарда да, және осы ұсынымдарды жазуда қолданған кестелерде де өзгерістер жүреді. Ұсынымдар өзгермелі және тұрақты болады..

Стандартта өзгерічстер тек қана бір, негізгі кестеге ғана енгізіледі. Бірақ коммерциялық ДҚБЖ көбі өзара байланысқан екі кестеге де бір себептерімен өзгерістер енгізеді.

SQL-92 стандарты келеесі шарттар орындалған жағдайды ұсыным өзгермелі екендігін анықтайды :

  • Ұсынымды құруға арналғансұратулар тек қана бір кестеден деректер алады
  • Кестені құруға арналғансұратуда кесте ретінде ұсыным алынатынг болса, онда ол да өзгермелі болуы қажет;
  • Ешқандай кестелердің біріктірілуіне, тіпті өзімен өзі, жол берілмейді;
  • Ұсынымды құруға арналғасұратуда есептелетін бағандар, агрегацияланатын функциялар және DISTINCT, GROUP BY және HAVING жазбалары болмауы қажет;
  • Ұсынымарды құруға арналғансұратуларда екі рет бір бағанға сілтеме жасауғңа болмайды.

[WITH [CASCADED | LOCAL] CHECK OPTION опциялар

Өзгермелі ұсыным үшін ұсынымдардағы жолдардың жоғалуын алдыналатын WITH CHECK OPTION жазбасын көрсетуге болады. Егер бұ жазба көрсетілген болса, онда кестені құруға пайдаланатынсұратуда көрсетілген предикат кестелерге өзгерістер енгізгенде тексеріледі. Егер предикат TRUE мәнін қайтармайтын болса ондаөзгерістер енгізілмей қалады.

Мысалы егерсұрату келесі оператормен құрылған болса

CREATE VIEW v_tbl1 AS

(SELECT f1,f2, f3 FROM tbl1 WHERE f2>100)

WITH CHECK OPTION;,

Онда жол қосылмайды:

INSERT INTO v_tbl1 (f1,f2,f3)

VALUES (1,50,'abc');

WITH CHECK OPTION жазбасы:

  • WITH CASCADED CHECK OPTION – барлық ішкісұратуларда предикат тексеріледі;
  • WITH LOCAL CHECK OPTION – аталған ұсынымды құруға арналған сұратуларда ғана предикат тексеріледі;

Келесі операторлармен құрылған ұсынымдар үшін

CREATE VIEW v_1 AS

(SELECT f1,f2, f3 FROM tbl1 WHERE f2>100);,

CREATE VIEW v_2 AS

(SELECT f1,f2, f3 FROM v_1 WHERE f2>50)

WITH LOCAL CHECK OPTION;,

Жолдар қосылады:

INSERT INTO v_2 (f1,f2,f3)

VALUES (1,30,'abc');.

Бұл жол негізгі кестеге қосылады да, ұсынымда көрсетілмейді..

Ағым бойынша WITH CHECK OPTION үшін CASCADED жазбасы қолданылады деп болжанады.

Деректер типі

Деректер қорының әр бағанының бағанды құру кезінде көрсетілетін өз типі бар.

В стандарте SQL-92 определены следующие типы:

  • смволды:
    • CHARACTER (len);
    • CHAR (len);
    • CHARACTER VARYING (len);
    • CHAR VARYING (len);
    • VARCHAR (len);
    • NATIONAL CHARACTER (len);
    • NATIONAL CHAR (len);
    • NCHAR (len);
    • NATIONAL CHARACTER VARYING (len);
    • NATIONAL CHAR VARYING (len);
    • NCHAR VARYING (len);
  • екілік:
    • BIT (len);
    • BIT VARYING (len);
  • сандық:
    • NUMERIC;
    • DECIMAL;
    • DEC;
    • INTEGER;
    • INT;
    • SMALLINT;
    • FLOAT;
    • REAL;
    • DOUBLE PRECISION;
  • Уақыт\мерзім:
    • DATE;
    • TIME;
    • TIME WITH TIME ZONE;
    • TIMESTAMP;
    • TIMESTAMP WITH TIME ZONE;
  • аралық:
    • INTERVAL.

Көп жағдайларда жақшаларда көрсетілетін типтер параметрін қажет болған жағдайларда ескермеуге болады.

Символдық типтер үшін CARACTER SET { set_name | using_form} жазбасы көсетілуі мүмкін, қолданылатын символдар жиынын орнатады.

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

  • CHAR (num) – ұзындығы бекітілген мәтіндік жол ( дискіде барлық жолға орын босатылады );
  • VARCHAR (num) – num символдан көп емес айнымалы ұзындығы бар мәтіндік жол ( дискіде жол ұзындығына қатысты орын босатылады);
  • INTEGER немесе INT - бүтін;
  • NUMERIC – жылжымалы нүктелі сан, үтірден кейінгі белгілер санын анықтау мүмкіндігі;
  • DECIMAL немесе DEC – жылжымалоы нүктелі сан, дәлдіктің минималды мәні көрсетіледі;
  • FLOAT – жылжымалы нүктесі бар сан, дәлдікті беруге мүмкіндік береді (үтірден кейінгі белгілер саны);
  • REAL –жылжымалы нүктелі сан, жүзеге асу барысында дәлдік анықталады;
  • DATE – мерзім типі;
  • TIME WITH TIME ZONE – уақыт типі, аумақтық уақыттың жылжуын сипаттаушы өрісі бар.

Уақыт пен мерзімді сипаттайтын деректер типі бірнеше өрістерден тұрады. DATE типінде YEAR, MONTH және DAY өрістері бар. TIME типінде HOUR, MINUTE және SECOND өрістері бар.

TIMESTAMP типінде мерзім және уақыт өрістері бар.

TIMESTAMP типінің мәні келесі түрде жазылады: '10-12-2003 08:30:00'. Мерзімді жазуда тізбектелу реті компьютерде анықталады.

Мерзім/уақыт функциялары

Мерзім\уақыт типтрі бар деректермен жұмыс істеу үшін SQL тілінде келесі функциялар қарастырылады:

CURRENT_TIME – ағымдағы уақытты анықтайды;

CURRENT_DATE – ағымдағы мерзімді анықтайды;

CURRENT_TIMESTAMP – ағымдағы мерзім мен уақытты анықтайды.

Мысалы:

INSERT INTO tbl1 (f1,f2,f3,f4)

VALUES (1,100,'abc', CURRENT_DATE);