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;
Барлық SQL тілін салыстыру операцияларында үшмәнді логика (3VL) пайдаланылады.. WHERE жазбасымен көрсетілетін предикат келесі мәндердің бірін пайдалану керек: TRUE, FALSE немесе UNKNOWN. UNKNOWN мәні NULL мәнін кез келген мәнмен салыстырғанда, NULL өзімен де, орындалады.
Предикат салыстыруды орындайтын бір немесе бірнеше өрнектерге ие болады. өрнектерде кесте бағандары аттары, агрегациялау функциялары, ішкі SQL айнымалылары, модульды SQL параметрлері қатыса алады.
Стандартты салыстыру операторларынан басқа =, <>, >, <, >=, <= сияқты, басқа операторлар да қолданылуы мүмкін:
x BETWEEN y AND z
өрнекке эквивалентті
(x<=z) AND (x>=y).
x IN (a,b,c).
x LIKE 'abc'.
x IS NULL.
Салыстыру нұсқасы |
Предикат |
||
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 тілінің келесі функциялары жатады:
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 жазбасында келесі біріктіру операторларын пайдалануға болады:
Ішкі бірігу (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;