Junior
SQLде WHERE жана HAVING курулуштарынын айырмасы эмнеде?
sobes.tech AI
AIден жооп
WHERE, саптар группалоодон (GROUP BY) мурда фильтрлейт, кайсы саптар агрегаттык функцияларга катыша турганын таасир этет. HAVING, группалоодон кейин, агрегаттык функциялардын жыйынтыктары боюнча группаларды фильтрлейт.
| Өзгөчөлүк | WHERE | HAVING |
|---|---|---|
| Колдонуу | Жалгыз саптарга | Саптардын топторуна |
| Өңдөө убактысы | GROUP BYдан мурда | GROUP BYдан кейин |
| Колдонуу | Таблицадагы талаалар менен, бирок жок агрегаттык функциялар менен | Агрегаттык функциялардын жыйынтыктары менен же GROUP BY талаалары менен |
WHERE колдонуу мисалы:
SELECT продукт_аты, баа
FROM продуктылар
WHERE category_id = 1; -- Саптарды **группалоодон** **мурда** фильтрлейт (эгер керек болсо)
HAVING колдонуу мисалы:
SELECT category_id, COUNT(*) AS жалпы_продуктылар
FROM продуктылар
GROUP BY category_id
HAVING COUNT(*) > 5; -- Жалпы продуктулардын санын эсептегенден **кейин** группаларды фильтрлейт
Коомдош колдонуу мисалы:
SELECT category_id, AVG(баа) AS орточо_баа
FROM продуктылар
WHERE склад > 0 -- Жана гана складтагы продуктуларды **группалоодон** **мурда** фильтрлейт
GROUP BY category_id
HAVING AVG(баа) < 100; -- Орточо баасы 100дөн төмөн болгон группаларды **кейин** фильтрлейт