5.1 HAVING Operator
SQLda yana bir foydali operator bor, u GROUP BY bilan birga qo'llaniladi, uning nomi HAVING.
Ma'nosiga ko'ra u WHERE operatori bilan to'liq teng. Faqatgina WHERE guruhlashdan oldin qatorlarni filtrlash imkonini beradi, HAVING esa guruhlashdan keyin yozuvlarga qo'llanadigan filtrni belgilashga imkon beradi.
Guruhlash va guruhlash natijalarini filtrlashda so'rovning umumiy ko'rinishi quyidagicha:
SELECT kolonkalar
FROM jadval
WHERE shart
GROUP BY kolonkalar
HAVING shart
HAVING faqat GROUP BY so'rovda mavjud bo'lsa ishlatilishi mumkin.
Keling, yillarga qarab ishga olingan xodimlar sonini ko'rsatuvchi so'rov yozamiz.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
Va bu so'rovning natijasi:
| hire_year | total |
|---|---|
| 2012 | 1 |
| 2013 | 1 |
| 2014 | 1 |
| 2015 | 2 |
| 2018 | 1 |
Endi esa bitta yoki undan kam xodim olingan yillarni chiqarib tashlaymiz. Misol:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
Va bu so'rovning natijasi:
| hire_year | total |
|---|---|
| 2015 | 2 |
5.3 Operatorlarni bajarish tartibi
To'g'ri va samarali SQL-so'rovlar yozish uchun ularning SQL-server tomonidan qanday bajarilishini tushunish kerak.
Amallarni bajarish tartibi qat'iy va sizning xohishingizga bog'liq emas. Siz operatorlarni joylab, boshqa tartibni hosil qilolmaysiz.
SQL-so'rov bir necha bosqichda amalga oshiriladi. Shu tartibda.
- Bosqich 1 – qatorlarni tanlash
- Avval belgilangan jadvallardan barcha qatorlar tanlanadi.
- Keyin ularga hisoblangan maydonlar qo'shiladi.
- Va keyin
WHEREshartiga javob beradigan qatorlar qoladi. - Bosqich 2 – guruhlash
- Shundan so'ng olingan natijalarga guruhlash qo'llaniladi.
- Guruhlash jarayonida
COUNT(*)kabi maydonlar hisoblanadi. - Va nihoyat guruhlash natijasiga
HAVINGfiltri qo'llaniladi. - Bosqich 3 – saralash
- Oldingi bosqichlarda olingan qatorlar
ORDER BYyordamida saralanadi.
Va nihoyat, natijani LIMIT va OFFSET yordamida kesish mumkin.
GO TO FULL VERSION