3. SQL тілінің құралдары арқылы сұратулар құру


SELECT операторы

SELECT деректер қорына сұрату жасауға мүмкіндік береді. Бұл операторды орындау нәтижесінде ДҚБЖ нәтижелік жиын пайда болады. Егер бұл оператор деректер қорымен қатынастың интерактивті күйінде енгізілген болса, онда нәтиже ағымдағы терезеде кесте түрінде беріледі. Төмендегі 3.1. суретінде SELECT операторының орындалу мысалы көрсетілген, dept кестесінің барлық мәліметтерін шығару.

Сурет 3.1.SELECT операторының орындалуы

Егер SELECT операторы құралда басқа программалау тілінде орындалатын болса, құрал жадысында немесе серверде нәтижелік жиын пайда болады, содан кейін нәтижелік жиыннан құрал мәліметтерді өзінің айнымалыларына айналдырады.

SELECT операторы SQL92 стандартында келесі формальды сипаттауларға ие:

Листинг 3.1. SELECT операторының формальды сипатталуы (html, txt)

Сұратуды орындау үшін қатысатын кестелердің бәріне SELECT жеңілдігі қажет, сұратулар арқылы құрастырылатын мәндерді анықтайтыне өрнектер тізімі көрсетіледі. Ең қарапайым жағдайда өрнектер тізімі кестелер өрістерінің тізімі болып табылады. Егер барлық өрістердің мәндерін шығару қажет болса, онда өрістер тізімінің орнына * символын жазу керек. Мысалы:

SELECT * FROM tbl1;

Өрістің аты кесте атынан кейін нүктеден кейін жазылады. Мысалы:

SELECT tbl1.f1, tbl2.f1 FROM tbl1, tbl2;

  • FROM жазбасы мәліметтерді алуға пайдаланатын бір немесе бірнеше кестені не ішкі сұратуларды анықтайды.
  • INTO жазбасы тек қана ішкі SQL қолданылады, сұратулар нәтижесі жазылатын айнымалыларды пайдалады. Сонымен қатар қалыптасқан нәтижелік жиын тек қана бір жолға ие болады.
  • WHERE жазбасы нәтижелік жиында құруға пайдаланатын барлық жолдар қанағаттанатын шартты анықтайды.

Барлық SQL тілін салыстыру операцияларында үшмәнді логика (3VL) пайдаланылады.. WHERE жазбасымен көрсетілетін предикат келесі мәндердің бірін пайдалану керек: TRUE, FALSE немесе UNKNOWN. UNKNOWN мәні NULL мәнін кез келген мәнмен салыстырғанда, NULL өзімен де, орындалады.

Предикат салыстыруды орындайтын бір немесе бірнеше өрнектерге ие болады. өрнектерде кесте бағандары аттары, агрегациялау функциялары, ішкі SQL айнымалылары, модульды SQL параметрлері қатыса алады.

Стандартты салыстыру операторларынан басқа =, <>, >, <, >=, <= сияқты, басқа операторлар да қолданылуы мүмкін:

  • BETWEEN – егер мән көрсетілген диапазонда орналасқан болса TRUE қайтарады. Мысалы:

x BETWEEN y AND z

өрнекке эквивалентті

(x<=z) AND (x>=y).

  • IN – тізімде көрсетілген мәндердің бірімен сәйкес келеді, мысалы:

x IN (a,b,c).

  • LIKE - көрсетілген символдар ішкі жолымен сәйкесетін мәндерге TRUE қайтарады, мысалы:

x LIKE 'abc'.

  • IS NULL – егер мән NULL болса, TRUE қайтарады. Бұл предикат тек TRUE немесе FALSE мәндерін қайтарады. Мысалы:

x IS NULL.

  • EXISTS – егер онда көрсетілген ішкі сұратуда тым құрығанда бір жол болған жағдайда TRUE мәнін қайтарады, мысалы:
  • SELECT * FROM tbl1 t_out
  • WHERE EXISTS (SELECT * FROM tbl1 t_in
  • WHERE t_in.f1= t_out.f1).
  • UNIQUE – егер онда көрсетілген ішкі сұрату бірдей жолдарға ие болмаған жағдайда TRUE мәнін кайтаратын уникальды предикат
  • MATCH – егер бөлшектік сәйкесуде салыстырушы жолдың барлық мәндері TRUE немесе салыстырушы жолға сәйкес келетін тым болмағанда ішкі сұрату бір жолы болған жағдайда TRUE мәнін қайтаратын сәйкестік прдикаты.
  • OVERLAPS – егер салыстырушы уақыт аралығы басқа көрсетілген уақыттарды жаба алатын болса TRUE мәнін қайтаратын жабу предикаты. Салыстырушы мәліметтер типі DATETIME немес болуы мүмкін (тек қана екінші мән үшін).
  • SOME, ANY немес ALL – көлемдік салыстыру прдикаттары, олар үшін келесі ережелер бар:

Салыстыру нұсқасы

Предикат

SOME

ANY

All

Жол мәндерінің конструкторының ішкі сұрату ретінде алынған жолдар жиыны әр жолымен салыстыру нәтижесі, TRUE

TRUE

TRUE

TRUE

Ішкі сұратуды орындау нәтижесі салыстыратын долдарға ие

FALSE

FALSE

TRUE

Жол мәндерінің конструкторының ішкі сұрату ретінде алынған жолдар жиыны әр жолымен салыстыру нәтижесі, FALSE

FALSE

FALSE

FALSE

Жол мәндерінің конструкторының ішкі сұрату ретінде алынған жолдар жиыны әр жолымен салыстыру нәтижесі жоқ дегенде біреуі TRUE

TRUE

TRUE

UNKNOWN

Мысал ретінде сұрату жолын жақша ішінде, ал ішкі сұрату жолын пробелмен белгілейік. Келес предикат TRUE мәнін қайтарады:

(10, 1)> ANY (12, 2 0, NULL 5, 20),

Ішкі сұратудың бірінші жолы шартты қанағаттандырады.. Ал

(NULL, NULL) = ANY (12, 2 NULL, NULL 5, 20)

предикаты UNKNOWN мәнін қайтарады, себебі NULLді NULLмен салыстыру UNKNOWN ибереді.

(10, 1)> ALL (12, 0 0, NULL 5, 20)

Предикаты FALSE мәнін қайтарады, себебі (10,1) жолын ішкі сұрату әр жолымен салыстырған кезде FALSE мәнін қайтарады.

Агрегациялау функциясы

SELECT операторының GROUP BY жазбасы агрегациялау функциясы орындалатын жолдар тобын анықтауға пайдаланады. Егер SELECT операторында GROUP BY жазбасы көрсетілген болса онда нәтижелік жиынды анықтау тізіміндегі бағандар аты барлығы агрегациялау функцияларымен көрсетілуі қажет, себебі нәтижелік жиынға әр топ үшін берілген жолдар тобын агрегациялау нәтижесінде алынған мәнге ие тек қана бір жол қосылады.

Агрегациялау функцияларына SQL тілінің келесі функциялары жатады:

  • COUNT - ALL немесе DISTINCT жазбасын ескере отырып және NULL көрсеткішін ескерместен барлық бағандар мәнін есептеу.
  • COUNT (*) – топтағы барлық бағандар санан есептеу.
  • AVG – орта мәнін анықтау.
  • SUM – топтың барлық міндерінің қосындысын есептеу. Егер алынған мән қосылатын мәліметтер типі шектеуінен асып кеткен болса, онда SQL-операторының орындалу қатесі көрсетіледі
  • MAX – топтаға ең үлкен мәнді анықтау.
  • MIN – топтағы ең кіші мәнді анықтау.

SELECT операторының HAVING жазбасы WHERE ұқсас предикатты анықтайды, агрегациялау функциясы нәтижесінде алынған жолдарға қолданылады.

Топтарды пайдалану арқылы таңдау мысалын көрсетейік. dno бағаны тек қана үш мәнге ие 11, 22 және 33. Әр үш топ үшін f2 бағанының минималды және максималды мәні бар:

SELECT dno, MIN(f2), MAX(f2) FROM tbl1 GROUP BY dno;

Бұл SQL-операторының орындалу нәтижесі келесі жолдардың құрылуы болады:

Топтарды пайдаланып және қосымша шектеулер қолданып таңдағанда MAX(f2) бағаны мәндері:

SELECT dno, MIN(f2), MAX(f2) FROM tbl1 GROUP BY dno HAVING MAX(f2) < 1000;

Бұл SQL-операторының орындалу нәтижесінде екі жолға ғана қайтарылады - бірінші және соңғы:

Нәтижелік жиынды реттеу

ORDER BY жазбасы ORDER BY жазбасынан кейінгі тізімді көрсетілген бағандар мәніне сәйкес орындалатын нәтижелік жиынды ретке келтіруге арналған. Бастапқыда бірінші көрсетілге баған, кейңн екінші т.с.с. ретке келтіріледі. Ретке келтіруде ASC (өсу ретімен) немесе DESC (кему ретімен) опциясын көрсетуге болады.

Мысалы:

SELECT f1,f2 FROM tbl1 ORDER BY f2;

Үлгі бойынша кесте құру

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

Мысалы:

CREATE TABLE tbl2 LIKE tbl1;.

Кестелерді қосу

Бірдей кестелерді қосу

Аттары бірдей бағандары бар кестелерді немесе кестені өз өзімен байланыстыру үшін алиастар қолданылады, FROM жазбасында кесте атынан кейін пробелден кейін көрсетіледі.

Мысалы:

select t1.f1, t1.f2, t2.f1, t2.f2

from tbl1 t1, tbl1 t2

where t1.f1= t2.f2;

Қиылысқан байланыстыру (CROSS JOIN)

Егер FROM жазбасы бірден көп кесте немесе ішкі сұрату анықтайтын болса ондар олар барлығы байланысады. Ғым бойынша біріккен кесте қиылысқан байланысуды ұсынады (CROSS JOIN), сонымен қата декарттық көбейтінді деп аталады (Cartesian product).

Келесі екі оператор эквивалентті:

SELECT tbl1.f1, tbl2.f1 FROM tbl1, tbl2;

SELECT tbl1.f1, tbl2.f1 FROM tbl1 CROSS JOIN tbl2;

tbl1 және tbl2 кестелері SELECT операторымен бейнеленетін жолдарға ие болсын 3.2 суретіндегі:

Сурет. 3.2. tbl1 және tbl2 кестелер жолдары

tbl1 және tbl2 кестелерінің SELECT операторымен қиылысып байланысуы 3.3 суретте көрсетілген нәтижелік жиын ұсынады.

Сурет 3.3.қиылысып байланысу (cross JOIN)

Осылай қиылысып байланысу барлық жолдар мүмкін комбинацияларымен нәтижелік жиын құрайды.

Біріктіру схемада көрсетілмеген мәліметтерді уақытша біріктеруге мүмкіндік береді (атан аналық және сыртқы кілттермен).

SELECT операторының FROM жазбасында байланысатын кестелер үтір арқылы жазлады.

FROM жазбасында келесі біріктіру операторларын пайдалануға болады:

  • CROSS JOINқиылыстырып біріктіру.
  • NATURAL JOIN- шынайы біріктіру. SQL стандарты бұл біріктіруді барлық бір есімді бағандар бойынша кестелерді байланыстыру нәтидесі ретінде анықтайды:
    • INNER JOIN – ағымда қолданылатын ішкі бірігу.
    • LEFT JOIN [OUTER]сол сыртқы бірігу.
    • RIGHT JOIN [OUTER]оң сыртқы бірігу.
    • FULL JOIN [OUTER]толық сыртқы бірігу.
  • UNION JOINбірігуді байланысьыру.

Ішкі бірігу (INNER JOIN)

Ішкі табиғи байланыста біріктірілетін бағандар мәні сәйкес келетін жолдар ,ана топтастырылады. Екі кестенің ішкі бірігу нәтижесі 3.4 суретте көрсетілген

Сурет 3.4.ішкі біріктірілу (INNER JOIN)

Сыртқы сол біріктірілу LEFT JOIN [OUTER]

Сыртқы сол біріктірілуде нәтижелік жиынға сол кестенің барлық жолдары таңдалады (бірінші көрсетілетін). Біріктірулер кезінде бағандар мәндер сәйкескен жағдайда екінші кестенің мәндері сәйкес жолдағы нәтижелік жиынға қосылады. Сәйкестіктер болмаған жағдайда екінші кетенің мәні ретінде NULL көрсетіледі.

Сурет 3.5.Сыртқы сол бірігу LEFT JOIN [OUTER]

Сыртқы оң бірігу RIGHT JOIN [OUTER]

Сыртқы сол біріктірілуде нәтижелік жиынға оң кестенің барлық жолдары таңдалады (екінші көрсетілетін). Біріктірулер кезінде бағандар мәндер сәйкескен жағдайда бірінші кестенің мәндері сәйкес жолдағы нәтижелік жиынға қосылады. Сәйкестіктер болмаған жағдайда бірінші кетенің мәні ретінде NULL көрсетіледі.

]Сурет. 3.6. сыртқы оң бірігу RIGHT JOIN [OUTER]

Толық сыртқы бірігу FULL JOIN [OUTER]

Сыртқы толық біріктірілуде нәтижелік жиынға оң және сол кестенің барлық жолдары таңдалады (екінші көрсетілетін). Біріктіруші мәндер сәйкескен жағдайда жол оң жақтағы және сол жақтағы кестелердің мәніне ие болады. Кері жағдайда кестелер бағандарында жоқ мәндер орнына NULL қайтарылады.

Сурет 3.7.Толық ысртқы бірігу FULL JOIN [OUTER]

Көрсетілген бағандар бойынша біріктіру

USING жазбасы көрсетілген бағандар бойынша табиғи біріктірулерді орындайды, бірнеше бір есімді бағандары бар кестені дұрыс түрде қосуға мүмкіндік береді. Біріктірулер жүретін бағандар тізімі USING. Кейін көрсетіледі.

Мысалы:

select t1.f1, t1.f2, t2.f1

from tbl1 t1 join tbl2 t2 using f2;

Предикат бойынша біріктіру

Көрсетілген предикат бойынша табиғи бірігу ON жазбасының көмегімен орындалады. Нәтижелік жиынға берілген шартты қанағаттандыратын жолдар жазылады. Бұл біріктіру

Мысалы:

select t1.f1, t1.f2, t2.f1, t2.f2

from tbl1 t1 join tbl2 t2

on t1.f1= t2.f2;