Номер
Клиент
__
[Товар
Количество Дата
MULTIPLY
►
140 ИП Газимова К.К.
[Конфеты "Коровка"
15 09.01.2013
1350
45 Федорова Д.С.
Конфеты "Коровка"
50 02.04.2013
4500
156 ИП Газимова К.К.
Конфеты "Мишка"
30 02.04.2013
4500
200 Лесовая В.Н.
Мармелад "Кроха"
20 07.02.2013
1700
85 Лесовая В.Н.
Мука пшеничная
50 02.04.2013
2500
254 Лесовая В.Н.
Сахар
50 01.02.2013
3000
144 Таран О.С.
Сосиски молочные
30 01.04.2013
7800
162 Федорова Д.С.
Халва
10 15.02.2013
450
112 ООО "Ромашка"
Халва
40 15.02.2013
1800
12.5
сурет. Есептелетін жолды құру
кестенің бағанында, бірақ тек FROM сөйлемінде тізімделген кестенің
немесе сұраудың баған атауын ғана пайдаланыңыз. Күрделі өрнектерді
салу жақшаларды пайдаланады. Алынған кестенің баған атауларын
айқын көрсете аласыз, олар үшін AS фразасы қолданылады. Келесі
сұраныс сатылым жылы мен айы бар өнімдер тізімін көрсетеді:
SELECT
Т.Тауар, Year(n.Күні) AS Жыл, Month(n.Күні)
AS
Ай
FROM
ТАУАРЛАР Т ,
САТЫЛЫМДАР П WHERE Т .
Тауар=П.Тауар
Сұрау Year және Month айын белгілеу үшін кірістірілген
функцияларды Жыл және Айды пайдаланады.
Агрегат (қорытынды) функциялары деректер жинағының барлық
жазбаларында операциялардың жалпы мәндерін есептеуге арналған.
Келесі функциялар жиынтыққа қатысты:
■
COUNT (<
өрнек>) — SQL-сұрауының шығыс жиынтығындағы
жазбалардың санын анықтайды (деректердің нәтиже жинағының
барлық жазбаларындағы өрнектің мәндерінің саны);
■
SUM(<
өрнек>) — өрнек мәндерін қорытады;
■
AVG(<
өрнек>) — бұл функция таңдалған жазбалардың белгілі бір
өрісінде сақталатын мәндердің жиынтығының орташа мәнін
есептеуге мүмкіндік береді. Бұл орташа арифметикалық мән, яғни
олардың санына бөлінетін мәндердің сомасы;
■
МАХ (<өрнек>) — ең жоғарғы мәнді анықтайды;
■
МШ(<өрнек>) — ең төменгі мәнді анықтайды.
Барлық осы функциялар бір мәнде жұмыс істейді
кестенің бағаны (бірнеше кестенің бағандары) немесе арифметикалық
өрнекпен бірге бір мәнді қайтарады. Кез келген функциялардың
нәтижелерін есептеу кезінде барлық бос мәндер алдымен жойылады,
содан кейін қажетті операция қолданылады
256
бағанның қалған ерекше мәндеріне ғана. COUNT (*) нұсқасы - COUNT
функциясын пайдаланудың ерекше жағдайы, оның мақсаты бос,
қайталанатын немесе кез келген басқа мәндер бар-жоқтығына
қарамастан алынған кестенің барлық жолдарын санау. Келесі сұраудың
нәтижесінде САТЫЛЫМДАР кестесіндегі жолдар саны есептеледі:
SELECT Count (*) AS
Сатылым саны FROM
САТЫЛЫМДАР
Егер сіз бірдей жазбалар тобынан біреуін қарастыруыңыз қажет
болса, онда жақшадағы өрнек кілт сөзді қамтиды DISTINCT:
COUNT(DISTINCT
Тұтынушы)
DISTINCT
Бұл MIN және MAX функциялары үшін мағынасы жоқ,
бірақ оны пайдалану SUM және AVG функцияларының нәтижелеріне
әсер етуі мүмкін, сондықтан әр нақты жағдайда қатысуы керек екенін
алдын-ала ойластырған жөн. Сонымен қатар, DISTINCT кілт сөзі кез
келген сұрауда бірнеше рет көрсетілуі мүмкін.
Мысалы, келесі қоймада тауарды сатып алатын сатып алушылар
санын есептейді:
SELECT COUNT(DISTINCT
САТЫЛЫМДАР. КЛИЕНТ) AS
Тұтынушылар саны
FROM
САТЫЛЫМДАР
Басқа мысалда бір күнде жіберілетін тауарлардың жалпы құны
есептеледі:
SELECT SUM^.
Саны*Т. Құны) AS Жалпы Бағасы FROM
САТЫЛЫМДАР П,ТАУАРЛАР Т
WHERE
(П. тауар. Тауар) AND (П. Күні=' 02.04.2013')
COUNT, MIN, MAX функциялары сандық және сандық емес
өрістерге де қолданылады. SUM және AVG функциялары сандық
өрістер жағдайында ғана пайдаланылуы мүмкін.
Кейде сұраулар сұрауларда талап етіледі, яғни сіз барлық деректер
жиынтығына емес, белгілі бір топтар үшін функцияны орындау
нәтижесін аласыз (мысалы, белгілі бір күн үшін әрбір өнім үшін әрбір
клиент үшін жиынтықты есептеңіз). Осы мақсатта SELECT операторы
GROUP BY ережесін қолданады. GROUP BY қатысатын сұрауды
шақырады
257
Сұрауды топтастыру, себебі ол SALES операциясының нәтижесі ретінде
алынған деректерді топтастырады. Әрбір жеке топ үшін бір жиынтық
жол жасалады. SALES сөйлемінен кейін топтағы мәндерді өзгертпейтін
сол бағандар тізімге енгізіледі, яғни олар топтауға қатысады. Мысалы,
SALES кестесіндегі тауарларға арналған сұранысты топтастыру арқылы
SALES сөйлеміндегі күнді көрсете алмайсыз, себебі сатудың әртүрлі
күндері әр өнімге сәйкес келуі мүмкін және сондықтан мұндай сұрау
қате болады:
SELECT
П.Тауар, П.Күні SUM(n. Саны)
FROM
САТЫЛЫМДАР П
GROUP BY
П.Тауар
Сатылған тауарлардың жалпы санын алу үшін (12.6-сурет) сұрауды
қолданыңыз:
SELECT
П. Тауар, SUM^. Саны)
FROM
САТЫЛЫМДАР П
GROUP BY
П. Тауар
Ал әрбір күн үшін сатылатын тауарлардың санын алу үшін, алдыңғы
сұрауды келесідей түзету қажет:
SELECT
П. тауар П. Күні, SUM^. Саны)
FROM
САТЫЛЫМДАР П
GROUP BY
П. Тауар, П. Күні
Басқаша айтқанда, SALES сөйлемі тізімінде тізілген барлық өріс
атаулары, жиынтығы функциясында баған атауы пайдаланылған
жағдайды қоспағанда, GROUP BY сөйлемінде болуы керек. Сонымен
қатар GROUP BY сөйлемінде SALES сөйлемінде жоқ бағандар болуы
мүмкін.
Сұраулардағы топтауды қолданудың тағы бір мысалы - әрбір
клиенттің сатып алуларының қосалқы шоты:
[
Товар
SUM
►
Конфеты "Коровка"
65
Конфеты "Мишка"
30
Мармелад "Кроха"
20
Мука пшеничная
50
Сахар
50
Сосиски молочные
30
Халва
55
12.6
сурет. Топтық сұранысты орындау нәтижелері
258
Достарыңызбен бөлісу: |