Сатылған тауарлардың бірліктерінің саны кем дегенде бір тауарды
сатудың орташа мәнінен асатын тауарларды сату фактілерінің барлығын
көрсетеді.:
SELECT * FROM
САТЫЛЫМДАР
П1 WHERE П1.саны>SOME
(SELECT AVG(
П2.саны)
FROM
САТЫЛЫМДАР П2
GROUP BY
П2.Тұтынушылар)
Құпия сөздер бар және тек қана сауалдар бірге пайдалану үшін
арналған EXISTS ЕМЕС. Оларды өңдеудің нәтижесі TRUE немесе
FALSE
логикалық мәні болып табылады.
Кілт сөз нәтижесі шынайы болса және үстел нәтижесінде сұранысты
қайтару кем дегенде бір сызық бар. Нәтижесінде кесте сұранысы бос
болса, нәтижесі өңдеу операция FALSE мәні болады бар. NOT EXISTS
кілт сөзі EXISTS кілт сөзіне кері қайтарылған өңдеу ережелерін
қолданады. EXISTS және NOT EXISTS кілт сөздері нәтижесінде
алынған ішкі сұрау кестесінде жолдардың болуы үшін ғана
тексерілгендіктен, бұл кестеде бағандардың ерікті саны болуы мүмкін.
кілт сөзді EXISTS пайдалана отырып, сіз тауарларды сатып алу үшін кем
дегенде бір уақыт бар, барлық клиенттер тізімін жасай аласыз:
SELECT *
FROM
ТҰТЫНУШЫЛАР К
WHERE EXISTS (SELECT
П.*
FROM
САТЫЛЫМДАР П
WHERE
К. Тұтынушы = П. Тұтынушы)
Бір сұранымда ешқандай сатып алулар жасаған клиенттердің тізімін
алу үшін сөзді енгізу қажет NOT:
SELECT *
FROM
ТҰТЫНУШЫЛАР К
WHERE NOT EXISTS (SELECT
П.*
FROM
САТЫЛЫМДАР П
WHERE
К. Тұтынушылар = П. Тұтынушы)
Егер сіз іздестіру шартында сіз ішкі сценарий қайтарылатын
кестеден тек жазбаларды таңдағыңыз келсе, анықтасаңыз
265
тек бір мән, SINGULAR сөйлемі көрсетіледі. Алдыңғы сұрауды сәл
өзгертіп, мүлде басқа нәтиже алайық:
SELECT *
FROM
ТҰТЫНУШЫЛАР
К WHERE
SINGULAR
(SELECT
П.САТЫЛЫМДАР FROM САТЫЛЫМДАР П WHERE К.
Тұтынушы =
П.Тұтынушы)
Сұраудың нәтижесі, яғни, тек бір рет өнімнің тек бір түрін сатып
барлық клиенттерінің тізімі, және сату кестеде осы клиент үшін бір ғана
жазба бар.
Жоғарыда дерекқор кестесінің ішкі байланыстарын қарастырдық.
Сіз қосылуға шартты қанағаттандыруы екі кестеден барлық жолдарды
қамтиды келген кезде ішкі байланыс пайдаланылады. Бұл жағдайда,
бірінші және екінші кестелер декарттық өнім желілерін, сондай-ақ
қосылуға жағдайын сәйкес жазбаларды таңдалған нәтижесінде деректер
жиынынан.
Қосылым кестелерінің тағы бір түрі бар - сыртқы байланыс. Бұл
ерекшелікке сәйкес FROM тармағында анықталған:
SELECT ...
FROM <
кесте1><байланыс түрі>JOIN <кесте2>
ON <
байланыс шарттары>
Сыртқы байланыс ішкі байланыстың айырмашылығы сол
кестелердің біреуінде шебері. Деректер жиынының нәтижесі басқа
кестеден жазбалардың бос жиынымен біріктіруге болатын негізгі
қосылым кестесінің жазбаларын қамтиды. Кестелердің қайсысы
қосылыс түрін анықтайды.
Сол жақ сыртқы біріктіру (LEFT) - бұл бірінші кесте мастер болып
табылатын байланыс, FROM сөйлеміндегі қосылым түрінің сол жағына.
Тиісінше, екінші кестенің жалпы бағандарында бірдей мәндері жоқ
жетекші (бірінші) кестенің жолдары деректердің нәтиже жиынына
қосылады.
Оң жақ сыртқы біріктіру (RIGHT) екінші кесте шебер
болып
табылатын кезде, FROM тармағындағы қосылым түрінің оң жағына
байланыс болып табылады. Алынған қатынас дұрыс кестенің барлық
жолдарын қамтиды.
266
Сыртқы байланыс (FULL) - жетекші кестелер барлық кестелер болғанда.
Деректер жиынтығы екі кестенің барлық жазбаларын қамтиды. Егер
бірінші кестені жазудың қосылым шартын қанағаттандыратын екінші
кестенің жазбалары болса, екі кестенің осындай жазбаларын қосудың
барлық комбинациясы алынған деректер жинағына қосылады. Әйтпесе,
бос жазбаға қосылған бірінші кестенің жазбасы деректердің нәтиже
жинағына қосылады.
Екінші жағынан, қосылым жағдайын қанағаттандыратын екінші
кестенің жазбалары үшін бірінші кестенің жазбалары бар болса, екі
кестенің осындай жазбаларын қосудың қосындысы сұрануға қосылады.
Әйтпесе, бос жазбаға қосылған екінші кестенің жазбасы алынған
деректер жинағына қосылады.
Мұны мысалмен келтірейік. ТҰТЫНУШЫЛАР және
САТЫЛЫМДАР кестелерінің сыртқы сол жаққа қосылуын жүзеге
асыратын операторды орындау осындай деректер жиынтығын құруға
әкеледі (12.11-сурет):
SELECT
САТЫЛЫМДАР.*, ТҰТЫНУШЫЛАР.*
FROM
ТҰТЫНУШЫЛАР LEFT JOIN
САТЫЛЫМДАР ON
САТЫЛЫМДАР.Тұтынушы =
ТҰТЫНУШЫЛАР.Тұтынушы
Нәтижеден көріп отырғандай, ТҰТЫНУШЫЛАР кестесінің кейбір
жолдарында қосылым күйін қанағаттандыратын САТЫЛЫМДАР
кестесінде жұпталған жазбалар жоқ. Сондықтан осы ТҰТЫНУШЫЛАР
кесте деректері бос жазбалармен бірге көрсетіледі.
I
Номер Kj
Город
клиент
I
Товар
I
Количество
I
Дата
I
Клиент 1
I
Телефон I
Е
<П1_Н>
ООО T оризонт"
0255001231521 Москва
4890605
ИП Привалов
02550102566
Санкт-
б
2560245
112
ООО "Ромашка"
Халва
40
15.02.201
ООО "Ромашка"
02550124455
Москва
3658315
ООО "Перевал"
14588989362
Тверь
221588
ИП Иванов Ф.И.
02555800055
Москва
1155488
25
Таран О.С.
Халва
5
04.01.201
Таран О.С.
36022400545
Москва
1215648
144
Таран О,С,
Сосиски молочные
30
01.04.201
Таран О.С.
36022400545
Москва
1215648
45
Федорова Д.С.
Конфеты
50
02.04.201
Федорова Д.С.
50025551005
Санкт-
4449702
162
Федорова Д.С.
Халва
10
15.02.201
Федорова Д.С.
50025551005
Санкт-
4449702
200
Лесовая В.Н.
Мармелад "Кроха"
20
07.02.201
Лесовая В.Н.
21258583218
Москва
3021402
85
Лесовая В.Н.
Мука пшеничная
50
02.04.201
Лесовая В.Н.
21258583218
Москва
3021402
254
Лесовая В.Н.
Сахар
50
01.02.201
Лесовая В.Н.
21258583218
Москва
3021402
БМСТ
55587897002
Санкт-
4353822
Дремина Е.Е.
02557872105
Москва
6582209
156
ИП Газимова
Конфеты "Мишка"
30
02.04.201
ИП Газимова
02558797876
Москва
6521588
140
ИП Газимова
Конфеты
15
09.01.201
ИП Г азимова
02558797876
Москва
6521588
12.11
сурет. Кестелердің сыртқы сол жаққа қосылу нәтижесі ТҰТЫНУШЫЛАР
және САТЫЛЫМДАР
267
Достарыңызбен бөлісу: |