SELECT
Тұтынушы, COUNT (*)
FROM
САТЫЛЫМДАР
GROUP BY
Тұтынушы
WHERE сөйлемі GROUP BY-
мен бірге пайдаланылса, онда ол
алдымен өңделеді және іздеу
шартын қанағаттандыратын жолдар
ғана топтастырылады.
Мысалы, әр номинацияның
тауары сатылатын соманы анықтау
үшін (12.7-график):
[
Товар
SUM
►
Конфеты "Коровка"
5850
Конфеты "Мишка"
4500
Мармелад "Кроха"
1700
Мука пшеничная
2500
Сахар
3000
Сосиски молочные
7800
Халва
2475
12.7
сурет. Шартпен топтау сұрауын
орындаудың нәтижесі
SELECT
П. Тауар, SUM (П. Саны^. Құны) FROM
САТЫЛЫМДАР П, ТАУАРЛАР Т WHERE T.Тауар =
П.Тауар GROUP BY П. Тауар
Әрбір күн үшін сатып алушылардың санын анықтау үшін осы
сұранысты орындау қажет:
SELECT
Күні, COUNT(DISTINCT Тұтынушы) FROM
ПРОДАЖИ GROUP BY Күні
Егер нәтиже жиынынан алынған жолдардың нәтижелеріне
шектеулер қою керек болса, онда HAVING сөйлемі GROUP BY
сөйлемінен кейін пайдаланылады. Бұл шығу жиынтығын «сүзу» үшін
қосымша мүмкіндік. Алынған функцияларды SALES сөйлемі тізімінде
және HAVING сөйлемінде ғана қолдануға болатындығын ескеру керек,
ал WHERE тармағында мұндай функцияларды көрсету мүмкін емес.
Мысалы, келесі сұраныс 3000-нан астам сатылған тауарлардың тізімін
көрсетуге мүмкіндік береді.:
SELECT
П. Тауар, SUM (П. Саны^. Құны)
FROM
САТЫЛЫМДАР П,
ТАУАРЛАР Т WHERE T.
Тауар = П. Тауар GROUP BY П.
Тауар
HAVING SUM (
П. Саны^. Құны) >3000
Шығарылған тауарлардың жалпы саны 10 бірліктен кем болатын
тауарларды өткізу күнін көрсетіңіз, әр күнде бір мәміле жасалмады:
259
SELECT
Күні,COUNT(*)
FROM
САТЫЛЫМДАРWHERE
Саны>=10 GROUP BY
Күні HAVING
COUNT(*)>1
Кейде салыстыру әрекеттерін пайдаланған кезде сұрауларда
сұраныстың нәтижесін салыстыру қажет мән алдын ала анықталмайды
және бірнеше мәндер болмайды немесе басқа SELECT операторын
орындау арқылы алынады. Мұндай жағдайларда, ішкі сұраулар
пайдаланылады (кірістірілген сұраулар).
Ішкі сұрау (салынған сұраулар) уақытша кестені жасау
құралы
болып табылады, оның мазмұны сыртқы оператормен шығарылады
және өңделеді. Ішкі сұраудың мәтіні жақшада болуы керек. Ішкі
сұраныстағы SELECT мәлімдемесі келесі пішінге ие:
SELECT . . .
FROM ...
WHERE <
салыстырмалы мәні><оператор>(SELECT . . . ) Ішкі
сұранымдардың екі түрі бар.
1.
Скалярлық ішкі сұрау бір мәнді қайтарады. Негізінде ол бір мәнді
қажет ететін жерде қолданыла алады.
2.
Кестенің ішкі сұрауы мәндер жиынтығын қайтарады, яғни. Кестенің
бір немесе бірнеше бағандарының мәндері бірнеше жолға
орналастырылады. Бұл үстелге рұқсат етілген жерде мүмкін.
Сұраулар бойынша бар:
■
байланыстырылмаған — жоғары деңгейлі сұрауға сілтемелер
болмайды, олар жоғары деңгейлі сұрау үшін бір рет есептеледі;
■
байланыстырылған — негізгі сұраудағы өріс мәндеріне тәуелді
шарттар бар; жоғарғы деңгейлі сұраудың әр жолына есептеледі.
Ішкі сұраудың негізгі немесе сыртқы синтаксисі бар, сондықтан ішкі
сұрау да ішкі сұрауды қамтуы мүмкін. Тағы бір SELECT операторы
басқа SELECT операторының корпусына ендірілген сияқты.
Сыртқы SELECT операторы бүкіл операцияның соңғы нәтижесінің
мазмұнын анықтау үшін ішкі нұсқадағы нәтижені қолданады.
Ішкі сұраулар салыстыру операторынан кейін бірден
орналастырылуы мүмкін (=, <,>, <=,> =, <>)
260
WHERE тармағы және сыртқы SELECT нұсқасының HAVING тармағы.
Сонымен қатар, ішкі SELECT операторлары INSERT, UPDATE және
DELETE операторларында (жазбаларды кірістіру, жаңарту және жою)
пайдаланылуы мүмкін.
Ішкі сұранымдарға келесі ережелер мен шектеулер қолданылады::
■
ORDER BY пайдалана алмайсыз, бірақ бұл тіркесім сыртқы сұрауда
болуы мүмкін;
■
SELECT
сөйлеміндегі тізбеде олардан тұратын жеке бағандар немесе
өрнектердің атаулары бар, егер қосымша сөз EXISTS кілт сөзі болса;
■
әдепкі бойынша, ішкі сұраудағы баған атаулары FROM сөйлемінде
аты көрсетілген кестеге сілтеме жасайды. Дегенмен, сыртқы
сұраныстың FROM бөлімінде көрсетілген кестенің бағандарына
сілтеме жасауға болады, олар үшін көрсетілген баған атаулары
(яғни, кесте) немесе олардың бүркеншік аттары қолданылады;
■
егер ішкі сұрау - салыстыру операциясына қатысатын екі
операндтардың бірі болса, сұрау осы операцияның оң жағында
көрсетілуі керек.
Келесі сұрау өнімнің максималды саны сатылған күндерді
қайтарады.
SELECT
Саны, Күні FROM
САТЫЛЫМДАР
WHERE
Саны = (SELECT MAX(Саны)FROM САТЫЛЫМДАР)
Әлбетте, кірістірілген SELECT мәлімдемесі тізім емес, бір мәнді
қайтаруы керек. Ішкі ішкі сұраныс өнімнің ең көп мөлшерін анықтайды.
Сыртқы қосалқы сұрауда - тауардың саны максимумға тең болатын күн.
Айта кету керек, сөйлемді тікелей қолдануға болмайды
WHERE
Саны= Макс (Сан),
WHERE
тармақтарында
қорыту
функцияларына
рұқсат
берілмегендіктен.
Алдыңғы мысалды қиындатады. Тауардың максималды саны
қоймадан жіберілген күнді анықтаңыз және осы өнімді сатып алған
әрбір клиент үшін біз қаланы көрсетеміз (12.8-сурет):
261
Достарыңызбен бөлісу: |