Количество Дата
Клиент
Город
►
50101.02.2013
Лесовая В.Н.
Москва
50 02.04.2013
Лесовая В.Н.
Москва
50 02.04.2013
Федорова Д.С.
Санкт-
б
12.8
сурет. Салынған сұраныстар нәтижелері
SELECT
П. Саны, П.Күні, К.Тұтынушы, К.Қала FROM
САТЫЛЫМДАР П, ТҰТЫНУШЫЛАР К WHERE (П.Тұтынушылар =
К.Тұтынушылар)
AND
П.Саны =(SELECT MAX(Саны) FROM САТЫЛЫМДАР)
Алдыңғы мысалмен салыстырғанда, сұрауда SALES кестелері мен
CLIENTS
ішкі қосылымы бар.
Ішкі сұраныстың тағы бір мысалы - өнімнің жалпы орташа мәнінен
асатын және ауытқу мөлшерін анықтайтын сатып алу күндерін анықтау
(12.9-
сурет):
SELECT
Күні, Саны,
Саны-(SELECT AVG(Саны) FROM САТЫЛЫМДАР)
AS
ауысу FROM САТЫЛЫМДАР WHERE Саны>
(SELECT AVG(
Саны)FROM САТЫЛЫМДАР)
Орташа деңгейден ауытқу мөлшерін есептеу, және мерзімдері
туралы ақпаратты іріктеу үшін сыртқы SELECT есепте пайдаланылатын
жалпы сату барлық фактілер бойынша тауарлар санының орташа мәні
болып табылады сұрау салынған, бұл мысалда, нәтижесі.
Жиі ұсыныстар WHERE немесе HAVINGсалыстырғанда тиіс мән,
бір емес, білдіреді, бірақ бірнеше мағынасы - аралық уақытша кестесін
қалыптастыру салынған сауалдар.
атап айтқанда, өз кезегінде көптеген қолданылады операциялар
негізінде операцияларды сауалдар, жағыңыз:
| Дата
Количество
Отклонение
02.04.2013
50
20
02.04.2013
50
20
15.02.2013
40
10
01.02.2013
50
20
12.9
сурет. Қосымшаның нәтижесі
262
[NOT] IN;
{ALL | SOME | ANY};
[NOT] EXISTS;
IN операторы белгілі бір мәнді мәндер тізіміне салыстырып,
салыстырылған тізімде мән бар ма немесе салыстырылатын мән
тексерілген тізімнің элементі емес екенін тексеру үшін пайдаланылады.
Төмендегі мысал өнімнің ең көп лотын сатып алған
тұтынушылардың сату тізімін көрсетеді:
SELECT
П.*
FROM
САТАЛЫМДАР П WHERE П. Тұтынушы IN
(SELECT
П1. Тұтынушы FROM САТЫЛЫМДАР П1
WHERE
П1. Саны =
(SELECT MAX (
П2. Саны ) FROM САТЫЛЫМДАР П2))
Бұл сұрақтың логикасын түсіндірейік. Біріншіден, Саны бағандағы
ең үлкен мән анықталады:
SELECT MAX (
П2. Саны ) FROM ПРОДАЖИ П2
Келесі сұраудан кейін осы сатып алуды жасаған тұтынушылар
анықталады:
SELECT
П1. Тұтынушы FROM САТЫЛЫМДАР П1
WHERE
П1. Саны =
(SELECT MAX (
П2. Саны) FROM САТЫЛЫМДАР П2)
Содан кейін негізгі сұраныс SALES кестесінен табылған
клиенттермен IN операторымен, яғни CUSTOMER өрісінің мәні
кірістірілген сұрауларда алынған жиынтыққа тиесілі SALES кестесінен
алынған деректерді ғана алынған деректер жиынына түсетін барлық
жазбаларды таңдайды (12.10-сур.).
Номер
|Клиент
|
Товар
Количество Дата
►
45
1
Федорова Д.С.
конфеты "Коровка"
50 02.04.2013
162 Федорова Д.С.
Халва
10 15.02.2013
200 Лесовая В.Н.
Мармелад "Кроха"
20 07.02.2013
85 Лесовая В.Н.
Мука пшеничная
50 02.04.2013
254 Лесовая В.Н.
Сахар
50 01.02.2013
12.10
сурет. Тауарлардың барынша көп мөлшерін сатып алатын тұтынушылардың
сатып алу тізімі
263
NOT IN пайдаланған кезде салыстыру мәні кірістірілген сұрауларда
алынған жиынтыққа кірмейтін жолдарды таңдауға болады.
ANY
және ALL деген кілт сөздерді сандардың бір бағанын
қайтаратын ішкі есептермен пайдалануға болады.
Сәйкестендірілген мәннің және төменгі сұрау арқылы қайтарылатын
мәндердің арақатынасы ALL және SOME (ANY):
■
ALL
дегеніміз, салыстырмалы мәннің төменгі сұрау арқылы
қайтарылған барлық мәндермен сәйкес келетін коэффициенттің мәні
болған жағдайда, яғни, төменгі сұраудың нәтижелендірілген
бағанындағы барлық мәндер үшін дұрыс екендігін көрсетеді;
■
SOME
(немесе ANY) - іздеу шарты салыстырылған мәннің төменгі
сұрау арқылы қайтарылған кем дегенде бір мәнмен дұрыс қатынасында
болғанда, яғни ол төменгі сұраудың нәтижелендірілген бағанында кем
дегенде біреуіне қанағаттандырылады. Егер төменгі сұрау нәтижесі
бойынша бос мән алынды, онда ALL сөзі үшін салыстыру шарты
орындалды деп есептеледі және кілт сөзді ANY - аяқталмаған. SOME
кілт сөзі ANY сөзбен синоним болып табылады.
Жоғарыда келтірілген мысалдарды келтірейік. Тауар сатылатын
бірліктердің саны орташа мәннен асатын тауарларды сату фактілерінің
барлығын анықтаңыз:
SELECT * FROM
САТЫЛЫМДАР
П1 WHERE П1. Саны>ALL
(SELECT AVG(
П2. Саны)
FROM
САТЫЛЫМДАРП2
GROUP BY
П2.Тұтынушы )
Және HAVING сөйлемін және ALL кілт сөзін пайдаланудың тағы
бір мысалы. Ең көп тауарларды сатып алған клиент туралы ақпаратты
шығарып алу керек SELECT К.*
FROM
ТҰТЫНУШЫЛАР К
WHERE
К.
Тұтынушы =
(SELECT
П.Тұтынушы FROM САТЫЛЫМДАР П
GROUP BY
П. Тұтынушы HAVING SUM^. Саны) >=
ALL (SELECT SUM (
П1. Саны)FROM
САТЫЛЫМДАРП1 GROUP BY П1. Тұтынушы))
264
Достарыңызбен бөлісу: |