SQL Querylar 3ta bosqchida ishlaydi:
1. Row filtering - ushbu bosqichda FROM, WHERE, GROUP BY va HAVING lar ishga tushadi.
2. Column filtering - ustunlar odatda SELECT statement bilan filter qilinadi.
3. Row filtering - DISTINCT, ORDER BY va LIMIT lar ishga tushadi.
Ha, ha adashmadingiz row filtering 2 marta amalga oshiriladi agar siz yozadigan SQL query shuni talab qilsa.
SELECT id, full_name, university, gpa FROM student WHERE gpa > 3.00 ORDER BY full_name;Yuqoridagi SQL queryni keling tahlil qilib nimalar sodir bo'lishini kuzatib chiqamiz.
FROM, WHERE execution
Birinchi o'rinda FROM va WHERE ishga tushadi va student tabledan kimda gpa 3.00 dan katta bo'lsa o'sha foydalanuvchilarni tanlaydi. Ammo qanday tanlaydi, bu albatta loop bilan sodir bo'ladi. Har bir rowni filter qilib oladi, agar gpa > 3.00 bo'lsa ularni qoldiradi agar unday bo'lmasa ulardan keyingi rowlarni tekshiradi.
GROUP BY, HAVING execution
GPA 3.00dan katta qiymatlar tanlab olindi, loop tugadi. Keyingi bosqich agar siz ularni guruhlagan bo'lsangiz GROUP BY ishga tushadi. Guruhlangan elementlarga shart berish uchun esa HAVING ishlatasiz WHERE emas. Chunki WHERE guruhlashdan avval bajariladi. Guruhlashdan keyin esa ularni shart asosida tanlash uchun HAVING clause kerak.
SELECT execution
FROM va WHERE barcha rowlarni barcha columnlari bilan olib keladi ammo SELECT bu yerda qaysi columnlarni bizga ko'rsatishni hal qiladi xolos. Ya'ni siz SELECT deb qaysi columlarni kiritsangiz o'shalarni sizga ko'rsatadi.
ORDER BY, LIMIT execution
Demak bizda ko'rsatiladigan columnlar, table va rowlar aniq, endi ularni tartiblash kerak. Agar siz ORDER BY deya qaysidir columnni belgilagan bo'lsangiz u SELECT qilingan elementlarni siz aytgan column bo'yicha tartiblab chiqadi. Agar tartiblangan elementlarni limitini bergan bo'lsangiz demak tartiblab bo'lgandan keyin ularni siz aytgan LIMIT bo'yicha sizga taqdim etadi.
Ko'rib turibsizki SQL queryni qanchalik tezlashtirish yoki sekinlashtirish uni bosqichlari ko'pligi va qaysi bosqichdan qanchalik yaxshi foydalanishingizga ham bog'liqlik tomonlari bor.
@otabekswe