«1» бағасын алған студенттер тізімін шығару.
SELECT id_st, mark
FROM mark_st
WHERE id_st = 1
Емтиханнан ең болмағанда екілік немесе үштік алған студенттердің
кодын шығару.
WHERE ұсынысына, қарапайым бағдарламалау тілдеріндегі сияқты,
арифметикалық салыстыру операторларын (<, >, және т.б.) және логикалық
операторларын (AND, OR, NOT) қолданатын өрнекетерді жазуға болады.
SELECT id_st, mark
FROM mark_st
WHERE ( MARK >= 2 ) AND ( MARK <= 3 )
SQL тілінде шарттарды құрастыру үшін салыстыру операторлары және
логикалық операторлар қатарында арнайы операторлар қатары да бар, ережеге
сәйкес, олардың басқа тілдерде ұқсас операторлары жоқ. Міне мына
операторлар:
1)
IN – біршама мәндер жиынына кіру.
2)
BETWEEN – біршама мәндер диапазонына кіру.
54
3)
LIKE – үлгімен сәйкестігіне тексеру.
4)
IS NULL – анықталмаған мәндерге тексеру.
IN операторы мәндердің біршама мәндер жиынына кіруді тексеру үшін
қолданылады. Сонымен сұраныс
SELECT id_st, mark
FROM mark_st
WHERE mark IN (2,3)
Жоғарыда көрсетілген сұраныстағыдай, нәтижені береді (ең болмағанда
емтиханнан бір екілік немесе үштік алған, барлық талапкерлердің
идентификаторларын шығарады).
BETWEEN операторын қолданып, сондай нәтижеге қол жеткізуге
болады:
SELECT id_st, mark
FROM mark_st
WHERE mark BETWEEN 2 AND 3
Тектері А әрпінен басталатын, барлық студенттердің тізімін шығару.
Бұл жағдайда LIKE операторын қолданған ыңғайлы.
LIKE операторын тек символдық өрістерге ғана қолдануға болады және
өріс мәні үлгіге сәйкес келе ма жоқ па соны орнатады. Үлгі арнайы
символдардан тұруы мүмкін:
_ (астын сызу символы) – кез келген дара символдың орнын басады;
% (пайыз белгісі) – символдардың кез келген саны тізбегінің орнын
басады.
SELECT id_st, surname
FROM student
WHERE surname LIKE 'А%'
Өте жиі бағандарда ең кіші мәнді, ең үлкен мәнді немесе орташа мәнді
есептеуді жүргізу қажеттілігі туып отырады. Мысалы, орташа балды есептеу
қажет. Мұндай есептеулерді жүзеге асыру үшін SQL арнайы агрегаттық
функцияларды ұсынады:
1)
MIN – бағандағы ең кіші мән.
2)
MAX – бағандағы ең үлкен мән.
3)
SUM – бағандағы мәндер сомасы.
4)
AVG – бағандағы орташа мән.
5)
COUNT – NULL-дан жақсы, бағандағы мәндер саны.
Келесі сұраныс, студенттермен емтиханда алынған, барлық балдардың
ішінен орташасын есептейді.
SELECT AVG(mark)
FROM mark_st
WHERE ұсынысы бар агрегаттық функцияларды қолдануға болады:
SELECT AVG(mark)
FROM mark_st
WHERE id_st = 100
55
Берілген сұраныс олармен тапсырылған барлық емтихандардың нәтижесі
бойынша 100 коды бар студенттің орташа балын есептейді.
SELECT AVG(mark)
FROM mark_st
WHERE id_ex = 10
Берілген сұраныс емтихандардың нәтижесі бойынша 10 коды бар
студенттің орташа балын есептейді. Қарастырылған механизмдерге қосымша
SQL тілі барлық кесте сұраныстарының нәтижесіне арналған емес, ал топ
бойынша әртүрлі мәндерге арналған агрегаттық функцияларды есептеу үшін
қуатты аппаратты ұсынады. Осы үшін SQL-де арнайы GROUP BY
құрастырылымы бар, ол мәндері бойынша топтастырылу жүргізілетін,
бағандарды көрсету үшін арналған. Мысалы, біз барлық емтихан бойынша әр
студент үшін орташа балды есептей аламыз. Ол үшін келесі сұранысты
орындау жеткілікті:
SELECT id_st, AVG(mark)
FROM mark_st
GROUP BY id_st
Осылардың барлығын, әдеттегідей, WHERE ұсынысына қиыстыруға
болады. Сонымен бірге мұнда, ДҚБЖ ішінде сұраныстың орындалуының
егжей-тегжейіне қарамай, алдымен, WHERE ұсынысының шарттарын
қанағаттандыратын, кесте жолдарын іріктеу орындалады, ал содан кейін
топтастырылу және агрегаттау жүргізіледі.
Әр студент үшін, 100 коды бар емтиханнан алынған, баға бойынша
орташа балды есептейтін, сұранысты келтірейік.
SELECT id_st, AVG(mark)
FROM mark_st
WHERE id_ex = 100
GROUP BY id_st
Топтастырылу бірден көп өріс бойынша жүргізілуі мүмкін екенін
ескерейік.
GROUP BY секциясынан тұратын, сұраныстар үшін маңызды шектеулер
бар: мұндай сұраныстар, топтастырылу жүргізілетін, бағандарды және шын
мәнінде агрегаттау нәтижелерінен тұратын, бағандарды нәтиже ретінде қосуы
мүмкін.
Қорытындыны форматтау үшін SQL-дің әртүрлі мүмкіндіктері бар.
Мысалы, мүмкін болып сұранысқа мәтіннің қосылуы табылады. Мұның қалай
жасалатынының мысалын қарастырайық:
SELECT 'Орташа балл=', AVG(mark)
FROM mark_st
WHERE id_ex = 10
Берілген сұраныстың нәтижесінде қолданушы тек жай біршама сандарды
көрмейді, ал түсіндірме мәтіндері бар сандарды көреді.
|