SELECT билдирүүсүндө биз төмөнкү сурамдарды төрт жол менен киргизе алабыз:
WHERE сүйлөмүндөгү шартта
HAVING туюнтмасындагы шартта
FROM туюнтмасында тандоо үчүн таблица катары
SELECT билдирүүсүндөгү тилке спецификациясы катары
Келгиле, бул иштердин айрымдарын карап көрөлү. Мисалы, баасы орточодон жогору болгон бардык товарларды алалы:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА Баасы > (Өнүмдөрдөн
AVG
(Баасын) ТАНДОО)</font></font><font></font>
@A@
Керектүү продуктыларды алуу үчүн, алгач буюмдун орточо баасын алуу үчүн подсуроону аткарышыбыз керек: SELECT AVG(Price) FROM Products
.
Көбүнчө, подсуроолор маанилердин топтомун тандап алган IN оператору менен бирге колдонулат . Ал эми подсуроо баалуулуктардын керектүү топтомун бере алат. Мисалы, Буйрутмалар жадыбалында буйрутмалар бар продуктылар таблицасынан бардык өнүмдөрдү тандап алалы:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
Id
IN
(буйрутмалардан продуктунун идентификаторун тандаңыз)</font></font><font></font>
@A@
Башкача айтканда, бул учурда подсуроо Буйрутмалардан бардык өнүм идентификаторлорун тандайт, андан кийин бул идентификаторлор аркылуу өнүмдөр Товарлардан чыгарылат.
ЭМЕС операторун кошуу менен , биз Заказдар таблицасында буйрутмалары жок өнүмдөрдү тандай алабыз:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Идентификатор КИРГИЗГЕН КАЙДА (Буйрутмалардан ПродуктИди ТАНДОО)</font></font><font></font>
@A@
Белгилей кетчү нерсе, бул башка таблицалардан тиешелүү маалыматтарды алуу үчүн эң эффективдүү жол эмес, анткени JOIN операторун ар кандай таблицалардагы маалыматтарды бириктирүү үчүн колдонсоңуз болот, алар кийинки бөлүмдө каралат.
Салыштыруу операторлорунда колдонулганда, подсуроолор бир скалярдык маанини кайтарышы керек. Бирок кээде баалуулуктардын топтомун алуу зарылчылыгы бар. Салыштыруу операторлорунда колдонулганда маанилердин топтомун кайтаруу үчүн подсуроону иштетүү үчүн, анын алдында ALL , SOME же ANY операторлорунун бири болушу керек .
ALL ачкыч сөзүн колдонууда, салыштыруу операциясындагы шарт подсуроо кайтарган бардык маанилер үчүн чын болушу керек. Мисалы, баасы Apple өндүрүмүнөн төмөн болгон бардык өнүмдөрдү табалы:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА баасы < БАРДЫГЫ(КАЙДА Өндүрүүчү=
'Apple'
продуктуларынан бааны ТАҢДА.)</font></font><font></font>
@A@
Эгер бул учурда ALL ачкыч сөзүн өткөрүп жиберген болсок, катага туш болмокпуз.
Айталы, эгер бул подсуроо val1, val2 жана val3 маанилерин кайтарса, анда чыпка шарты бул маанилерди ЖАНА оператору аркылуу бириктирүүгө окшош болот:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>КАЙДА Баасы < val1 ЖАНА Баасы < val2 ЖАНА Баасы < val3
</font></font>
@A@
Ошол эле учурда, мындай өтүнүчтү башка жол менен кайра жазуу бир топ жеңил болот:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА Баасы < (ТАНДОО
MIN
(Баасы) КАЙДА Өндүрүүчүсү=
'Apple'
)</font></font><font></font>
@A@
ALL оператору кантип иштейт:
x > ALL (1, 2)
эквиваленттүүx > 2
x < ALL (1, 2)
эквиваленттүүx < 1
x = ALL (1, 2)
эквиваленттүү(x = 1) AND (x = 2)
x <> ALL (1, 2)
эквиваленттүүx NOT IN (1, 2)
ANY жана SOME операторлору менен салыштыруу операциясындагы шарт подсуроо кайтарган маанилердин жок дегенде бири үчүн туура болушу керек. Бул операторлордун экөө тең эффекти боюнча окшош, андыктан алардын бирин да колдоно аласыз. Мисалы, төмөнкү учурда биз эң кымбат Apple продуктусунан арзаныраак өнүмдөрдү алабыз:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА БААСЫ < АРНЫ (КАЙДА Өндүрүүчү=
'Apple'
)</font></font><font></font>
@A@
Ошондой эле бул суроону төмөнкүдөй кайра жазуу менен жөнөкөйлөштүрсө болоорун белгилей кетүү керек:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО * Товарлардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА баасы < (КАЙДА Өндүрүүчү=
'Apple'
продуктуларынан
MAX
(Баа) ТАНДОО)</font></font><font></font>
@A@
ANY (жана кээ бир) оператор кандай иштейт:
x > ANY (1, 2)
эквиваленттүүx > 1
x < ANY (1, 2)
эквиваленттүүx < 2
x = ANY (1, 2)
эквиваленттүүx IN (1, 2)
x <> ANY (1, 2)
эквиваленттүү(x <> 1) OR (x <> 2)
Чакан сурамдын натыйжасы тандоодогу бир тилкени көрсөтө алат. Мисалы, келгиле, бардык буйрутмаларды тандап, аларга продукттун аталышы жөнүндө маалыматты кошолу:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО *,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(Id=Orders.ProductId КАЙДАГЫ Продукциялардан ПродуктАтын ТАНДОО) Товар катары</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Заказдардан</font></font><font></font>
@A@
INSERT буйругунда, тилкелердин бирине киргизилген маанини аныктоо үчүн ички сурамдарды колдонсо болот:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>Заказдарга
INSERT
INTO
(ProductId, CreatedAt, ProductCount, Price)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
БААЛУУЛАР</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(ProductName=
'Galaxy S8'
WHERE
Продукттарынан ID ТАҢДАҢЫЗ),</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
'23-05-2018'
, </font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
2,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
(Продукциянын баасын ТАҢДАҢЫЗ,
WHERE
ProductName=
'Galaxy S8'
)</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
)</font></font><font></font>
UPDATE буйругунда төмөнкү сурамдарды колдонсо болот:
SET билдирүүсүнөн кийин белгиленген маани катары
WHERE пунктундагы шарттын бөлүгү катары
Ошентип, келгиле, Буйрутмалар таблицасында сатылып алынган Apple өнүмдөрүнүн санын 2ге көбөйтөлү:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
UPDATE
Заказдар</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SET
ProductCount = ProductCount + 2</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
ProductId
IN
(
SELECT
Id
FROM
Products
WHERE
Manufacturer=
'Apple'
);</font></font><font></font>
@A@
Же төмөнкү суроонун натыйжасында алынган буйрутма үчүн буюмдун баасын белгилеңиз:
@A@
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
UPDATE
Заказдар</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SET
баасы = (Id=Orders.ProductId КЕРЕКТЕГИ өнүмдөрдүн баасын тандаңыз) + 3000</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
Id=1;</font></font><font></font>2
DELETE буйругунда шарттын бир бөлүгү катары подсуроолор да колдонулат. Ошентип, келгиле, Galaxy S8 үчүн бардык буйруктарды жок кылалы:
@A@
font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>Заказдардан ЖОК</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
ProductId=(Идентификаторду Продукттардан ТАҢДАҢЫЗ
WHERE
Prod @A@