Loading...

Негизги SQL буйруктарындагы подсуроолор

SELECT билдирүүсүндө биз төмөнкү сурамдарды төрт жол менен киргизе алабыз:

  1. WHERE сүйлөмүндөгү шартта

  2. HAVING туюнтмасындагы шартта

  3. FROM туюнтмасында тандоо үчүн таблица катары

  4. 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 оператору

Көбүнчө, подсуроолор маанилердин топтомун тандап алган 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@

MySQLдеги SELECT ичиндеги подсуроолор

INSERT буйругундагы подсуроолор

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>

@A@

UPDATE буйругундагы подсуроолор

UPDATE буйругунда төмөнкү сурамдарды колдонсо болот:

  1. SET билдирүүсүнөн кийин белгиленген маани катары

  2. 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

@A@

DELETE буйругундагы подсуроолор

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@